Docker平台以及周边生态系统包含不少工具来管理容器的生命周期。例如,Docker Command Line Interface(CLI)支持下面的容器活动:node
CLI知足在单个主机上管理容器的需求,可是面对部署在多个主机上的容器时就无所适从了。为了超越单个容器管理,咱们必须转向编排工具(业务流程工具)。web
编排工具将生命周期管理能力扩展到部署在大量机器集群上部署的复杂的、多容器工做负载。数据库
经过抽象主机基础结构, 编排工具容许用户将整个集群视为单个部署目标。json
编排过程通常涉及应用管理全部方面自动化的工具,例如初始布局、调度和部署到稳态活动例如更新、部署,支持扩展和故障转移的更新和健康监控功能。这些能力已经成为用户但愿现代容器编排工具提供的核心特色中的一部分。后端
编排工具为DevOps团队提供了一个用于声明应用负载和它的标准方案配置的蓝图选项, 它们使用yaml或json格式。 这些定义还包含支持工做负载的仓库、网络(ports)、存储(volumes)和日志的信息。这种方法容许编排工具屡次应用同一配置,而且老是在目标系统上产生相同的结果。 它还容许工具在同一个应用的不一样阶段, 例如开发阶段、测试阶段和生产阶段接受不一样的配置。缓存
工做负载一般对主机放置、性能和高可用具备特殊的策略或要求。例如,在同一主机上提供主备数据库容器是无心义的;它破坏了目的性。相似的,在web服务器同一机器上放置内存缓存多是个好主意。 编排工具支持定义容易放置的亲和性和约束的机制。服务器
供应(Provisioning)或调度是处理容器在集群中的放置和启动的。这个过程包括根据配置选择合适的主机。除了容器提供API, 编排工具也涉及针对主机环境的基础设施API。网络
在由运行于多个主机上的容器组成的分布式部署, 容器发现相当重要。Web服务器须要动态发现数据库服务器,负载均衡须要发现并注册web服务器。 编排工具提供或指望有一个分布式key-value存储, 轻量级DNS或一些其余可以发现容器的机制。架构
既然编排工具知道系统的指望配置,因此它们可以惟一的监控系统容器和主机的健康状况。在主机故障的状况下,这个工具能够从新定位容器。相似的,当容器崩溃时,编排工具能够启动替换。编排工具确保部署始终处于开发人员或操做人员声明的指望状态。app
Docker Swarm的目标是使用和核心Docker引擎一块儿工做一样的Docker API。API端点的目标不是表明一个Docker引擎,Swarm透明的处理与Docker引擎池相关联的端点。这种方法的关键优点在于现有工具和API可以和对待单个实例的相同方式对待集群。Docker的工具/CLI和Compose是开发者如何建立它们应用程序的,所以,它们不得不从新编排来容纳一个编排器。
遵循Docker的"自带电源、可移动"的哲学思想,支持数个发现后端,包括静态文件和IP地址,etcd, Consul和ZooKeeper。调度策略也是可插拔的。
Docker Swarm由几个内置的调度策略组成,给予用户指导容器放置的能力, 以最大化或最小化容器在集群中的扩散。也支持随机放置。
Docker寻址遵循"自带电源,但可移动"的原则,意思就是当前只使用少许的简单调度后端搬运,可是未来经过可插拔接口它能支持额外的后端。基于给定用例的规模和复杂度,开发人员和操做人员能够选择插入恰当的替代后端。
Docker Swarm支持肯定容易在特定主机放置的约束和亲和力。
约束(Constraints)定义了须要选择用于调度的节点子集的要求。它们能够基于存储类型、地理位置、环境以及内核版本等属性。
亲和力(Affinity)定义了在主机上分配容器的需求。
为了在每一个主机上发现容器,Swarm使用了可插拔后端架构,它与一个简单的托管发现服务、静态文件、IP列表、etcd、Consul和ZooKeeper一块儿工做。
Swarm支持基本的将康监控,这样能够防止在故障主机上提供容器。
来自Google - 声称天天处理20亿容器的公司 - 的Kubernetes享有独特的声誉。
Kubernetes的架构是基于一个带有不少奴仆的主服务器。命令行工具叫作kubecfg, 链接主服务器端点API来管理和编排奴仆节点。下面是运行在Kubernetes环境里边的每一个组件的定义:
服务定义以及规则和约束是用JSON文件描述的。对于服务发现,Kubernetes提供了一个稳定的IP地址和相对于动态的pods集合的DNS名。当运行在Kubernetes pod上的容器链接到这个地址,链接被一个本地代理(叫作kube-proxy)转发到一个具体的后端容器。
Kubernetes支持用户实现的应用程序健康检查。这些检查由运行在每一个minion上的kubelet执行, 以确保应用程序正确操做。当前,Kubernetes支持三种类型的健康检查:
Apache Mesos是一个开源集群管理器,简化了在共享服务器池上运行任务的复杂度。最初设计用于支持高性能计算负载, Mesos在0.20.0发布版本添加了Docker的支持。
通常的Mesos集群由一个或多个运行mesos-master服务器和运行了mesos-slave组件的服务器组成。每一个slave注册到master来提供资源。 master和部署框架交互来给slaves委派任务。 下面是Mesos的架构:
Unlike other tools, Mesos ensures high availability of the master nodes using Apache ZooKeeper, which replicates the masters to form a quorum. A high availability deployment requires at least three master nodes. All nodes in the system, including masters and slaves, communicate with ZooKeeper to determine which master is the current leading master. The leader performs health checks on all the slaves and proactively deactivates any that fail.
When Mesos is used in conjunction with Marathon, service discovery can be enabled based on the HAProxy TCP/HTTP load balancer, along with an assistant script that uses Marathon’s REST API to regenerate a HAProxy configuration file periodically. Alternatively, Mesos-DNS, a DNS-based service discovery mechanism, has recently been released in beta.
容器编排正快速发展。从主要的基础设施公司到PAAS供应商到早起的创业公司以及无服务器计算中,每一个人都在叫嚣着在生态系统中占有一席之地。在容器编排工具上有不少贡献者,由于这些对于部署真实世界的应用程序是必不可少的,从而推进了Docker和容器的采用。 咱们视图强调一些构建配置工具的关键贡献者,但它不只仅是明显的编排工具,更重要的是,要查看构建、部署、CI/CD、Paas和编排器交互的其余工具,这是咱们在自动化和编排目录涵盖大量篇幅的。