Swarm模式关键概念

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

什么是群集?

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

一个集群由多个运行在Swarm模式下的Docker主机组成,这些主机作为管理者来管理成员资格和委派,以及作为工作者来运行集群服务。一个给定的Docker主机可以是管理者、工作者,或者同时执行这两个角色。当你创建一个服务时,你定义了它的最佳状态——副本数量、可用的网络和存储资源、服务向外部世界暴露的端口等。Docker致力于维持这种期望的状态。例如,如果一个工作者节点变得不可用,Docker会在其他节点上调度该节点的任务。任务是一个运行中的容器,它是集群服务的一部分,并由集群管理器管理,而不是一个独立的容器。

与独立容器相比,群服务的一个关键优势是您可以修改服务的配置,包括其连接的网络和卷,而无需手动重新启动服务。Docker 将更新配置,停止具有过时配置的服务任务,并创建符合所需配置的新任务。

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

就像你可以使用 Docker Compose 来定义和运行 容器一样,你也可以定义和运行 Swarm 服务 堆栈。

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

节点

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

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

管理节点还执行编排和集群管理功能,以维持群集的期望状态。管理节点选择一个单一的领导来执行编排任务。

工作节点接收并执行从管理节点分派的任务。默认情况下,管理节点也作为工作节点运行服务,但你可以配置它们仅运行管理任务,成为仅管理节点。每个工作节点上运行一个代理,并报告分配给它的任务。工作节点通知管理节点其分配任务的当前状态,以便管理节点可以维护每个工作节点的期望状态。

服务和任务

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

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

在复制服务模型中,swarm管理器根据您在期望状态中设置的比例在节点之间分配特定数量的副本任务。

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

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

负载均衡

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

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

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

接下来是什么?