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