领先的云编排工具与容器管理方案解析
1. 容器技术的优势与内置灾难恢复
容器技术在软件领域带来了显著变革,其优势众多。容器镜像作为不可变基础设施的基本构建块,全部经过精心管理并存储在仓库中。在灾难发生时,能够加速并自动化应用和数据容器的重建。容器的优势总结如下:
-
敏捷的应用创建和部署
:相较于使用虚拟机镜像,容器镜像的创建更加便捷高效。
-
持续开发、集成和部署
:由于镜像的不可变性,能够实现可靠且频繁的容器镜像构建和部署,并且可以快速轻松地回滚。
-
开发与运维关注点分离
:在构建/发布时创建应用容器镜像,而非部署时,从而将应用与基础设施解耦。
-
以应用为中心的管理
:将抽象层次从在虚拟硬件上运行操作系统提升到在操作系统上使用逻辑资源运行应用。
-
松散耦合、分布式、弹性和独立的微服务
:应用被拆分为更小、独立的部分,可以动态部署和管理,而不是在一台大型专用机器上运行庞大的单体堆栈。
-
资源隔离
:保证可预测的应用性能。
-
资源利用率
:确保更高的效率和密度。
容器化技术为软件工程领域带来了一系列范式转变,使 IT 运营实现了更具决定性、更深入的自动化、增强和加速。
2. 容器管理任务与工具
随着容器在云环境中的快速普及,云运营团队面临着额外的操作复杂性,容器在物理机器中的高密度也加剧了这种复杂性。因此,容器的生命周期管理变得繁琐,需要强大的自动化工具。市场上有多种容器管理解决方案,其功能如下:
| 功能 | 描述 |
| — | — |
| 供应 | 可以在容器集群中供应或调度容器并启动它们,理想情况下,根据资源和地理位置等要求在最佳的虚拟机或裸金属服务器上启动容器。 |
| 配置脚本编写 | 允许将特定的应用配置加载到容器中,通常使用 YAML 或 JSON 编写,类似于使用 Juju Charms、Puppet Manifests 或 Chef Recipes。 |
| 监控 | 跟踪和监控容器的健康状况以及集群中的主机。当容器崩溃时,监控工具会启动新实例;当服务器故障时,工具会在另一台主机上重启容器。还会运行系统健康检查,并报告容器、虚拟机和服务器的异常情况。 |
| 滚动升级和回滚 | 部署容器的新版本或容器内运行的应用时,工具会自动在容器集群中更新。如果出现问题,可以回滚到已知的良好配置。 |
| 服务发现 | 容器通过服务发现自动找到合适的服务,例如帮助前端应用(如 WordPress)通过 DNS 或代理动态发现其对应的后端服务(如 SQL 数据库实例)。 |
| 容器策略管理 | 策略对于在多种环境中激活和加速容器使用至关重要。策略规定了工具如何、何时以及在何处启动容器,例如为每个容器分配多少核心等配置可以通过精心设计和定义的策略实现自动化。 |
3. 主流容器管理工具
3.1 Docker Swarm
容器已成为软件应用的流行交付机制,部分原因是微服务架构的兴起。在单个 Docker 主机上进行开发时,使用容器相对简单,但在生产环境中部署应用时,需要具备弹性、服务扩展和实时更新等能力,这就催生了容器编排的概念。
Docker Swarm 是 Docker 平台的独立编排器,它不仅提供容器集群和调度功能,还让用户能够控制整个应用生命周期。Swarm 模式是 Docker 内置的集群管理器,从 Docker 1.12 版本开始,它成为 Docker 引擎的一部分,具备扩展、容器发现和安全等功能,且只需最少的设置。Swarm 模式支持滚动更新、节点间的传输层安全加密、负载均衡和简单的服务抽象,能够将容器负载分布到多个主机上,并允许在多个主机平台上设置集群。不过,主机平台需要具备集成(不同节点上的容器需要相互通信)和隔离(隔离和保护不同的容器工作负载)功能。
其工作流程如下:
graph LR
A[创建 Swarm 集群] --> B[分配节点角色(Manager 或 Worker)]
B --> C[Manager 维护集群状态并调度容器工作负载]
C --> D[Worker 接收并运行容器工作负载]
3.2 Kubernetes
Kubernetes 是一个开源系统,用于自动化容器化应用的部署、扩展和管理。它将组成应用的容器分组为逻辑单元,便于管理和发现。Kubernetes 具有高度的互操作性,以及自我修复、自动滚动更新和回滚、存储编排等功能。其主要特性包括:
-
自动装箱
:可以指定每个容器所需的 CPU 或 RAM 数量,并设置限制。
-
水平扩展
:可以通过简单的命令或根据 CPU 使用率自动扩展应用。
-
自我修复
:重启失败的容器,在节点死亡时替换和重新调度容器。
-
服务发现和负载均衡
:为容器分配自己的 IP 地址和单个 DNS 名称,并可以在它们之间进行负载均衡。
-
自动滚动更新和回滚
:逐步推出更改,确保不会同时杀死所有实例。
-
存储编排
:自动挂载所需的存储系统,包括本地存储、公共云提供商(如 GCP 或 AWS)或网络存储系统(如 NFS、iSCSI、Gluster、Ceph、Cinder 或 Flocker)。
-
批量执行
:可以使用作业管理批量和持续集成工作负载。
在实际生产中,真正的应用通常跨越多个容器,需要部署在多个服务器主机上。Kubernetes 提供了部署容器所需的编排和管理能力,允许构建跨越多个容器的应用服务,在集群中调度这些容器,扩展容器并长期管理其健康状况。同时,Kubernetes 还需要与网络、存储、安全、遥测等服务集成,以提供全面的容器基础设施。
Kubernetes 解决了容器扩散带来的许多常见问题,例如将容器组合成“Pod”。Pod 为分组的容器添加了一层抽象,有助于调度工作负载并为这些容器提供必要的服务(如网络和存储)。Kubernetes 的其他部分则帮助在这些 Pod 之间进行负载均衡,并确保有足够数量的容器运行以支持工作负载。
Kubernetes 的关键术语解释如下:
| 术语 | 描述 |
| — | — |
| Master | 控制 Kubernetes 节点的机器,所有任务分配都由此发起。 |
| Node | 执行请求和分配任务的机器,由 Kubernetes Master 控制。 |
| Pod | 部署到单个节点的一个或多个容器的组,Pod 中的所有容器共享 IP 地址、IPC、主机名和其他资源,抽象了网络和存储,便于在集群中移动容器。 |
| 复制控制器 | 控制集群中应该运行多少个相同的 Pod 副本。 |
| 服务 | 将工作定义与 Pod 解耦,Kubernetes 服务代理会自动将服务请求发送到正确的 Pod,无论它在集群中移动到何处或是否被替换。 |
| Kubelet | 运行在节点上的服务,读取容器清单并确保定义的容器已启动并运行。 |
| Kubectl | Kubernetes 的命令行配置工具。 |
Kubernetes 的工作流程如下:
graph LR
A[管理员或 DevOps 团队发出命令] --> B[Kubernetes Master 接收命令]
B --> C[Master 通过多个服务自动选择合适的节点]
C --> D[分配资源并将 Pod 分配到节点执行工作]
3.3 Mesosphere Marathon
Marathon 是 Mesosphere 的 DC/OS 和 Apache Mesos 的容器编排平台。DC/OS 是基于 Mesos 分布式系统内核的分布式操作系统,Mesos 是一个开源的集群管理系统。Marathon 通过其合作伙伴程序 Chronos(一个容错作业调度器),提供现有有状态应用和基于容器的无状态应用之间的管理集成。Marathon 具有许多特性,包括高可用性、服务发现和负载均衡。如果在 DC/OS 上运行,应用还可以获得虚拟 IP 路由。不过,Marathon 只能在带有 Mesos 的软件栈上运行,并且某些功能(如身份验证)仅在 DC/OS 上的 Marathon 中可用。
Marathon 的特性如下:
-
高可用性
:作为主动/被动集群运行,通过领导者选举实现 100% 正常运行时间。
-
多容器运行时
:对 Mesos 容器(使用 cgroups)和 Docker 都提供一流的支持。
-
有状态应用
:可以将持久存储卷绑定到应用,例如运行 MySQL 和 Postgres 等数据库,并由 Mesos 管理存储。
-
约束
:可以限制每个机架、节点等上只能运行一个应用实例。
-
服务发现和负载均衡
:提供多种方法。
-
健康检查
:使用 HTTP 或 TCP 检查评估应用的健康状况。
-
事件订阅
:提供 HTTP 端点以接收通知,例如与外部负载均衡器集成。
-
指标
:可以在 /metrics 以 JSON 格式查询指标,或推送到 graphite、statsd 和 Datadog 等系统。
-
完整的 REST API
:便于集成和脚本编写。
在 DC/OS 上运行时,Marathon 还获得以下额外特性:
-
虚拟 IP 路由
:为应用分配专用的虚拟地址,应用在集群中任何地方都可访问,并且会自动进行负载均衡和故障重路由。
-
授权(仅 DC/OS 企业版)
:真正的多租户,每个用户或组可以访问自己的应用和组。
4. 云编排解决方案
4.1 Micro Focus 云编排解决方案
Micro Focus 云编排解决方案(https://www.microfocus.com/)提供了更高的灵活性和简化的操作,可安全地跨混合云创建、部署和运营应用程序和服务,并提高交付速度。该公司提供多种云编排解决方案,具体如下:
| 解决方案类型 | 描述 |
| — | — |
| 云服务 | 云管理软件,使企业能够轻松从安全、合规的云服务中受益。 |
| 持续部署 | 提供复杂应用程序在整个应用程序生命周期中的自动化和发布管理。 |
| DevOps | 统一开发和运营,加速创新以满足市场需求。 |
| 企业架构 | 帮助识别浪费和冗余,并推动转型。 |
| API 管理 | 管理异构环境和 SOA 中的 API、应用程序和集成的生命周期。 |
4.2 RightScale 多云平台
RightScale 多云平台有助于混合搭配公共云、私有云和虚拟化环境,以满足任何云组合策略。该平台支持多种虚拟机管理程序(如 KVM、Xen 和 vSphere)以及操作系统(如 CentOS、RHEL、SUSE、Ubuntu 和 Windows)。采用组合策略使企业能够确保云策略的未来适应性,优化成本和性能,利用全球资源并获得财务灵活性和谈判优势。其优势流程如下:
graph LR
A[选择不同云环境和平台] --> B[根据需求组合资源]
B --> C[优化成本和性能]
C --> D[获得财务灵活性和谈判优势]
4.3 Cloudify
Cloudify 是一个开源的云编排平台,旨在跨混合云和堆栈环境自动化应用程序和网络服务的部署、配置和修复。它采用基于云应用拓扑和编排规范(TOSCA)的声明式方法,用户只需专注于通过简单易读的术语定义应用程序的期望状态,Cloudify 会负责实现该状态,并持续监控应用程序,以确保在发生故障或容量不足时维持所需的服务级别协议(SLA)。
Cloudify 的纯编排平台提供了一个通用的自动化引擎,涵盖了从应用程序到网络服务、数据库和基础设施等生产环境中使用的各种工具。通过基于角色的访问控制和细粒度的多租户,开发人员可以访问他们的应用程序,而 IT 部门则可以控制资源和数据。
4.4 IBM 云编排器
组件化应用程序给操作生命周期管理带来了挑战,尤其是在部署和重新部署方面。当涉及多个云(包括混合云和来自多个提供商的公共云)时,由于使用不同的托管模型,这些挑战会更加复杂。通过 DevOps 工具自动化部署可以缓解一些问题,但这些工具主要是为数据中心使用而设计的,缺乏处理云的弹性和可移植性的能力,并且大多数是以部署为中心的,而云需要更全面的端到端操作自动化。
IBM 云编排器作为一个用于操作自动化的云管理平台应运而生。它反映了对更复杂的应用程序生命周期管理的需求,以应对复杂的 IT 和业务框架。该平台将云部署的三个要素(基础设施服务、应用程序平台和治理)组织成模板,以便进行有序控制。其图形界面允许用户为每个模板定义控制结构,并导入第三方元素。所有元素通过 IBM 的业务流程管理器(BPM)集成,该管理器与核心业务活动相关联。
应用程序、基础设施和平台描述是高度抽象的模式,这意味着用户可以用通用术语定义部署,然后描述该通用方法如何应用于任何云或私有 IT 平台。模式可以引用现有的 DevOps 工具,管理员可以将分散的 DevOps 部署与端到端编排连接起来。使用 IBM 云编排器可以协调云提供商提供的编排工具之间的差异,以及容器和虚拟机之间的部署差异。
使用 IBM 云编排器的步骤如下:
1.
定义应用程序操作生命周期
:将应用程序的操作生命周期定义为一组业务流程,使用 BPM 概述部署所需完成的抽象步骤以及操作过程中可能出现的事件(如故障或扩展)。IBM 云编排器控制台使用简单的拖放步骤简化此过程。
2.
定义模式
:为每个应用程序及其托管环境定义模式。模式可以描述单个部署、集群、Pod 或组部署,用户可以为多云环境中的每个云定义不同的模式。同时,要定义结构(组件的工作流链接图)以及与每个事件相关的管理事件、规则和过程描述,包括部署请求。如果所有这些都正确完成,IBM 云编排器将自动管理整个应用程序生命周期,例如在多个云之间平衡工作、在公共云和数据中心之间切换、用一个设施备份另一个设施等。
5. 总结
容器技术凭借其诸多优势,如敏捷的应用创建和部署、持续开发集成与部署等,为软件工程领域带来了范式转变。然而,随着容器在云环境中的快速普及,容器管理变得至关重要。市场上出现了多种容器管理工具,如 Docker Swarm、Kubernetes 和 Mesosphere Marathon,它们各有特点和适用场景。
同时,为了满足企业在多云环境下的需求,云编排解决方案也不断涌现。Micro Focus、RightScale、Cloudify 和 IBM 等公司提供的云编排解决方案,从不同角度帮助企业实现应用程序和服务的自动化部署、管理和优化。
企业在选择容器管理工具和云编排解决方案时,应根据自身的业务需求、技术栈和预算等因素进行综合考虑,以充分发挥容器和云技术的优势,提高运营效率和竞争力。
总之,多云管理和编排解决方案对于企业从多云项目中获得巨大收益是不可或缺的。通过合理选择和使用这些工具和平台,企业能够更好地应对复杂的 IT 环境和业务挑战,实现数字化转型和创新发展。
325



被折叠的 条评论
为什么被折叠?



