管理 Swarm 中的节点

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

列出节点

要从管理器节点查看群中运行的节点列表: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表示计划程序不会将新任务分配给节点。这 Scheduler 会关闭所有现有任务,并将它们安排在可用的 节点。

该列显示了 Raft 共识中的节点参与情况:MANAGER STATUS

  • 无值表示不参与 swarm 的工作节点 管理。
  • Leader表示该节点是组成所有 SWARM 的主管理器节点 群的管理和编排决策。
  • Reachable表示该节点是参与 Raft 的 Manager 节点 共识法定人数。如果领导节点变得不可用,则该节点有资格获得 当选为新领导人。
  • Unavailable表示该节点是无法与之通信的 Manager 其他经理。如果管理器节点变得不可用,您应该加入 将 new Manager 节点提升为 Swarm 或 Worker 节点为 经理。

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

检查单个节点

您可以在管理器节点上运行以查看 details 的 Boss 任务。输出默认为 JSON 格式,但您可以 传递标志以人类可读的格式打印结果。例如:docker node inspect <NODE-ID>--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

更新节点

您可以修改节点属性以:

更改节点可用性

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

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

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

$ docker node update --availability drain node-1

node-1

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

添加或删除标签元数据

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

在管理器节点上运行以将标签元数据添加到其中 一个节点。该标志支持 a 或 pair。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

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

因此,节点标签可用于将关键任务限制为满足 某些要求。例如,仅在 应运行工作负载,例如满足 PCI-SS 的机器 合规性

被入侵的 worker 无法破坏这些特殊工作负载,因为它 无法更改节点标签。

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

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

升级或降级节点

您可以将 worker 节点提升为管理员角色。这在 Manager 节点变得不可用,或者您希望使 Manager 脱机 保养。同样,您可以将管理器节点降级为 worker 角色。

注意

无论您出于何种原因晋升或降级 节点,则必须始终在 群。有关更多信息,请参阅 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 promote和 分别是 和 的便捷命令。docker node demotedocker node update --role managerdocker node update --role worker

在 swarm 节点上安装插件

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

注意

目前无法使用 Docker CLI 或 Docker Compose。此外,无法安装 插件。

PluginSpec 由插件开发人员定义。要将插件添加到所有 Docker 节点,请使用 service/create API,将 在 .PluginSpecTaskTemplate

离开 swarm

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

例如,要将 swarm 保留在 worker 节点上:

$ docker swarm leave

Node left the swarm.

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

如果该节点是管理器节点,您会收到一条警告,告知您维护 法定人数。要覆盖警告,请传递标志。如果最后一位管理器 节点离开 swarm,则 swarm 变得不可用,需要您执行 灾难恢复措施。--force

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

节点离开集群后,您可以在 Manager node 以从节点列表中删除该节点。docker node rm

例如:

$ docker node rm node-2

了解更多信息