今天,我们来探讨一下市面上几种流行的容器编排工具。
什么是容器编排?
现如今,诸如 Docker 这样的容器平台因其在基于微服务架构的应用打包方面的出色表现而广受欢迎。容器拥有高度的可扩展性,能够根据需求即时创建。虽然对于少量的容器来说这不成问题,但当需要管理成百上千的容器时,情况就变得复杂了。
当容器数量随着需求动态增长时,管理容器的生命周期及其复杂性将变得极具挑战。
容器编排正是为了解决这一难题而生。它通过自动化容器的调度、部署、扩展、负载均衡、可用性和网络管理,简化了容器的管理流程。简单来说,容器编排就是自动化和管理容器及服务生命周期的过程。
它是一个大规模管理和组织多个容器及微服务架构的有效方法。
幸运的是,目前市面上有很多容器编排工具可供选择。
接下来,让我们一起探索这些工具!
Kubernetes
你可能已经猜到了,对吧?
Kubernetes 是一个开源平台,最初由谷歌设计,现在由云原生计算基金会维护。Kubernetes 支持声明式配置和自动化,能够帮助自动化部署、扩展和管理容器化的工作负载和服务。
图片来自 Kubernetes.io
Kubernetes API 促进了用户、集群组件和外部第三方组件之间的通信。Kubernetes 控制平面和节点在一组节点上运行,这些节点共同构成一个集群。应用程序的工作负载由一个或多个运行在工作节点上的 Pod 组成。控制平面负责管理 Pod 和工作节点。
许多公司,如 Babylon、Booking.com 和 AppDirect,都在广泛使用 Kubernetes。
特性:
- 服务发现和负载均衡
- 存储编排
- 自动发布和回滚
- 水平扩展
- 密钥和配置管理
- 自我修复
- 批量执行
- IPv4/IPv6双栈
- 自动装箱
想要学习 Kubernetes?不妨查看这些学习资源。
OpenShift
红帽公司提供的 OpenShift 是一个容器平台即服务 (PaaS)。它有助于在混合云环境中实现安全和可扩展的资源上进行应用程序的自动化管理。它为构建、部署和管理容器化应用程序提供了一个企业级的平台。
图片来自 Openshift
它基于 Red Hat 企业版 Linux 和 Kubernetes 引擎构建。 OpenShift 具备通过用户界面(UI)和命令行界面(CLI)管理集群的多种功能。 红帽还提供了另外两个版本的 OpenShift:
- OpenShift Online – 以软件即服务 (SaaS) 的形式提供。
- OpenShift Dedicated – 以托管服务的形式提供。
OpenShift Origin(Origin Community Distribution)是一个开源的上游社区项目,用于 OpenShift 容器平台、OpenShift Online 和 OpenShift Dedicated。
Nomad
Nomad 是一个简单、灵活且易于使用的工作负载编排器,可以在本地和云端大规模部署和管理容器化和非容器化应用程序。 Nomad 以单个二进制文件的形式运行,资源占用少(35MB),并且支持 macOS、Windows 和 Linux 操作系统。
开发者使用声明式的基础设施即代码(IaC)来部署应用程序,并定义应用程序应该如何部署。Nomad 能够自动从故障中恢复应用程序。
图片来自 Nomad
Nomad 可以编排任何类型的应用程序(不仅仅是容器),为 Docker、Windows、Java、虚拟机等提供一流的支持。
特性:
- 简单可靠
- 在不重写的情况下实现遗留应用程序的现代化
- 轻松实现大规模联邦
- 经验证的可扩展性
- 轻松实现多云
- 与 Terraform、Consul 和 Vault 的原生集成
Docker Swarm
Docker Swarm 使用声明式模型。 您可以定义服务的期望状态,Docker 将会维护该状态。Docker 企业版已经集成了 Kubernetes 和 Swarm。Docker 现在在编排引擎的选择上提供了灵活性。Docker 引擎 CLI 用于创建一组 Docker 引擎,这些引擎可以部署应用程序服务。
图片来自 Docker
Docker 命令用于与集群交互。 加入集群的机器被称为节点,Swarm 管理器处理集群的活动。
Docker Swarm 由两个主要组件组成:
- 管理者(Manager)—— 管理者节点将任务分配给集群中的工作节点。 领导者是基于 Raft 共识算法选出的。 领导者负责处理集群的所有管理和任务编排决策。
- 工作节点(Worker)—— 工作节点从管理节点接收任务并执行。
特性:
- 与 Docker 引擎集成的集群管理
- 去中心化设计
- 声明式服务模型
- 扩展性
- 期望状态和调和
- 多主机网络
- 服务发现
- 负载均衡
- 默认安全
- 滚动更新
Docker Compose
Docker Compose 用于定义和运行协同工作的多容器应用程序。 Docker Compose 描述了相互连接的服务组,这些服务共享软件依赖关系,并且能够一起编排和扩展。
您可以使用 YAML 文件 (dockerfile) 来配置应用程序的服务。 然后,使用 docker-compose up 命令,可以从配置中创建并启动所有服务。
一个简单的 docker-compose.yml 文件可能如下所示:
version: '3' volumes: app_data: services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:6.8.0 ports: - 9200:9200 - 9300:9300 volumes: - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 - ./docker-data-volumes/elasticsearch:/usr/share/elasticsearch/data kibana: depends_on: - elasticsearch image: docker.elastic.co/kibana/kibana:6.8.0 ports: - 5601:5601 volumes: - ./kibana.yml:/usr/share/kibana/config/kibana.yml app: depends_on: - elasticsearch image: asadali08527/app:latest ports: - 8080:8080 volumes: - app_data:/var/lib/app/
您可以使用 Docker Compose 将应用程序代码分解为多个独立运行的服务,这些服务使用内部网络进行通信。 该工具提供了用于管理应用程序整个生命周期的命令行接口(CLI)。 Docker Compose 传统上专注于开发和测试工作流程,但现在他们也专注于更多面向生产的功能。
Docker 引擎可以是一个使用 Docker Machine 配置的独立实例,也可以是一个完整的 Docker Swarm 集群。
特性:
- 单个主机上的多个隔离环境
- 创建容器时保留卷数据
- 仅重新创建已更改的容器
- 变量和在环境之间移动组合
Minikube
Minikube 允许用户在本地运行 Kubernetes。 使用 Minikube,您可以在个人计算机上的单节点 Kubernetes 集群中进行本地应用程序测试。 Minikube 集成了对 Kubernetes 仪表板的支持。
Minikube 运行 Kubernetes 的最新稳定版本,并支持以下功能:
- 负载均衡
- 多集群
- 持久卷
- 节点端口
- ConfigMap 和 Secret
- 容器运行时:Docker、CRI-O 和 containerd
- 启用 CNI(容器网络接口)
Marathon
Marathon 适用于能够编排应用程序和框架的 Apache Mesos。
Apache Mesos 是一个开源集群管理器。Mesos 是 Apache 的一个项目,它能够同时运行容器化和非容器化工作负载。Mesos 集群中的主要组件包括 Mesos 代理节点、Mesos 主节点、ZooKeeper 以及框架。框架与主节点协调,以将任务调度到代理节点上。用户与 Marathon 框架交互以安排作业。
Marathon 调度器使用 ZooKeeper 来定位当前的主节点,以便提交任务。Marathon 调度器和 Mesos 主节点运行辅助主节点,以确保高可用性。客户端使用 REST API 与 Marathon 进行交互。
特性:
- 高可用性
- 有状态的应用
- 漂亮且强大的用户界面
- 约束
- 服务发现和负载均衡
- 健康检查
- 事件订阅
- 指标
- REST API
Cloudify
Cloudify 是一个开源云编排工具,用于容器和微服务的部署自动化和生命周期管理。它提供了基础架构级别的按需集群、自动修复和扩展等功能。Cloudify 可以管理容器基础设施,并编排在容器平台上运行的服务。
它可以轻松地与 Docker 和基于 Docker 的容器管理器集成,包括:
- Docker
- Docker Swarm
- Docker Compose
- Kubernetes
- Apache Mesos
Cloudify 可以帮助创建、修复、扩展和拆除容器集群。容器编排对于提供容器管理器在其上运行的可扩展且高度可用的基础架构至关重要。Cloudify 提供了跨平台编排异构服务的能力。您可以使用 CLI 和 Cloudify Manager 部署应用程序。
Rancher
Rancher 是一个使用容器编排的开源平台。它允许您利用 Kubernetes、Swarm、Mesos 等编排服务。Rancher 提供了管理容器所需的软件,因此组织无需使用一组独特的开源技术从头开始构建容器服务平台。
Rancher 2.x 允许管理在客户指定的提供商上运行的 Kubernetes 集群。
Rancher 的入门分为两个步骤:
准备 Linux 主机
准备一个具有 64 位 Ubuntu 16.04 或 18.04(或其他受支持的 Linux 发行版,以及至少 4GB 内存)的 Linux 主机。在主机上安装受支持的 Docker 版本。
启动服务器
要安装和运行 Rancher,请在您的主机上执行以下 Docker 命令:
$ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
Rancher 用户界面允许管理数千个 Kubernetes 集群和节点。
Containership
Containership 用于支持多云 Kubernetes 基础设施的部署和管理。它可以通过一个工具在公共云、私有云和本地环境中灵活操作。它可以跨所有主要云提供商配置、管理和监控您的 Kubernetes 集群。
Containership 是使用云原生工具构建的,例如用于配置的 Terraform、用于监控的 Prometheus 以及用于网络和策略管理的 Calico。它建立在原生的 Kubernetes 之上。 Containership 平台提供直观的仪表板,以及用于复杂自动化的强大 REST API。
特性:
- 多云仪表板
- 审计日志
- GPU 实例支持
- 无中断升级
- 可调度的主节点
- 综合指标
- 实时日志
- 零停机部署
- 持久存储支持
- 私有注册支持
- 工作负载自动缩放
- SSH 密钥管理
AZK
AZK 是一个通过清单文件(Azkfile.js)用于开发环境的开源编排工具。它帮助开发者安装、配置和运行常用工具,以使用不同的开源技术开发 Web 应用程序。
AZK 使用容器而不是虚拟机。容器与虚拟机类似,但性能更高,并且物理资源消耗更低。
Azkfile.js 文件可以重复使用,以添加新组件或从头开始创建新组件。它可以共享,这确保了不同程序员机器上的开发环境完全一致,并减少了部署过程中出现错误的可能性。
GKE
GKE 为 Google Cloud Platform 上的容器应用编排提供完全托管的解决方案。 GKE 集群由 Kubernetes 提供支持。您可以使用 Kubernetes CLI 与集群交互。Kubernetes 命令可以用来部署和管理应用程序、执行管理任务、设置策略以及监控已部署工作负载的运行状况。
图片来自 GCP
Google Cloud 的高级管理功能也可用于 GKE 集群,例如 Google Cloud 的负载均衡、节点池、节点的自动缩放、自动升级、节点自动修复、日志记录以及使用 Google Cloud 的操作套件进行监控。
Google Cloud 提供 CI/CD 工具来帮助您构建和交付应用程序容器。您可以使用 Cloud Build 从各种源代码存储库构建容器镜像(例如 Docker),并使用 Container Registry 来存储您的容器镜像。
GKE 是一种企业级解决方案,具有预构建的部署模板。
有兴趣学习 GKE? 请查看这个 初级课程.
AKS
AKS 是 Azure 提供的完全托管的 Kubernetes 服务,它提供无服务器 Kubernetes、安全性和治理。AKS 管理您的 Kubernetes 集群,并允许您轻松部署容器化的应用程序。AKS 会自动配置所有 Kubernetes 主节点和节点。您只需管理和维护代理节点。
图片来自 Azure
AKS 是免费的,您只需为集群中的代理节点付费,而无需为主节点付费。可以在 Azure 门户中或以编程方式创建 AKS 集群。 Azure 还支持其他功能,例如高级网络、Azure Active Directory 集成以及使用 Azure Monitor 进行监控。
AKS 还支持 Windows Server 容器。 您可以从 Azure Monitor 监控其集群和已部署应用程序的性能。 日志存储在 Azure Log Analytics 工作区中。
AKS 已被认证为符合 Kubernetes 标准。
AWS EKS
AWS EKS 是一种完全托管的 Kubernetes 服务。AWS 允许您使用 AWS Fargate 运行 EKS 集群,这是一种用于容器的无服务器计算。Fargate 消除了配置和管理服务器的需要,并允许为每个应用程序按资源付费。
AWS 允许将其他功能与 EKS 一起使用,例如 Amazon CloudWatch、Amazon Virtual Private Cloud (VPC)、AWS Identity、Auto Scaling Groups 和 Access Management (IAM) 来监控、扩展和负载均衡应用程序。 EKS 与 AWS App Mesh 集成,提供 Kubernetes 原生体验。 EKS 运行最新的 Kubernetes,并且经过认证符合 Kubernetes 标准。
结论
最后,希望以上列表能让您对各种容器编排工具有一个全面的了解,现在根据您的具体用例,选择最佳的工具应该会更加容易。
接下来,我们来探讨一下 Kubernetes 管理软件。