Docker Swarm 节点管理

Docker Swarm节点操作

列出节点

从manager节点中运行docker node ls查看节点列表

1
2
3
4
5
6
7
8
docker node ls

ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
46aqrk4e473hjbt745z53cr3t node-5 Ready Active Reachable
61pi3d91s0w3b90ijw3deeb2q node-4 Ready Active Reachable
a5b2m3oghd48m8eu391pefq5u node-3 Ready Active
e7p8btxeu3ioshyuj6lxiv6g0 node-2 Ready Active
ehkv3bcimagdese79dn78otj5 * node-1 Ready Active Leader

AVAILABILITY:是否可以分配任务给节点

  • Active:调度器可以将任务分配给节点。
  • Pause:调度器不给节点分配新任务,但现有的任务仍在运行。
  • Drain:调度器不给该节点分配新的任务。调度器会关闭现有的任务,并将它们安排在一个可用的节点上。

MANAGER STATUS:显示节点参与Raft共识的情况

  • worker<小弟>:无值表示一个不参与Swarm管理的工作节点。
  • Leader<头目>:表示该节点是主要的管理节点,为集群做出所有的管理和协调决定。
  • Reachable<被选举者>:表示该节点是参与Raft共识法定人数的管理节点。如果管理节点变得不可用,该节点有资格当选为新的领导者。
  • Unavailable<不可用>:意味着该节点是一个无法与其他管理器进行通信的管理器。如果一个管理器节点变得不可用,你应该加入一个新的管理器节点到集群中,或者提升一个工作节点为管理器。

有关群管理的更多信息,请参阅管理和维护大量 Docker 引擎|码头工人文档

查看单个节点

你可以在管理器节点上运行,查看单个节点信息,输出格式默认为JSON,可以通过标志来打印可读格式的结果。

例如:docker node inspect <NODE-ID> --pretty

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
docker node inspect self --pretty

ID: ehkv3bcimagdese79dn78otj5
Hostname: node-1
Joined at: 2016-06-16 22:52:44.9910662 +0000 utc
Status:
State: Ready
Availability: Active
Manager Status:
Address: 172.17.0.2:2377
Raft Status: Reachable
Leader: Yes
Platform:
Operating System: linux
Architecture: x86_64
Resources:
CPUs: 2
Memory: 1.954 GiB
Plugins:
Network: overlay, host, bridge, overlay, null
Volume: local
Engine Version: 1.12.0-dev

更新节点

更改节点可用性

通过更改节点可用性,可以:

  • 清空管理节点,以便仅执行集群管理任务,并且不可用于任务分配
  • 排空节点,以便将其脱机维护
  • 暂停节点,使其无法接收新任务
  • 恢复不可用或暂停的节点可用状态

例如,要将一个管理节点改为可用性改为:Drain

1
2
3
docker node update --availability drain node-1

node-1

删除或添加标签

节点标签提供了一种灵活的节点组织方法,可以在服务约束中使用节点标签。

当创建一个服务时,应用约束来限制调度器为服务分配任务的节点。

在管理器节点上运行,向节点添加标签元数据。标签支持单个或1对

1
docker node update --label-add--label-add<key><key>=<value>

使用--label-add给节点添加标签

1
2
3
docker node update --label-add foo --label-add bar=baz node-1

node-1

使用docker节点更新为节点设置的标签仅适用于集群中的节点实体。不要将它们与dockerddocker守护程序标签混淆。

因此,节点标签可用于将关键任务限制在满足某些要求的节点上。例如,只在应该运行特殊工作负载的机器上安排,如符合PCI-SS标准的机器。

受损的工作线程无法破坏这些特殊工作负载,因为它无法更改节点标签。

然而,引擎标签仍然是有用的,因为一些不影响容器安全协调的功能可能最好以分散的方式设置。例如,一个引擎可以有一个标签来表明它有某种类型的磁盘设备,这可能与安全没有直接关系。这些标签更容易被集群协调器 “信任”。

有关服务约束的详细信息,请参阅CLI 参考docker service create

节点降级或升级

可以将一个工作节点提升为管理角色,当一个管理节点变得不可用,或者当一个管理脱机维护时,这很有用。

同样地,可以将一个管理节点降级为工作节点。

注意:无论出于什么原因要提升或降级一个节点,都必须始终保持集群管理节点的法定数量

要升级一个节点或一组节点:docker node promote

1
2
3
4
docker node promote node-3 node-2

Node node-3 promoted to a manager in the swarm.
Node node-2 promoted to a manager in the swarm.

要降级一个节点或一组节点:docker node demote

1
2
3
4
docker node demote node-3 node-2

Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.

等同于以下命令的快捷指令

1
2
docker node promote`:`docker node update --role manager
docker node demote`:`docker node update --role worker

离开集群

在节点上运行docker swarm leave以将其从集群中删除。

例如,要将集群留在工作节点上:

1
2
3
docker swarm leave

Node left the swarm.

当节点离开群集时,Docker引擎停止以群集模式运行,编排器不再将任务调度到节点。

如果该节点是管理器节点,则会收到有关维护仲裁的警告。要覆盖警告,请使用--force。如果最后一个管理器节点离开群,则群将变得不可用,需要采取灾难恢复措施。

有关维护法定人数和灾难恢复的信息,请参阅Swarm管理指南。 节点离开群集后,可以在管理器节点上运行docker node rm命令,从节点列表中删除该节点。

1
docker node rm node-2

解散集群

  1. 排空节点上的集群容器
1
docker node update --availabiltity drain g36lvv23ypjd8v7ovlst2n3yt
  1. 主动离开集群,让节点处于down状态,才能删除
1
docker swarm leave
  1. 删除指定节点(管理节点操作)
1
docker node rm g36lvv23ypjd8v7ovlst2n3yt
  1. 管理节点、解散集群
1
docker swarm leave --force