Swarm 模式关键概念
本主题介绍 Docker Engine 1.12 的集群管理和编排功能独有的一些概念。
什么是 swarm?
Docker Engine 中嵌入的集群管理和编排功能是使用 swarmkit 构建的。Swarmkit 是一个独立的项目,它实现了 Docker 的编排层,并直接在 Docker 内部使用。
一个 swarm 由多个在 Swarm 模式下运行的 Docker 主机组成,这些主机扮演着管理成员关系和委派的管理节点 (manager),以及运行swarm 服务的工作节点 (worker)。一个给定的 Docker 主机可以是一个管理节点、一个工作节点,或者同时扮演两种角色。当您创建一个服务时,您需要定义其最佳状态——副本数量、可用的网络和存储资源、服务向外部世界暴露的端口等等。Docker 致力于维护该期望状态。例如,如果一个工作节点变得不可用,Docker 会将该节点的任务调度到其他节点上。任务是一个运行中的容器,它是一个 swarm 服务的一部分,并由 swarm 管理器管理,而不是一个独立的容器。
swarm 服务相对于独立容器的一个关键优势是,您可以修改服务的配置,包括其连接的网络和卷,而无需手动重启服务。Docker 将更新配置,停止配置过时的服务任务,并创建符合期望配置的新任务。
当 Docker 在 Swarm 模式下运行时,您仍然可以在参与 swarm 的任何 Docker 主机上运行独立容器以及 swarm 服务。独立容器和 swarm 服务之间的一个关键区别是,只有 swarm 管理器可以管理 swarm,而独立容器可以在任何守护进程上启动。Docker 守护进程可以作为管理节点、工作节点或两者兼具的角色参与 swarm。
就像您可以使用 Docker Compose 来定义和运行容器一样,您也可以定义和运行 Swarm 服务栈。
请继续阅读,了解有关 Docker swarm 服务的概念详情,包括节点、服务、任务和负载均衡。
节点
一个节点是参与 swarm 的 Docker 引擎实例。您也可以将其视为一个 Docker 节点。您可以在一台物理计算机或云服务器上运行一个或多个节点,但生产环境中的 swarm 部署通常包含分布在多个物理机和云机器上的 Docker 节点。
要将您的应用程序部署到 swarm 中,您需要向一个管理节点提交服务定义。管理节点将称为任务的工作单元分派给工作节点。
管理节点还执行维护 swarm 期望状态所需的编排和集群管理功能。管理节点会选举一个唯一的领导者 (leader) 来执行编排任务。
工作节点接收并执行从管理节点分派的任务。默认情况下,管理节点也作为工作节点运行服务,但您可以将它们配置为只运行管理任务,成为纯管理节点。每个工作节点上都运行着一个代理 (agent),用于报告分配给它的任务。工作节点会通知管理节点其分配任务的当前状态,以便管理节点可以维护每个工作节点的期望状态。
服务和任务
服务是在管理节点或工作节点上执行任务的定义。它是 swarm 系统的核心结构,也是用户与 swarm 交互的主要根源。
当您创建一个服务时,您需要指定使用哪个容器镜像以及在运行的容器内执行哪些命令。
在副本服务模型 (replicated services model) 中,swarm 管理器会根据您在期望状态中设置的规模,在节点之间分发特定数量的副本任务。
对于全局服务 (global services),swarm 会在集群中每个可用节点上为该服务运行一个任务。
任务 (task) 承载一个 Docker 容器以及在容器内运行的命令。它是 swarm 的原子调度单元。管理节点根据服务规模中设置的副本数量将任务分配给工作节点。一旦一个任务被分配给一个节点,它就不能移动到另一个节点。它只能在被分配的节点上运行或失败。
负载均衡
swarm 管理器使用入口负载均衡 (ingress load balancing) 来向 swarm 外部暴露您希望提供的服务。swarm 管理器可以自动为服务分配一个已发布端口 (published port),或者您可以为服务配置一个已发布端口。您可以指定任何未使用的端口。如果您没有指定端口,swarm 管理器会为服务分配一个 30000-32767 范围内的端口。
外部组件,如云负载均衡器,可以在集群中任何节点的已发布端口上访问该服务,无论该节点当前是否正在运行该服务的任务。swarm 中的所有节点都会将入口连接路由到一个正在运行的任务实例。
Swarm 模式有一个内部 DNS 组件,它会自动为 swarm 中的每个服务分配一个 DNS 条目。swarm 管理器使用内部负载均衡 (internal load balancing) 来根据服务的 DNS 名称在集群内的服务之间分发请求。
下一步是什么?
- 阅读 Swarm 模式概述。
- 开始学习 Swarm 模式教程。