自 2013 年Docker彻底改变了概念以来,容器已成为应用程序开发的中流砥柱。它们的速度和资源效率使它们成为 DevOps 环境的理想选择,因为它们允许开发人员更快、更可靠地运行软件,无论软件部署在哪里。通过容器化,可以跨云和数据中心移动和扩展多个应用程序。 然而,这种可扩展性最终可能会成为运营挑战。当企业需要高效运行多个承载多个应用程序的容器时,容器编排不再只是一种选择,而是一种必然。
内容
- 什么是容器编排?
- 容器编排如何工作?
- 容器编排如何与 Kubernetes 配合使用?
- 容器编排如何与 Docker 配合使用?
- 容器编排如何与其他平台配合使用?
- 容器编排的最佳工具是什么?
什么是容器编排?
容器编排是管理、扩展和维护容器化应用程序的自动化过程。容器是包含应用程序代码、库和依赖项的软件的可执行单元,以便应用程序可以在任何地方运行。容器编排工具可以自动管理软件团队在容器生命周期中遇到的多项任务,包括以下任务:
- 部署
- 扩展和负载平衡/流量路由
- 联网
- 见解
- 配置
- 配置和调度
- 资源分配
- 迁移到物理主机
- 服务发现
- 健康监测
- 集群管理
容器编排如何工作?
根据选择的工具,可以在容器编排中应用不同的方法。容器编排工具通常与描述应用程序配置的 YAML 或 JSON 文件进行通信。配置文件指导容器编排工具如何以及在何处检索容器映像、在容器之间创建网络、存储日志数据以及安装存储卷。 容器编排工具还可以安排将容器部署到集群中,并自动确定最适合容器的主机。确定主机后,容器编排工具使用容器定义文件中提供的预定义规范来管理容器的生命周期。 容器编排工具可以在任何运行容器的环境中使用。有几个平台提供容器编排支持,其中包括Kubernetes、Docker Swarm、Amazon Elastic Container Service (ECS)和Apache Mesos。
容器编排如何与 Kubernetes 配合使用?
Kubernetes 是一个开源容器编排平台,被视为行业标准。谷歌支持的解决方案允许开发人员和运营商提供云服务,无论是平台即服务(PaaS)还是基础设施即服务(IaaS)。这是一个高度声明性的解决方案,允许开发人员通过 YAML 文件声明其容器环境的所需状态。然后 Kubernetes 建立并维护所需的状态。以下是 Kubernetes 的主要架构组件:
节点
节点是 Kubernetes 中的工作机器。它可以是虚拟的或物理的,具体取决于集群。节点接收并执行主节点分配的任务。它们还包含运行 Pod 所需的服务。每个节点由kubelet、容器运行时和kube-proxy组成。
主节点
该节点控制所有工作节点,并且是所有分配任务的起源。它通过控制面板来实现这一点,控制面板是一个编排层,公开 API 和接口来定义、部署和管理容器的生命周期。
簇
一个集群代表一个主节点和多个工作节点。集群将这些机器组合成一个单元,并在其中部署容器化应用程序。然后,工作负载被分配到各个节点,并在添加或删除节点时进行调整。
豆荚
Pod是可在 Kubernetes 中创建和管理的最小可部署计算单元。每个 Pod 代表打包在一起并部署到节点的容器集合。
部署
部署为 Pod 和ReplicaSet提供声明性更新。它使用户能够指定他们想要同时运行的 Pod 副本数量。
容器编排如何与 Docker 配合使用?
Docker 也是一个开源平台,提供了一个完全集成的容器编排工具,称为 Docker Swarm。它可以将应用程序打包并作为容器运行,从其他主机查找容器映像并部署容器。它比 Kubernetes 更简单且可扩展性较差,但 Docker 为想要访问 Kubernetes 更广泛功能的组织提供了与 Kubernetes 集成的选项。以下是Docker Swarm的主要架构组件:
一群
swarm 是一个以swarm 模式运行并管理成员资格和委派的 Docker 主机集群,同时还运行swarm 服务。
节点
节点是包含在 swarm 中的 docker 引擎实例。它可以是管理节点,也可以是工作节点。管理节点将称为任务的工作单元分派给工作节点。它还负责所有编排和容器管理任务,例如维护集群状态和服务调度。Worker节点接收并执行任务。
服务与任务
服务是需要在节点上执行的任务定义。它定义要使用哪些容器映像以及在运行的容器内执行哪些命令。任务携带一个容器以及在容器内运行的命令。一旦任务被分配到一个节点,它就不能移动到另一个节点。
容器编排如何与其他平台配合使用?
尽管 Docker 和 Kubernetes 在容器编排方面处于领先地位,但其他平台正在利用其开源软件来提供竞争。红帽 OpenShift是一个开源企业级混合平台,为需要托管容器编排的公司提供 Kubernetes 功能。其框架构建在 Linux 操作系统上,允许用户自动化容器的生命周期。 Google Kubernetes Engine由 Kubernetes 提供支持,使用户能够在 Google Cloud 上轻松部署、管理和扩展 Docker 容器。Apache Mesos 和 Amazon ECS 等其他平台也开发了自己的容器工具,允许用户运行容器,同时确保安全性和高可扩展性。
容器编排示例
容器编排为组织提供了许多好处,但这些好处在现实工作环境中是什么样子的呢?我们在下面提供了一些常见的编排示例:首先,考虑一个在假期期间流量较大的大型电子商务平台。过去,该平台必须手动配置额外的服务器来处理增加的假期负载,这是一个耗时且容易出错的过程。通过容器编排,该平台可以使用自动扩展功能,当流量增加时自动配置额外的容器,并在流量减少时自动缩减容器规模。这样一来,一旦每个人都购买、退货和换货,一月份假期高峰期间增加的流量就会减少。其次,考虑一家拥有网站、移动应用程序和后端处理系统的公司,这些系统都在不同环境中的不同服务器上运行。过去,管理这些不同的应用程序和环境需要大量的手动工作和协调。通过容器编排,该公司可以使用单一平台来管理其所有容器和环境,从而使他们能够跨不同环境轻松部署、管理和扩展其应用程序。这使得公司能够更轻松地采用新技术并简化其开发流程。
容器编排的最佳工具是什么?
在为组织选择最佳的容器编排工具时,必须考虑几个因素。这些因素因不同的工具而异。例如,对于像 Mesos 这样的工具,必须考虑软件团队的技术经验,因为它比 Swarm 这样的简单工具更复杂。组织还必须考虑要部署的容器数量,以及应用程序开发速度和扩展要求。 借助正确的工具和适当的资源管理,容器编排对于希望提高生产力和可扩展性的组织来说可以成为一种有价值的方法。