Swarm 模式关键概念

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

什么是 Swarm?

内置于 Docker Engine 中的集群管理和编排功能是使用 swarmkit 构建的。Swarmkit 是一个独立的开源项目,它实现了 Docker 的编排层并直接在 Docker 内部使用。

Swarm 由多个以 Swarm 模式运行的 Docker 主机组成,这些主机充当管理者(用于管理成员资格和委托)和工作者(用于运行 Swarm 服务)。一个给定的 Docker 主机可以是管理者、工作者,或同时扮演这两种角色。创建服务时,您定义其理想状态——副本数、可用的网络和存储资源、服务向外部暴露的端口等。Docker 会努力维持该理想状态。例如,如果某个工作者节点不可用,Docker 会将该节点的任务调度到其他节点上。任务是 Swarm 服务的一部分的运行中容器,由 Swarm 管理者管理,与独立容器不同。

Swarm 服务相对于独立容器的一个主要优势在于,您可以修改服务的配置(包括其连接的网络和数据卷),而无需手动重启服务。Docker 将更新配置,停止使用过时配置的服务任务,并创建符合理想配置的新任务。

当 Docker 运行在 Swarm 模式下时,您仍然可以在参与集群的任何 Docker 主机上运行独立容器以及 Swarm 服务。独立容器与 Swarm 服务之间的一个关键区别是,只有 Swarm 管理者才能管理集群,而独立容器可以在任何守护进程上启动。Docker 守护进程可以作为管理者、工作者或两者兼而有之的方式参与集群。

就像使用 Docker Compose 定义和运行容器一样,您可以定义和运行 Swarm 服务 Stack。

请继续阅读,了解与 Docker Swarm 服务相关的概念详情,包括节点、服务、任务和负载均衡。

节点

节点是参与集群的 Docker Engine 实例。您也可以将其视为一个 Docker 节点。可以在单个物理计算机或云服务器上运行一个或多个节点,但生产环境下的 Swarm 部署通常包含分布在多个物理机和云机器上的 Docker 节点。

要将您的应用程序部署到集群,您需要向管理者节点提交服务定义。管理者节点会将称为任务的工作单元分派给工作者节点。

管理者节点还执行维护集群所需状态的编排和集群管理功能。管理者节点会选择一个领导者来执行编排任务。

工作者节点接收并执行从管理者节点分派的任务。默认情况下,管理者节点也作为工作者节点运行服务,但您可以将它们配置为仅运行管理者任务,成为纯管理者节点。每个工作者节点上都运行一个代理(agent),负责报告分配给它的任务状态。工作者节点会将其分配的任务的当前状态通知管理者节点,以便管理者能够维持每个工作者的理想状态。

服务和任务

服务是在管理者或工作者节点上执行的任务的定义。它是 Swarm 系统的核心结构,也是用户与集群交互的主要入口。

创建服务时,您需要指定要使用的容器镜像以及要在运行中容器内部执行的命令。

在复制服务模式下,Swarm 管理者会根据您在理想状态中设置的规模,在节点之间分发指定数量的副本任务。

对于全局服务,集群会在所有可用节点上为该服务运行一个任务。

任务包含一个 Docker 容器以及要在容器内部运行的命令。它是 Swarm 的原子调度单元。管理者节点根据服务规模中设置的副本数将任务分配给工作者节点。任务一旦分配给节点,就不能移动到其他节点。它只能在分配的节点上运行或失败。

负载均衡

Swarm 管理者使用入口负载均衡来暴露您希望对 Swarm 外部可用的服务。Swarm 管理者可以自动为服务分配一个已发布端口,或者您可以为服务配置一个已发布端口。您可以指定任何未使用的端口。如果您未指定端口,Swarm 管理者会为服务分配一个介于 30000-32767 范围内的端口。

外部组件,如云负载均衡器,可以通过集群中任何节点的已发布端口访问服务,无论该节点当前是否正在运行该服务的任务。集群中的所有节点都会将入口连接路由到运行中的任务实例。

Swarm 模式具有一个内部 DNS 组件,它会自动为集群中的每个服务分配一个 DNS 条目。Swarm 管理者使用内部负载均衡,根据服务的 DNS 名称在集群内部服务之间分发请求。

接下来做什么?

页面选项