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