什么是容器协调?

容器编排是一种能自动部署、管理和大规模扩展容器化应用程序的技术。它简化了管理大量 容器的复杂任务。 Kubernetes等容器编排器可确保这些容器在不同的服务器和环境中高效互动。协调器为管理容器生命周期、促进服务发现和保持高可用性提供了一个框架。对于 微服务架构云原生 应用程序由众多相互依赖的组件组成)来说,该框架是基础。

通过利用容器编排, DevOps 团队 可以简化配置、资源分配和大规模扩展,使他们能够充分利用容器化的潜力,并使其与业务目标保持一致。

 

容器协调解释

容器协调可实现容器化应用程序的自动部署、管理和大规模扩展。企业利用协调器来控制和协调大量容器,确保它们在不同服务器之间高效互动。

协调层部署新版本的微服务,大规模扩展微服务以满足需求,并监控微服务的性能和健康状况

图 1:协调层部署新版本的微服务,大规模扩展微服务以满足需求,并监控微服务的性能和健康状况

Kubernetes 等协调器可管理生命周期、促进服务发现并保持高可用性。它们使容器能够协同运行,这对于微服务架构至关重要,在这种架构中,云原生应用程序由众多相互依存的组件组成。

事实上,容器编排市场正与微服务架构、云原生应用和 容器化的采用保持同步。据计算,2022 年 的市场规模为 7.4572 亿美元,五年间增长了 26%, 市场规模持续攀升,预计到 2029 年将达到 1,0847.9 亿美元

 

编排工具

协调工具为容器工作负载的自动化提供了一个框架,使 DevOps 团队能够管理容器的生命周期。这些系统或协调引擎可促进先进的网络功能,简化容器和微服务的配置,同时调整资源以满足需求。有了协调器,DevOps 团队就能充分发挥容器化的潜力,使其与业务目标保持一致。

流行的容器协调引擎

  • Kubernetes® (K8s)
  • 牧场主
  • SUSE Rancher
  • 亚马逊弹性 Kubernetes 服务 (EKS)
  • Azure Kubernetes 服务 (AKS)
  • 谷歌 Kubernetes 引擎(GKE)/Anthos
  • 红帽 OpenShift 容器平台 (OCP)
  • 介质
  • 思科容器平台(CCP)
  • 用于 Kubernetes 的 Oracle 容器引擎 (OKE)
  • 爱立信容器云(ECC)
  • Docker Swarm
  • HashiCorp Nomad

协调引擎的优势来自于它们通常采用的声明式模型,这种模型有效地结合了 基础设施即服务(IaaS)平台即服务(PaaS)的优势。

  • IaaS 提供细粒度的控制和自动化功能,使开发人员能够管理服务器、存储和网络等底层基础设施。这样,开发人员就可以灵活地定制部署,以满足特定需求。
  • PaaS 提供了更高层次的抽象,使开发人员能够专注于自己的应用程序,而不必担心底层基础设施。PaaS 使工程师更容易部署和管理应用程序,但也使他们对基础设施的控制能力降低。

协调器汲取了两个世界的精华,为开发人员提供了强大的功能和灵活性,以及跨环境(从物理机和本地数据中心到虚拟部署和基于云的系统)的一致操作体验。

著名协调引擎的核心功能包括调度、资源管理、服务发现、健康检查、自动扩展以及管理更新和升级。

 

协调器的关键组件

目前市场上各种工具的容器编排组件术语各不相同。不过,其基本概念和功能还是相对一致的。表 3 提供了流行容器编排器的主要组件和相应术语的比较概览。为了介绍协调机制,我们将使用 Kubernetes 术语。

容器协调组件概述

图 2:容器协调组件概述

像 Kubernetes 这样的协调引擎非常复杂,由多个关键技术组件组成,它们协同工作,共同管理容器的生命周期。通过了解关键组件,您可以了解如何最好地利用容器化技术。

控制平面

Kubernetes 的核心是其控制平面,即调度和管理应用程序生命周期的指挥中心。控制平面公开 Kubernetes API、协调部署并指导整个系统的通信。它还能监控容器健康状况并管理集群,确保容器映像可随时从注册表中获取,以便部署。

Kubernetes 控制平面由几个组件组成--etcd、API 服务器、调度器和控制器管理器。

etcd

