14个用于DevOps的容器编排工具
让我们来谈谈市场上一些热门的容器编排工具。
什么是容器编排?
像Docker这样的容器平台在当今非常流行,用于基于微服务架构的应用程序打包。容器可以高度可扩展,并可以按需创建。虽然对于少量容器来说这是很好的,但是想象一下如果你有数百个容器。
当数量随需求动态增加时,管理容器的生命周期和管理变得非常困难。
容器编排通过自动化容器的调度、部署、扩展性、负载平衡、可用性和网络等来解决这个问题。容器编排是容器和服务的生命周期的自动化和管理。
这是一种在规模上管理和组织多个容器和微服务架构的过程。
幸运的是,市场上有许多容器编排工具可供选择。
让我们来探索一下它们吧!
Kubernetes
你猜对了,不是吗?
Kubernetes是一个开源平台,最初由谷歌设计,现在由Cloud Native Computing Foundation维护。Kubernetes支持声明性配置和自动化。它可以帮助自动化容器化工作负载和服务的部署、扩展和管理。
Kubernetes API帮助用户、集群组件和外部第三方组件建立通信。Kubernetes控制平面和节点运行在一组节点上,共同形成集群。应用工作负载由一个或多个Pod组成,运行在工作节点上。控制平面管理Pod和工作节点。
像Babylon、Booking.com、AppDirect这样的公司广泛使用Kubernetes。
特性
- 服务发现和负载均衡
- 存储编排
- 自动化部署和回滚
- 水平扩展
- 密钥和配置管理
- 自愈
- 批量执行
- IPv4/IPv6双栈
- 自动装箱
想学习Kubernetes吗?查看这些learning resources。
OpenShift
Redhat提供OpenShift作为Platform as a Service(PaaS)。它有助于在混合云环境中自动化应用程序的构建、部署和管理,提供安全、可扩展的资源。它为构建、部署和管理容器化应用程序提供了企业级平台。
它构建在Redhat企业Linux和Kubernetes引擎上。Openshift具有各种功能,可以通过UI和CLI来管理集群。Redhat以另外两个变体提供Openshift,
- Openshift Online – 以软件即服务(SaaS)的形式提供
- OpenShift Dedicated – 以托管服务的形式提供
Openshift Origin(Origin Community Distribution)是一个开源的上游社区项目,用于OpenShift Container Platform、Openshift Online和OpenShift Dedicated。
Nomad
Nomad是一个简单、灵活、易于使用的工作负载编排器,可在本地和云上扩展部署和管理容器化和非容器化应用程序。Nomad作为一个单一的二进制文件运行,资源占用很小(35MB),支持macOS、Windows和Linux。
开发人员使用声明性基础设施即代码(IaC)来部署他们的应用程序,并定义应用程序的部署方式。Nomad可以自动从故障中恢复应用程序。
Nomad Orchestrate可以应用于任何类型的应用程序(不仅限于容器)。它为Docker、Windows、Java、VM等提供一流的支持。
特点
- 简单可靠
- 无需重写即可现代化传统应用程序
- 轻松扩展规模
- 经过验证的可伸缩性
- 轻松实现多云
- 与Terraform、Consul和Vault的本地集成
Docker Swarm
Docker Swarm 使用声明性模型。您可以定义服务的期望状态,Docker将维护该状态。Docker企业版已将Kubernetes与Swarm集成。Docker现在提供了选择编排引擎的灵活性。使用Docker引擎CLI创建一组Docker引擎,可以在其中部署应用程序服务。
Docker commands 用于与集群进行交互。加入集群的机器称为节点,Swarm管理器处理集群的活动。
Docker Swarm 由两个主要组件组成:
- 管理器 – 管理器节点将任务分配给Swarm中的工作节点。基于Raft共识算法选择领导者。领导者处理Swarm的所有管理和任务编排决策。
- 工作节点 – 工作节点接收来自管理器节点的任务并执行。
特点
- 与Docker Engine集成的集群管理
- 去中心化设计
- 声明性服务模型
- 扩展
- 期望状态协调
- 多主机网络
- 服务发现
- 负载均衡
- 默认安全
- 滚动更新
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 Engine可以是使用Docker Machine提供的独立实例,也可以是整个Docker Swarm集群。
特点
- 在单个主机上的多个隔离环境
- 在创建容器时保留卷数据
- 仅重建已更改的容器
- 变量和在环境之间移动组合
MiniKube
Minikube允许用户在本地运行Kubernetes。借助Minikube,您可以在个人计算机上的单节点Kubernetes集群中本地测试应用程序。Minikube集成了对Kubernetes Dashboard的支持。
Minikube运行最新的稳定版Kubernetes,并支持以下功能:
- 负载均衡
- 多集群
- 持久卷
- NodePorts
- ConfigMaps和Secrets
- 容器运行时:Docker、CRI-O和containered
- 启用CNI(容器网络接口)
Marathon
Marathon是用于Apache Mesos的框架,具有编排应用程序和框架的能力。
Apache Mesos是一个开源的集群管理器。Mesos是Apache的一个项目,可以运行容器化和非容器化的工作负载。Mesos集群的主要组件包括Mesos Agent节点、Mesos Master、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是一个使用容器编排(称为cattle)的开源平台。它允许您利用诸如Kubernetes、Swarm、Mesos之类的编排服务。Rancher提供了所需的软件来管理容器,这样组织就不需要使用一组不同的开源技术从头构建容器服务平台。
Rancher 2.x允许管理运行在用户指定提供商上的Kubernetes集群。
开始使用Rancher是一个两步过程。
准备Linux主机
准备一个64位Ubuntu 16.04或18.04(或另一个受支持的Linux发行版)的Linux主机,并拥有至少4GB内存。在主机上安装支持的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是一个用于通过manifest文件(Azkfile.js)管理开发环境的开源编排工具,它帮助开发人员安装、配置和运行常用的用于开发使用不同开源技术的Web应用程序的工具。
AZK使用容器而不是虚拟机。容器类似于虚拟机,具有更好的性能和更低的物理资源消耗。
Azkfile.js文件可以重复使用以添加新组件或从头开始创建新组件。它可以共享,以确保不同程序员机器上的开发环境完全一致,并减少部署中出现错误的机会。
GKE
GKE在Google Cloud Platform上为容器应用编排提供了一个完全托管的解决方案。GKE集群由Kubernetes提供支持。您可以使用Kubernetes CLI与集群进行交互。可以使用Kubernetes命令来部署和管理应用程序,执行管理任务,设置策略,并监视已部署工作负载的健康状况。
Google Cloud还提供了与GKE集群一起使用的高级管理功能,如Google Cloud的负载平衡、节点池、节点自动扩展、自动升级、节点自动修复、日志记录以及使用Google Cloud的运营套件进行监控。
Google Cloud提供了CI/CD工具,帮助您构建和提供应用程序容器。您可以使用Cloud Build从各种源代码存储库构建容器映像(如Docker),并使用容器注册表存储容器映像。
GKE是一个企业级的解决方案,具有预建的部署模板。
想要学习GKE吗?请查看这个beginner course。
AKS
AKS是Azure提供的一个完全托管的Kubernetes服务,提供无服务器Kubernetes、安全性和治理。AKS管理您的Kubernetes集群,并允许您轻松部署容器化应用程序。AKS自动配置所有Kubernetes主节点和节点。您只需要管理和维护代理节点。
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 Fragrate运行您的EKS集群,它是一个容器的serverless compute。Fragrance消除了预留和管理服务器的需求,允许按资源和应用程序付费。
AWS允许在EKS上使用额外的功能,如Amazon CloudWatch,Amazon Virtual Private Cloud(VPC),AWS身份,自动扩展组和访问管理(IAM),监视,扩展和负载均衡应用程序。EKS与AWS App Mesh集成,并提供Kubernetes本地体验。EKS运行最新的Kubernetes,经过认证的Kubernetes符合性。
结论
最后,希望上述列表能够对各种容器编排工具有一个公正的理解,现在根据使用情况选择最佳工具将更容易。