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