Docker、Kubernetes 和 Helm
照片由ammiel jr在 Unsplash上拍摄
您是否曾经将代码从一个环境部署到另一个环境,但由于操作系统或一般环境与开发环境略有不同,因此不得不花时间重新配置文件、重新下载库和重新做工作?
对于开发人员来说,即使只是能够轻松地将不同的应用程序移植到新的环境中也需要花费大量的时间。
不仅如此,应用程序可能会受到其可运行的操作系统的限制,并且需要更多的资源。
随着容器的普及,这种情况已经发生了很大变化。
什么是容器和容器化?
简而言之,容器将代码及其依赖项打包在一起,以便能够在不同的环境中可靠高效地运行。容器化是指将应用程序与其库、依赖项和配置文件捆绑在一起,以便应用程序在多个计算环境中高效运行。
容器化的好处
我们想讨论三种开发者可能会遇到的技术。但首先,如果您还没有使用过容器,我们想讨论一下容器的一些好处。例如:
- 资源效率:容器的主要优势在于资源效率。容器不需要单独的操作系统,因此占用的资源更少。有些人可能会认为容器的优势与虚拟机类似。然而,虚拟机通常占用数 GB 的空间。相比之下,容器通常占用兆字节的空间。
- 平台独立性:容器的可移植性也是另一个巨大的优势,因为它封装了应用程序的所有依赖项,因此允许您轻松地在公共服务器和虚拟服务器的不同环境中运行应用程序。这种可移植性还使组织能够灵活地开展工作,因为它加快了开发过程,并允许开发人员轻松切换到其他云环境。
- 有效的资源共享:尽管容器运行在同一服务器上并共享相同的资源,但它们彼此之间并不通信。因此,如果一个应用程序崩溃,另一个应用程序仍能正常运行。这种有效的资源共享以及应用程序之间的工作隔离可以降低安全风险,因为一个应用程序的任何负面影响都不会传播到其他正在运行的容器。
- 可预测的环境:容器允许开发人员创建与其他应用程序隔离的可预测环境。因此,无论应用程序部署在何处,容器化都能使程序员保持工作一致性。
- 平滑扩展:容器的另一个主要优势是水平扩展。在集群环境中,您可以添加相同的容器来扩展整个流程。借助智能扩展程序,您可以实时运行容器并大幅降低资源成本。这还能加快您在使用容器时的投资回报。目前,Twitter、Netflix 和 Google 等主流供应商都在使用此功能。
容器管理从 Docker 到 Helm 的演变
尽管容器提供了许多优势,但它们也带来了许多新的复杂性,尤其是在微服务概念日益突出的情况下。
不仅需要创建容器,更需要更好地管理它们。下面我们将讨论目前流行的三种容器和容器管理技术。
Docker
谈论容器时不能不提及 Docker。
现在很多人可能以为 Docker 是第一个容器技术,但事实并非如此。如果你想了解更多,Linux 学院有很多关于容器历史的精彩内容。
现在开始讨论 Docker。
Docker 是一个基于 Linux 容器的开源项目。该容器引擎基于 Dotcloud 开发。Docker 使开发人员能够更加专注于代码编写,而无需担心应用程序将运行在哪个系统上。
Docker 采用客户端/服务器架构。这意味着 Docker 服务器负责所有与容器相关的操作。该服务器通过 Docker 客户端使用 REST API 或 CLI 接收命令。
诸如“ docker run ”或“ docker build ”之类的命令。
还有一些细微差别值得深入研究。我们推荐阅读 Stackify 的 Docker Image vs container 文章,因为它对其中一些内容进行了很好的阐述。
Kubernetes
Kubernetes 最初由 Google 开发,是一个用于管理不同环境中容器化应用程序的开源系统。该项目的主要目标是提供更优的方法,用于跨不同基础架构管理应用程序的服务或组件。Kubernetes 平台允许您定义应用程序的运行方式或与环境的交互方式。作为用户,您可以方便地扩展服务并执行更新。
Kubernetes 系统采用分层结构构建——每一层都抽象了底层的复杂性。首先,底层通过共享网络将虚拟机和物理机引入集群。在这里,其中一台服务器充当主服务器,并充当网关,向客户端和用户公开 API。
从这里开始,其他机器充当节点,从主节点获取如何管理不同工作负载的指令。每个节点都需要运行某种形式的容器软件,以确保它能够正确执行主节点提供的指令。为了更好地理解这个主题,Digital Ocean 在这里对此进行了进一步的阐述。您还可以在 Coursera 上学习 Google Cloud 的免费课程。
舵
Helm 本身是一个应用程序包管理器,可以在 Kubernetes 上运行。该程序允许您通过 helm-charts 描述应用程序结构,并通过简单的命令进行管理。Helms 带来了巨大的变革,它重新定义了服务器端应用程序的管理、存储甚至定义方式。该管理器简化了微服务的大规模采用,因此您可以使用多个微型服务来取代单体应用程序。此外,您还可以基于现有的松耦合微服务构建新的应用程序。
该工具通过渲染模板并与 Kubernetes API 通信,简化了 Kubernetes 应用程序的管理和安装。该管理器可以轻松存储在磁盘上,并通过 RedHat 软件包和 Debian 等图表存储库获取。
它是如何工作的?
Helm 将应用程序的逻辑组件分组到“图表”中,以便您能够轻松地在较长时间内部署和维护它们。每次将图表部署到集群时,Helm 的服务器端组件都会创建其版本。此版本会跟踪应用程序随时间推移的部署情况。借助 Helm,您几乎可以虚拟部署任何内容——从 Redis 缓存到复杂的 Web 应用程序。
结论:
容器化并非新概念,Docker 也并非唯一一项旨在帮助开发人员轻松配置容器的技术。然而,作为一名开发人员,了解容器的优势并知道如何使用容器,对简化代码的部署和维护有着至关重要的影响。
请在下面告诉我你的想法。
Airbnb 的 Airflow 与 Spotify 的 Luigi
面向未来的五大大数据工具——从 Hadoop 到 Cassandra
文章来源:https://dev.to/seattledataguy/docker-kubernetes-and-helm-3ioa