管理 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-add
flag 支持<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 promote
和docker node demote
是docker node update --role manager
和docker node update --role worker
分别。
在 swarm 节点上安装插件
如果您的 swarm 服务依赖于一个或多个插件,则这些插件需要在
可能部署服务的每个节点。您可以手动
在每个节点上安装插件或编写安装脚本。您还可以部署
插件,与使用 Docker API 的全局服务类似,通过指定
一个PluginSpec
而不是ContainerSpec
.
注意
目前无法使用 Docker CLI 或 Docker Compose。此外,无法安装 插件。
这PluginSpec
由插件开发人员定义。要将插件添加到所有 Docker 节点,请使用
这service/create
API, 传递
这PluginSpec
JSON 定义在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