管理 swarm 中的节点

作为 Swarm 管理生命周期的一部分,您可能需要

列出节点

要查看 Swarm 中的节点列表,请在管理节点上运行 docker node ls

$ 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 共识中的参与情况

  • 无值表示不参与 Swarm 管理的 worker 节点。
  • Leader(领导者)表示该节点是主要的管理器节点,负责 Swarm 的所有 Swarm 管理和编排决策。
  • Reachable(可达)表示该节点是参与 Raft 共识仲裁的管理器节点。如果领导者节点变得不可用,该节点有资格被选举为新的领导者。
  • Unavailable(不可用)表示该节点是一个无法与其他管理器通信的管理器。如果管理器节点变得不可用,您应该将新的管理器节点加入 Swarm,或者将 worker 节点提升为管理器。

有关 Swarm 管理的更多信息,请参阅 Swarm 管理指南

检查单个节点

您可以在管理器节点上运行 docker node inspect <NODE-ID> 来查看单个节点的详细信息。输出默认为 JSON 格式,但您可以传递 --pretty 标志以人类可读的格式打印结果。例如:

$ 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

更新节点

您可以修改节点属性以

更改节点可用性

更改节点可用性使您能够

  • 排空管理器节点,使其仅执行 Swarm 管理任务,并且不可用于任务分配。
  • 排空节点,以便您可以将其关闭进行维护。
  • 暂停节点,使其无法接收新任务。
  • 恢复不可用或已暂停节点的可用性状态。

例如,要将管理器节点的可用性更改为 Drain(排空)

$ docker node update --availability drain node-1

node-1

有关不同可用性选项的描述,请参阅列出节点

添加或移除标签元数据

节点标签提供了一种灵活的节点组织方法。您还可以在服务约束中使用节点标签。在创建服务时应用约束以限制调度程序为服务分配任务的节点。

在管理器节点上运行 docker node update --label-add,为节点添加标签元数据。--label-add 标志支持 <key><key>=<value> 对。

对于要添加的每个节点标签,传递一次 --label-add 标志

$ docker node update --label-add foo --label-add bar=baz node-1

node-1

您使用 docker node update 为节点设置的标签仅适用于 Swarm 中的节点实体。不要将它们与 dockerd 的 Docker 守护程序标签混淆。

因此,节点标签可用于将关键任务限制在满足特定要求的节点上。例如,仅在应运行特殊工作负载(例如满足 PCI-SS 合规性的机器)的机器上进行调度。

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

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

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

提升或降级节点

您可以将 worker 节点提升为管理器角色。当管理器节点不可用或您想让管理器离线进行维护时,这很有用。同样,您可以将管理器节点降级为 worker 角色。

注意

无论您提升或降级节点的原因是什么,您都必须始终在 Swarm 中保持管理器节点的仲裁。有关更多信息,请参阅 Swarm 管理指南

要提升一个或一组节点,请在管理器节点上运行 docker node promote

$ 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

$ docker node demote node-3 node-2

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

docker node promotedocker node demote 分别是 docker node update --role managerdocker node update --role worker 的便捷命令。

在 Swarm 节点上安装插件

如果您的 Swarm 服务依赖于一个或多个插件,则这些插件需要可在服务可能部署的每个节点上使用。您可以手动在每个节点上安装插件或编写安装脚本。您还可以通过指定 PluginSpec 而不是 ContainerSpec,以类似于全局服务的方式使用 Docker API 部署插件。

注意

目前无法使用 Docker CLI 或 Docker Compose 将插件部署到 Swarm。此外,无法从私有仓库安装插件。

PluginSpec 由插件开发者定义。要将插件添加到所有 Docker 节点,请使用 service/create API,传递在 TaskTemplate 中定义的 PluginSpec JSON。

离开 Swarm

在节点上运行 docker swarm leave 命令,将其从 Swarm 中移除。

例如,在 worker 节点上离开 Swarm

$ docker swarm leave

Node left the swarm.

当节点离开 Swarm 时,Docker Engine 将停止在 Swarm 模式下运行。编排器不再向该节点调度任务。

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

有关维护仲裁和灾难恢复的信息,请参阅 Swarm 管理指南

节点离开 Swarm 后,您可以在管理器节点上运行 docker node rm 将该节点从节点列表中移除。

例如

$ docker node rm node-2

了解更多

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.