Swarm 模式关键概念

本主题介绍了集群管理和 Docker Engine 1.12 的编排功能。

什么是 swarm?

Docker Engine 中嵌入的集群管理和编排功能 是使用 SwarmKit 构建的。Swarmkit 是一个 单独的项目,该项目实现了 Docker 的编排层,并使用 直接在 Docker 中。

一个 Swarm 由多个 Docker 主机组成,这些主机在 Swarm 模式下运行并充当 managers,用于管理成员资格和委托,以及 worker,用于运行 swarm 服务。给定的 Docker 主机可以 是经理、工作人员或同时扮演这两个角色。创建服务时,您需要 定义其最佳状态 - 副本数、网络和存储资源 可用、端口服务向外部世界公开等。 Docker 致力于保持这种期望的状态。例如,如果 worker 节点 变得不可用,Docker 会将该节点的任务调度到其他节点上。任务 是一个正在运行的容器,它是 Swarm 服务的一部分,由 swarm 管理器,而不是独立的容器。

与独立容器相比,Swarm 服务的主要优势之一是 您可以修改服务的配置,包括它的 networks 和 volumes 已连接,而无需手动重新启动服务。Docker 将 更新配置,停止过期的服务任务 configuration,并创建与所需配置匹配的新配置。

当 Docker 在 Swarm 模式下运行时,您仍然可以运行独立容器 在参与 swarm 的任何 Docker 主机上,以及 swarm 服务业。独立容器和 Swarm 服务之间的一个关键区别是 只有 Swarm 管理器才能管理 Swarm,而独立容器可以 在任何守护进程上启动。Docker 守护进程可以作为管理器参与 swarm, worker 的 Worker 和/或 Worker 的 Worker 的 T

与使用 Docker Compose 定义和运行 容器中,您可以定义和运行 Swarm 服务堆栈。

继续阅读有关 Docker swarm 服务相关概念的详细信息, 包括节点、服务、任务和负载均衡。

节点

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

要将应用程序部署到 swarm,您需要将服务定义提交到 Manager 节点。Manager 节点将称为 tasks 的工作单元分派给 worker 节点。

Manager 节点还执行编排和集群管理功能 需要保持召集的所需状态。Manager 节点选择一个 单个领导者来执行编排任务。

Worker 节点接收和执行从 Manager 节点分派的任务。 默认情况下,管理器节点也作为 Worker 节点运行服务,但您可以 将它们配置为专门运行 Manager 任务,并且仅限 Manager 节点。代理在每个 worker 节点上运行,并报告分配给 它。worker 节点将其当前状态通知 manager 节点 分配任务,以便经理可以保持每个任务的所需状态 工人。

服务和任务

服务是要在 Manager 或 Worker 节点上执行的任务的定义。它 是 Swarm 系统的中心结构,也是 user 的主根 与 Swarm 的交互。

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

在复制的服务模型中,swarm 管理器将特定的 节点中的副本任务数,具体取决于您在 desired 状态。

对于全局服务,Swarm 在每个 可用节点。

任务携带一个 Docker 容器和要在 容器。它是 swarm 的原子调度单元。Manager 节点分配任务 添加到 worker 节点。 将任务分配给节点后,该任务将无法移动到另一个节点。它只能 在分配的节点上运行或失败。

负载均衡

Swarm Manager 使用入口负载均衡来公开 希望对 Swarm 外部可用。swarm 管理器可以 自动为服务分配一个已发布的端口,或者您可以配置 已发布的服务端口。您可以指定任何未使用的端口。如果你没有 指定一个端口,Swarm Manager 会给服务分配一个 30000-32767 中的端口 范围。

外部组件(例如 Cloud Load Balancer)可以在 集群中任何节点的已发布端口,无论该节点当前是否为 运行服务的任务。Swarm 路由入口中的所有节点 与正在运行的任务实例的连接。

Swarm 模式有一个内部 DNS 组件,可自动分配每个服务 在 swarm 中,有一个 DNS 条目。Swarm Manager 使用内部负载均衡来 根据 DNS 名称在集群内的服务之间分配请求 服务。

下一步是什么?