由 CoreOS 开发、后被红帽收购的 etcd 数据存储是一种分布式键值存储,用于保存集群的配置数据。它为协调器的行动提供信息,以维持声明式策略所定义的理想应用状态。该策略概述了应用程序的优化环境,指导协调器管理实例数量、存储需求和资源分配等属性。

应用程序接口服务器

Kubernetes API 服务器发挥着举足轻重的作用,它通过 RESTful 接口公开集群的功能。它处理请求、验证请求,并根据收到的指令更新群集的状态。这种机制允许对工作负载和资源进行动态配置和管理。

调度员

Kubernetes 中的调度程序会根据资源可用性和其他约束条件(如服务质量和亲和规则)将工作负载分配给工作节点。调度程序可确保工作负载的分配在群集的当前状态和资源配置下保持优化。

主计长-经理

控制器管理器维护应用程序的理想状态。它通过控制器和控制回路运行,控制器和控制回路监控集群的共享状态,并做出调整,使当前状态与期望状态保持一致。这些控制器可确保节点和 pod 的稳定性,对集群健康状况的变化做出响应,以保持运行的一致性。

容器协调器 控制平面组件 工作节点组件 部署单位 服务
Kubernetes kubelet应用程序接口服务器、调度程序、控制器管理器等 kubelet 花苞 服务
Docker Swarm 经理 工人 服务 堆栈
游牧民族 服务器 代理 工作 分配
介质 主人 代理 任务 工作
OpenShift 控制台、控制器管理器、etcd 节点 花苞 服务
亚马逊弹性容器服务(ECS) 集群控制器 EC2 实例 任务 服务
谷歌 Kubernetes 引擎(GKE) 控制平面 节点 花苞 服务
Azure Kubernetes 服务 (AKS) 控制平面 节点 花苞 服务

表 1:各种协调引擎的通用组件。

协调和不可变基础设施

与传统服务器和虚拟机相比,容器及其基础架构所处的不可变范式使得部署后的修改不复存在。取而代之的是,通过从带有必要更改的通用映像中部署新容器或服务器来应用更新或修复。

不可变基础设施固有的可编程性实现了自动化。基础设施即代码(IaC) 是现代基础设施的一大标志,它允许应用程序以编程方式配置、配置和管理所要求的基础设施。容器编排、不可变基础架构和 IaC 驱动的自动化相结合,可提供无与伦比的灵活性和可扩展性。

 

容器协调和管道

在容器化和 DevOps 双引擎的推动下,容器编排将速度和可扩展性结合在一起,为当今动态和高要求的 生产管道提供了支持。

CI/CD 管道应用程序开发生命周期

图 3:CI/CD 管道应用程序开发生命周期

购置和建设管道阶段

在获取和构建阶段,开发人员从版本控制存储库中提取代码,启动构建流程。自动化工具可将源代码编译成二进制工件,以便使用 Docker 或 BuildKit 等工具进行部署。容器映像一旦构建完成,就会存储在 Docker Hub 或 Google Artifact Registry 等注册表中。

获取和构建阶段通过脚本管理依赖关系和运行初步测试,促进应用程序的一致构建。其结果是一个可靠的构建,当与主分支集成时,会触发进一步的自动化流程。

运行阶段

在构建阶段结束后,管道会在受控环境中执行代码。在暂存环境中运行容器映像可以使用 Kubernetes 等容器编排工具来完成。在这一关键步骤中,团队需要进行一系列自动测试,以验证应用程序的功能。开发人员会积极查找并解决漏洞,确保只有高质量的代码才能通过开发流程。

交付阶段

在 CI/CD 管道的交付阶段,团队会自动完成新代码从 存储库到 生产就绪的过程。每次提交都会启动一系列严格的自动测试和质量检查,确保只有经过严格审核的代码才能进入暂存环境。在这种情况下,软件还要经过额外的、通常是面向客户的验证。该流程囊括了构建过程中的各种环境,每种环境都是稳定性和性能的试验场。团队对交付阶段的承诺可确保软件体现当前开发工作的最佳成果。

部署阶段

在部署阶段,当团队将应用程序推广到生产环境时,应用程序就到了关键时刻。Kubernetes 等容器编排工具负责控制、大规模扩展应用程序并以最少的停机时间进行更新。团队随时准备好回滚机制,以便在出现任何问题时恢复到以前的版本。此时,应用程序开始运行,为其目标用户提供服务,并实现其在数字生态系统中的目的。

维持阶段

