管理群中的节点

预计阅读时间:7分钟

作为群集管理生命周期的一部分,您可能需要按以下方式查看或更新节点:

列出节点

要从docker node ls管理器节点查看swarm中运行的节点列表:

$ 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共识:

  • 无值表示不参与群集管理的工作程序节点。
  • Leader 表示该节点是主要管理者节点,负责为该群做出所有群管理和编排决策。
  • Reachable表示该节点是参与Raft共识仲裁的管理者节点。如果领导者节点不可用,则该节点有资格被选举为新的领导者。
  • Unavailable表示该节点是无法与其他管理器进行通信的管理器。如果管理器节点不可用,则应将新的管理器节点加入群集,或将工作器节点提升为管理器。

有关群管理的更多信息,请参阅《群管理指南》

检查单个节点

您可以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

更新节点

您可以按如下所示修改节点属性:

更改节点可用性

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

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

例如,要将管理器节点更改为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为节点设置的标签仅适用于群集内的节点实体。不要将它们与dockerd的docker守护进程标签 混淆

因此,节点标签可用于将关键任务限制为满足某些要求的节点。例如,仅在应运行特殊工作负载的计算机(例如符合PCI-SS法规要求的计算机)上计划

受感染的工作人员无法破坏这些特殊的工作负载,因为它无法更改节点标签。

但是,引擎标签仍然有用,因为某些不影响容器安全编排的功能可能会以分散的方式更好地设置。例如,引擎可能具有标签以指示它具有某种类型的磁盘设备,而该磁盘设备可能与安全性不直接相关。这些标签更容易被集群协调器“信任”。

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

升级或降级节点

您可以将辅助节点提升为管理员角色。当管理器节点不可用或要使管理器脱机进行维护时,此功能很有用。同样,您可以将管理者节点降级为工作者角色。

注意:不管您要升级或降级节点的原因如何,都必须始终在集群中维持一定数量的管理器节点。有关更多信息,请参阅《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 manager和的便捷命令 docker node update --role worker

在群体节点上安装插件

如果您的swarm服务依赖一个或多个 插件,则这些插件需要在可能部署该服务的每个节点上都可用。您可以在每个节点上手动安装插件,也可以脚本化安装。您也可以使用Docker API以类似于全局服务的方式使用Docker API部署插件,方法是指定aPluginSpec而不是ContainerSpec

笔记

当前尚无法使用Docker CLI或Docker Compose将插件部署到大量应用程序。此外,无法从专用存储库安装插件。

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

离开群

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

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

$ docker swarm leave

Node left the swarm.

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

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

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

节点离开群集后,可以docker node rm在管理器节点上运行命令以从节点列表中删除该节点。

例如:

$ docker node rm node-2

学到更多

引导群模式节点