Docker Swarm节点的清空(Drain)和在启用
所有的active节点,都可以接收task。有时候会遇到,一个节点需要维护暂时不能使用,这意味着此节点将不能再接受新的task,且原有的task也要迁走,在其他可用的节点上运行
【注】将节点设置为DRAIN并不会从该节点删除独立容器(docker run/ docker up/ docker Engine API创建的容器)。节点的状态只影响service
- 查看redis容器分布的节点
[root@node1 ~]# docker service ps redis
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
2au9etgoryzy redis.1 redis:3.0.7 node1 Running Running 2 hours ago
daxio9w01x6f \_ redis.1 redis:3.0.6 node2 Shutdown Shutdown 2 hours ago
t5na1flecwgb redis.2 redis:3.0.7 node1 Running Running 2 hours ago
ny2ia69mibek \_ redis.2 redis:3.0.6 node2 Shutdown Shutdown 2 hours ago
355xlpbugpt2 redis.3 redis:3.0.7 node1 Running Running 2 hours ago
305huk42qp07 \_ redis.3 redis:3.0.6 node1 Shutdown Shutdown 10 hours ago
[root@node1 ~]#
- 清空node1节点的任务
[root@node1 ~]# docker node update --availability drain node1
node1
- 查看此时任务分配的节点
[root@node1 ~]# docker service ps redis
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
3r2nu9exguqf redis.1 redis:3.0.7 node2 Running Starting 2 seconds ago
2au9etgoryzy \_ redis.1 redis:3.0.7 node1 Shutdown Shutdown 2 seconds ago
daxio9w01x6f \_ redis.1 redis:3.0.6 node2 Shutdown Shutdown 2 hours ago
3ie4hycd9m55 redis.2 redis:3.0.7 node2 Running Starting 1 second ago
t5na1flecwgb \_ redis.2 redis:3.0.7 node1 Shutdown Shutdown 2 seconds ago
ny2ia69mibek \_ redis.2 redis:3.0.6 node2 Shutdown Shutdown 2 hours ago
ihnnj7k74aud redis.3 redis:3.0.7 node2 Running Starting 1 second ago
355xlpbugpt2 \_ redis.3 redis:3.0.7 node1 Shutdown Shutdown 2 seconds ago
305huk42qp07 \_ redis.3 redis:3.0.6 node1 Shutdown Shutdown 10 hours ago
可以看到此时任务都分配到了node2节点
- 检查节点的可用性
[root@node1 ~]# docker node inspect --pretty node1
ID: 28t3r12oxo2k9derz8i7yxw7p
Hostname: node1
Joined at: 2019-06-08 12:20:34.266379324 +0000 utc
Status:
State: Ready
Availability: Drain
Address: 192.168.229.128
...
- 启用被清空的节点
[root@node1 ~]# docker node update --availability active node1
node1
[root@node1 ~]# docker node inspect --pretty node1
ID: 28t3r12oxo2k9derz8i7yxw7p
Hostname: node1
Joined at: 2019-06-08 12:20:34.266379324 +0000 utc
Status:
State: Ready
Availability: Active
Address: 192.168.229.128
当节点的状态变为Active时,可以接受新的任务
- 在服务更新期间进行扩展
- 在滚动更新期间
- 当您设置另一个节点以耗尽可用性时
- 当另一个活动节点上的任务失败时
参考
https://my.oschina.net/u/915811/blog/1593856
https://docs.docker.com/engine/swarm/swarm-tutorial/drain-node/