部署后,团队将过渡到积极维护应用程序。它们采用 运行时解决方案 来持续监控性能、记录错误并收集用户反馈,所有这些都会推动未来的增强功能以及 容器安全

随着开发人员对应用程序进行微调、应用安全补丁和推出新功能,维护阶段凸显了现代应用程序开发的迭代性质。无一例外的是,产品持续发展,以满足用户需求并整合最新的技术进步。

 

容器协调的优势

容器协调提供了一系列与 DevOps 目标相一致的优势,最终提高了云环境的运行效率并减少了开销。

增强可扩展性

容器编排平台使企业能够根据波动的需求大规模扩展容器化应用,而无需人工干预或试图预测应用负载。该协调器的 bin 包和自动扩展功能与公共云基础设施即代码相结合,可动态分配资源,确保在高峰负载期间实现最佳性能。

促进复原力

通过在多台主机上分发容器实例,协调工具可增强应用程序的弹性。它们能检测故障并自动重新启动容器,从而最大限度地减少停机时间并保持服务的持续性。

提高效率

协调引擎可根据应用程序在各种使用场景中的需求精确调整资源,防止过度配置或要求组织为高水利用率进行架构和规划。这种效率降低了基础设施成本,最大限度地提高了投资回报。

简化管理

容器编排器提供了管理容器集群的统一界面,抽象了复杂的任务,减轻了操作负担。团队只需最少的人工干预,就能部署更新、监控健康状况并执行策略。

提高安全性

容器协调通过自动部署补丁和安全更新来增强安全性。它能在整个容器群中执行一致的安全策略,降低漏洞风险。

实现便携性

协调可确保容器化应用与底层基础架构保持一致,从而促进不同云环境和本地部署数据中心之间的可移植性。

加快部署周期

通过自动化部署流程,协调工具缩短了从开发到生产的时间,实现了快速迭代,加快了新功能的上市时间。

支持 DevOps 实践

通过与 CI/CD 管道 集成并提高软件开发的敏捷性,容器协调促进了开发和运营团队之间的协作。健康监控和自我修复等功能使团队能够减少系统支持和故障排除,优化 DevOps 的工作效率。

 

集装箱生态系统

很简单,容器生态系统代表着应用程序开发和部署的重大转变。它包含一系列组件,从运行时引擎到协调平台、注册表和安全工具,可为企业提供当今快节奏数字环境所需的重要效率。

当然,生态系统的核心在于容器引擎和协调引擎之间的协同作用。这些技术共同引导容器化应用完成其生命周期的各个复杂阶段。

容器引擎负责创建和包 装单个容器,而协调引擎则负责管理和协调分布式基础架构中的多个容器。

在开发过程中,容器引擎有助于快速原型开发和测试,使开发人员能够快速高效地进行迭代。随着应用程序的成熟,协调器将其过渡到生产中,为处理实际工作负载提供稳健、可扩展的基础。

代表容器和协调引擎动态的 Docker 和 Kubernetes

图 4:代表容器和协调引擎动态的 Docker 和 Kubernetes

对企业领导者的战略意义

软件部署的敏捷性和速度

容器生态系统加速了应用程序的部署。通过将应用程序封装在容器中,无论底层环境如何,组织都能迅速从开发转向生产。对于需要快速适应市场变化或用户需求的组织来说,这种灵活性至关重要。

提高效率和优化资源

作为传统虚拟机的替代品,容器共享底层 操作系统内核 ,消耗的资源更少。这种效率可以降低运营成本,提高计算资源的利用率,是企业管理大规模应用的关键优势。

可扩展性和灵活性

对于需求不断波动的数字企业来说,容器生态系统中的协调器至关重要,它能让企业在不影响性能的情况下大规模扩展应用程序。容器生态系统作为一个整体,完善了以前的大规模扩展能力和资源可用性。

跨环境的一致性和可移植性

容器生态系统可确保一致性和可移植性。包在容器中的应用程序可以在从本地部署的数据中心到公共云等不同计算环境中统一、可靠地运行。

托管容器环境剖析

图 5:托管容器环境剖析

为集装箱驱动的未来做好准备

未来的数字世界即使不是全部,也将是大部分应用程序在容器上运行的世界。对于管理人员来说,了解集装箱生态系统背后的协同作用可提供战略优势。有了明智的观点,您就能预测并有效地满足现代软件开发不断变化的需求,并获得最佳的投资回报率。

 

