管理 Swarm 中的节点

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

列出节点

查看 swarm run 中的节点列表docker node ls从 Manager 节点:

$ 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 会关闭所有现有任务,并将它们安排在可用的 节点。

MANAGER STATUS列显示节点参与 Raft 共识:

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

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

检查单个节点

您可以运行docker node inspect <NODE-ID>以查看 details 的 Boss 任务。输出默认为 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

更新节点

您可以修改节点属性以:

更改节点可用性

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

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

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

$ docker node update --availability drain node-1

node-1

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

添加或删除标签元数据

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

docker node update --label-add在 Manager 节点上,将标签元数据添加到其中 一个节点。这--label-addflag 支持<key><key>=<value>双。

--label-add为要添加的每个节点标签标记一次:

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

node-1

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

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

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

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

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

升级或降级节点

您可以将 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从 Manager 节点:

$ 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 demotedocker node update --role managerdocker node update --role worker分别。

在 swarm 节点上安装插件

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

注意

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

PluginSpec由插件开发人员定义。要将插件添加到所有 Docker 节点,请使用 这service/createAPI, 传递 这PluginSpecJSON 定义在TaskTemplate.

离开 swarm

运行docker swarm leave命令将其从 Swarm 中删除。

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

$ docker swarm leave

Node left the swarm.

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

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

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

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

例如:

$ docker node rm node-2

了解更多信息