集群模式关键概念

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

什么是 Swarm?

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

Swarm 由多个以 Swarm 模式运行的 Docker 主机组成,这些主机充当管理器,负责管理成员资格和委托,以及运行 Swarm 服务 的工作节点。给定的 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 所需状态所需的编排和集群管理功能。管理器节点选择一个领导者来执行编排任务。

工作节点接收并执行从管理器节点分派的的任务。默认情况下,管理器节点还作为工作节点运行服务,但您可以将它们配置为仅运行管理器任务,并且仅为管理器节点。代理在每个工作节点上运行,并报告分配给它的任务。工作节点会将分配任务的当前状态通知管理器节点,以便管理器可以维护每个工作节点的所需状态。

服务和任务

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

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

在复制服务模型中,Swarm 管理器会根据您在所需状态中设置的规模,在节点之间分配特定数量的副本任务。

对于全局服务,Swarm 会在集群中的每个可用节点上为服务运行一个任务。

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

负载均衡

Swarm 管理器使用入口负载均衡来公开您希望向 Swarm 外部公开的服务。Swarm 管理器可以自动为服务分配已发布的端口,或者您可以为服务配置已发布的端口。您可以指定任何未使用的端口。如果您未指定端口,则 Swarm 管理器会在 30000-32767 范围内为服务分配端口。

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

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

下一步是什么?