容器协调常见问题

Helm 是 Kubernetes 的包管理器,可简化 Kubernetes 集群上应用程序的部署和管理。它使用的包称为图表,是预先配置好的 Kubernetes 资源。即使是最复杂的 Kubernetes 应用程序,Helm 图表也能简化其定义、安装和升级过程。它可以管理图表之间的依赖关系,并以受控方式更新图表。对于管理复杂部署的 DevOps 团队来说,Helm 是必不可少的,因为它提供了一种高效、可重复和标准化的应用程序部署方式。
Kubernetes 中的 ReplicaSet 可确保在任何给定时间都有指定数量的 pod 复制在运行。它主要用于保证指定数量的相同 pod 的可用性。如果 pod 出现故障,ReplicaSet 会启动新的 pod 来替代它。副本集对于保持应用程序的理想状态和高可用性至关重要,尤其是在分布式和动态云环境中。
Kubernetes 中的部署可为应用程序提供声明式更新。通过它,您可以描述应用程序的生命周期,例如为应用程序使用哪些图像、pod 的数量以及更新它们的方式等。部署管理副本集,并提供回滚到先前部署状态的功能,因此对于管理无状态应用程序并确保其弹性和可扩展性至关重要。
Kubernetes 中的 StatefulSet 用于管理有状态应用程序。与部署管理的无状态应用程序不同,有状态应用程序需要持久存储和唯一的网络标识符。StatefulSets 会为每个 pod 维护一个粘性身份,确保每个 pod 都能以相同的主机名和存储空间重新调度,即使它被转移到不同的节点上也是如此。
Kubernetes 中的 DaemonSet 可确保所有(或部分)节点运行特定 pod 的副本。当节点添加到群集时,pod 也会自动添加到节点中。同样,当节点从集群中移除时,这些 pod 也会被垃圾回收。DaemonSets 是在每个节点上运行日志、监控或网络代理等任务的理想选择,因为它们可以在整个集群中自动管理这些任务的部署和大规模扩展。
Kubernetes 中的服务是一个抽象概念,它定义了一组逻辑 pod 和访问它们的策略。这种抽象方法将工作定义与 pod 分离开来。服务在一组 pod 之间路由流量,通常由选择器决定。它们可以在依赖的 pod 之间实现松散耦合,提供 IP 地址和 DNS 名称,通过它们可以访问 pod。服务对于确保网络应用程序易于访问并能适应底层 pod 配置的变化至关重要。
Kubernetes 中的 Ingress 是一种管理集群内服务外部访问(通常是 HTTP)的资源。Ingress 允许你定义将流量路由到服务的规则,包括 URL 路径、负载平衡、SSL 终止和基于名称的虚拟主机。它是管理从外部世界访问容器化应用程序的关键组件,提供了比简单的端口转发更复杂、更灵活的解决方案。
Kubernetes 中的 ConfigMap 是一种资源,用于以键值对形式存储非机密数据。Pod 可以将 ConfigMaps 作为环境变量、命令行参数或卷中的配置文件使用,这样就可以将配置工件与映像内容分开。
Kubernetes 中的持久卷(PV)是集群中由管理员配置或使用存储类动态配置的一块存储。它是集群中的一种资源,就像节点一样,并在任何单个 pod 的生命周期之外持续存在。PV 为应用程序提供了一种独立于底层存储基础架构的存储挂载方式,为有状态应用程序提供了更加一致和集成的存储解决方案。
Kubernetes 中的持久卷申请(PVC)是用户对存储的请求。它与 pod 相似,pod 消耗节点资源,而 PVC 消耗 PV 资源。PVC 允许用户抽象出如何提供存储空间以及如何使用存储空间的细节。当用户请求一个 PVC 时,它们会被绑定到集群中可用的 PV 上,从而为 Kubernetes 环境提供了一种动态管理存储资源的方式。
Kubernetes 中的自动扩展是指根据当前负载自动调整部署、副本集或有状态集中 pod 的数量。自动扩展有助于确保应用程序在任何特定时间都拥有适当数量的资源,提高资源利用率并有效处理波动的工作负载。Horizontal Pod Autoscaler(HPA)和 Vertical Pod Autoscaler(VPA)是 Kubernetes 中两种常见的自动扩展器,分别对 pod 的数量和 pod 的规模进行缩放。
上一页 什麼是容器安全?
下一页 什么是容器注册安全?