目前市场上有很多容器编排工具可用,它们之间的能力有许多重叠的地方。通常的情况下,需要使用这些工具中的一个或多个的组合来满足业务的需求。容器管理或编排工具采用容器(包含要执行的服务)和一组约束或规则作为部署描述符,一起组成可部署的工件,然后在多台机器上找到最适合部署的基础设施。
在这里,我们将探讨市场上流行的一些容器编排解决方案。
Docker Swarm
Dcocker Swarm是Docker自带的容器编排解决方案。Swarm提供了与Docker更深层次的集成,并公开了与Docker的远程API兼容的API。它在逻辑上对一个Docker主机池分组,并将它们管理为一个大型的单Docker虚拟主机。由Docker Swarm来决定将容器部署在哪个主机之上,而不是由应用程序管理员或开发人员来决定。Docker Swarm将基于装箱和扩展算法来决定使用哪个主机。
由于Docker Swarm是基于Docker的远程API,现有的Docker用户的学习曲线与其他容器编排工具相比要少得多。然而Docker Swarm是一个相对较新的产品,它只支持Docker容器。
Docker Swarm使用管理者和节点的概念。管理者是管理和协调Docker容器执行的唯一点。节点是部署和运行Docker容器的地方。
Kubernetes
Kubernetes(K8S)来自谷歌,用GO语言编写,并在谷歌进行了大规模部署测试。类似于Swarm,Kubernetes有助于管理跨集群的容器化应用程序。它有助于自动化容器部署和容器的调度和可伸缩。它支持一些有用的箱外特性,如自动渐进滚动、版本部署和容器弹性失效。
Kubernetes体系结构具有主机、节点和POD的概念。主机和节点一起被称为Kubernetes集群。主节点负责分配和管理多个节点上的工作负载。节点只不过是一个虚拟机或物理机器。节点进一步细分为POD。节点可以承载多个POD。一个或多个容器被分组在POD内执行。PODS也有助于管理和部署协同定位服务的效率。Kubernetes还支持标签作为键值对来查询和查找容器的概念。标签是用户定义的参数,用来标记执行常见类型的工作负载的某些类型的节点,例如前端Web服务器。部署在集群上的服务将通过单个IP/DNS来访问服务。
Kubernetes对DOCKER有现成的支持,然而,Kubernetes的学习曲线将比Docker Swarm更高。
Apache Mesos
Mesos是一个开源框架,最初由加州大学伯克利分校开发并在Twitter上被大规模使用。Twitter主要使用Mesos来管理一个大型Hadoop生态系统。
Mesos与以前的解决方案略有不同。它更像一个资源管理器,依赖于其他框架来管理工作负载执行。它位于操作系统和应用程序之间,提供机器的逻辑集群。
Mesos是一个分布式系统内核,它将许多计算机逻辑地分组并虚拟化成一台大型机器。它能够将多个异构资源分组到可以部署应用程序的统一资源集群上。由于这些原因,Mesos也被作为在数据中心构建私有云的工具。
Mesos具有Master节点和Slave节点的概念。与之前的解决方案类似,Master节点负责管理集群,而Slave节点运行工作负载。它内部使用ZooKeeper进行集群协调和存储。它还支持框架的概念。这些框架负责调度和运行容器及非容器化的应用程序。Marathon、Chronos和Aurora是应用程序调度和执行的流行框架。Netflix的Fenzo是另一种开源的Mesos框架。有趣的是Kubernetes也可以被用作是一个Mesos框架。
Marathon支持Docker容器,以及非容器化的应用程序。Spring Boot可以直接配置Marathon。Marathon提供了大量的开箱即用能力,如支持应用程序依赖性、用于缩放和升级服务的应用程序分组、健康和不健康实例的启动和关闭、滚动提升、回滚失败等。
HashiCorp Nomad
Nomad来自HashiCorp,是另一个容器编排软件。Nomad是一个容器编排系统, 它抽象了低层的机器细节及其位置。与前面探讨的其他解决方案相比, 它具有更简单的体系结构,它也是轻量级的。与其他容器业务流程解决方案类似, 它将负责资源分配和应用程序的执行。Nomad还接受特定于用户的约束, 并基于该限制分配资源。
Nomad有服务器的概念, 所有的作业都被管理。一个服务器将作为领导者, 其他人将充当追随者。它有任务的概念, 这是最小的工作单位。任务被分组到任务组中。任务组将具有要在同一位置执行的任务。一个或多个任务组或任务作为作业进行管理。
Nomad支持许多工作负载,包括Docker。Nomad还支持跨数据中心部署,并且是区域数据中心感知的。
CoreOS Fleet
Fleet是来自CoreOS的容器编排系统。Feet运行在较低的水平并工作在系统的顶部。它可以管理应用程序依存关系, 并确保所有必需的服务都在群集中的某处运行。如果服务失败, 它将重新启动另一个主机上的服务。在分配资源时可以提供亲和性和约束规则。
Fleet有引擎和代理的概念。在群集中的任何一点上, 都只有一个引擎,但具有多个代理。任务被提交到引擎, 代理在群集计算机上运行这些任务。Fleet也支持Docker。
除了这些之外, 亚马逊 EC2 容器服务 (ECS)、Azure 容器服务 (ACS)、Cloud Foundry Diego和 Google 容器引擎都提供了容器编排功能,包含在它们各自的云平台产品中。