在swarm的生命周期中,你可能需要查看或更新节点,如:
列出节点
在管理节点在执行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显示出调度器是否能分配任务给这个节点:
MANAGER STATUS列显示节点是否参与到Raft一致性:
查看单个节点详细信息
你可以在管理节点上执行docker node inspect 来查看单个节点的详细信息。默认输出来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标志支持或 = 对。
每添加一个节点标签需要传递一次label-add参数:
- $ docker node update –label-add foo –label-add bar=baz node-1
- node-1
升级或降级节点
你可以升级一个worker节点为管理节点。这个在管理节点变为不可用或者你想下线管理节点来维护会比较有帮助。当然,你也可以降级一个管理节点为worker节点。
不管你降级和升级节点是出于什么原因,你应该始终确保swarm中管理节点数量为奇数。
在管理节点执行docker node promote来升级一组worker节点:
- $ 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 demote分别是docker node update –role manager和docker node update –role worker命令等效。
脱离节点
要从swarm删除一个节点,首先要执行docker swarm leave命令。
例如从swarm脱离一个worker节点:
- $ docker swarm leave
- Node left the swarm.
当一个节点脱离swarm时,Docker Engine不再以swarm模式运行。orchestrator不再调度任务给该节点。
当节点脱离swarm之后,你可以在管理节点执行docker node rm命令来从节点列表中删除该节点。
例如:
- docker node rm node-2
- node-2