在swarm的生命周期中,你可能需要查看或更新节点,如:
列出swarm中的节点
查看单个节点详信息
更新节点
脱离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显示出调度器是否能分配任务给这个节点:
Active意味着调度器可以分配任务给节点
Pause意味着调度器不能分配任务给节点,不过已存在的任务仍然继续运行
Drain意味着调度器不能分配任务给节点。调度器关闭已存在的任务并调度它们到其它可用节点
MANAGER STATUS列显示节点是否参与到Raft一致性:
没有值表示worker节点不参与到swarm管理
Leader表示该节点是主要管理节点,负责全部的swarm管理工作和编排决策。
Reachable表示该节点是一个管理节点并参与到Raft一致性。如果leader节点变为不可用,该节点有资格被选为新的leader。
Unavailable表示该节点是一个管理节点,不过目前不能与其它管理节点通信。如果一个管理节点变为不可用,你应该加入一个新的管理节点或者提升一个worker节点为管理节点。
查看单个节点详细信息
你可以在管理节点上执行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一个管理节点,可以使该节点只完成swarm管理任务,而不接收来自调度器的任务并停止已存在的任务
drain一个节点,你可以下线该节点来进行维护工作
pause一个节点,使它不再接收新任务
restore一个不可用或暂停的节点为可用状态
例如,设置一个管理节点为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