管理swarm(2) – swarm模式关键概念

本文介绍Docker Engine 1.12的集群管理和编排功能唯一的一些概念。

Swarm

使用Swarmkit嵌入Docker Engine中的集群管理和编排功能。Docker Engine参与到集群时是运行在swarm模式下。你可以通过初始化一个swarm或加入一个已存在的swarm来激活Docker Engine进入swarm模式。
一个swarm是用来部署服务的Docker Engine集群。Docker Engine CLI包括了管理swarm的命令,例如增加和删除节点。CLI也包括你部署服务到swarm和管理服务编排的命令。
当你在swarm模式外运行Docker Engine,你执行的是容器命令。当你以swarm模式运行Engine,你执行的是编排服务的命令。

节点

一个节点是Docker Engine参与到swarm中的一个实例。
为了部署你的应用到swarm,你需要提交一个服务定义到管理器节点。管理器节点将称为任务的工作单元分派给worker节点。
管理器节点也完成编排和集群管理功能以维护swarm的期望状态。管理器节点选择单个领导节点来执行编排任务。
Worker节点接收和执行来自管理器节点分派的任务。默认下管理器节点也是worker节点,不过你可以配置管理器节点为只管理节点。
agent将其分配的任务的当前状态通知给管理器节点,使得管理器能够维护期望的状态。

服务和任务

一个服务是在worker节点执行任务的定义。它是swarm系统的中心结构和用户与swarm交互的主要根源。
创建服务时,你可以指定要使用的容器映像以及在运行容器中执行的命令。在复制服务模型中,swarm管理器根据你在期望状态中设置的比例在节点之间分发特定数量的副本任务。对于全局服务,swarm在集群中每个可用节点上为该服务运行一个任务。一个任务携带一个Docker容器和在容器内运行的命令。它是swarm的原子调度单位。管理器节点根据服务规模中设置的副本数量将任务分配给worker节点。一旦一个任务分配给一个节点,它就不能移动到其它节点了。它只能在分配的节点上运行。

负载均衡

swarm管理器在入口使用负载均衡来连接你的服务。swarm管理器可以自动为服务分配一个PublishedPort或者你为服务配置一个PublishedPort。你可以指定任意可用的端口。如果你不指定,swarm管理器会在30000-32767范围为你的服务分配一个端口。外部组件(如云负载均衡器)可以访问集群中任何节点的PublishedPort上的服务,无论该节点当前是否正在运行任务。Swarm模式有一个内部DNS组件,它自动为每个服务分配一个DNS名称。swarm管理器使用内部负载均衡器,根据服务的DNS名称在集群内的服务之间分配请求。