互联网技术

Docker 集群节点运行原理解析

2023年12月24日 · admin
openmagic ad

从 Docker Engine 1.12 开始,系统内置了 Swarm 模式,可用于将一个或多个 Docker Engine 组织成一个集群,也就是 swarm。这个集群由若干节点构成,这些节点可以是物理机,也可以是虚拟机,并且需要运行 Docker Engine 1.12 或更高版本。

在 Swarm 集群中,节点主要分为两类:管理节点和工作节点。

云计算核心技术Docker教程:Docker集群节点如何工作

管理节点

管理节点负责整个集群的控制与协调,主要承担以下任务:

  • 维护集群整体状态
  • 为服务进行调度
  • 提供 Swarm 模式的 HTTP API 接口

管理节点通过 Raft 一致性机制来维护集群内部状态的一致性,包括集群本身的信息以及其上运行的服务状态。出于测试或演示目的,可以只使用一个管理节点来搭建集群。但如果这个唯一的管理节点发生故障,虽然已有服务仍可能继续运行,集群本身却无法正常恢复管理能力,通常需要重新创建集群。

如果希望获得更好的容错能力,通常应部署多个管理节点,并且数量建议为奇数。这样在部分管理节点失效时,集群仍能保持可用,无需中断服务。

  • 3 个管理节点的集群,最多可以容忍 1 个管理节点失效。
  • 5 个管理节点的集群,最多可以同时容忍 2 个管理节点失效。
  • 对于包含 N 个管理节点的集群,最多可容忍丢失 (N-1)/2 个管理节点。
  • 通常建议管理节点数量不要超过 7 个。

工作节点

工作节点同样运行 Docker Engine,但它的职责更单一,主要用于执行容器任务。工作节点不会参与 Raft 状态同步,也不会负责调度决策,更不会对外提供 Swarm 模式的 HTTP API。

一个集群可以只有管理节点,但不能在没有管理节点的情况下只存在工作节点。默认情况下,所有管理节点同时也具备工作节点能力。因此,在只有一个管理节点的集群中,执行如 Docker service create 这类命令后,调度器通常会将任务直接安排到本地引擎上运行。

在多节点集群中,如果不希望管理节点承担业务任务,可以将管理节点的可用性设置为 DRAIN。这样调度器会逐步停止该节点上已有的任务,并将这些任务重新安排到处于 Active 状态的节点上。同时,处于 DRAIN 状态的节点也不会再接收新的任务分配。