在刚创建好的一个docker swarm集群中,manager节点虽然具备管理的角色,但是,还是允许task在上面运行的,那么如果就让manager节点,干一个活,就是管理,调度的任务,不让其执行任何的具体任务,不干活,该如何设置?
下面,先来看下,swarm中集群的节点信息:
[root@nccztsjb-node-07 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
mjktd9is5xd8d4el2awrqby5k * nccztsjb-node-07 Ready Active Leader 20.10.17
u87i9artgcnyki0osp9gvylu3 nccztsjb-node-08 Ready Active 20.10.17
z1x3ufsdxekrt6w5n37m7azfe nccztsjb-node-09 Ready Active 20.10.17
zbsfhbwjlit8f650bqvcbtkhl nccztsjb-node-10 Ready Active 20.10.17
[root@nccztsjb-node-07 ~]#
标记起来的,就是manger节点:
在这个管理节点上,运行着service的一个服务:
[root@nccztsjb-node-07 ~]# docker service ps nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
n9hpnz1djx1f nginx.mjktd9is5xd8d4el2awrqby5k 172.20.58.152/middleware/nginx:1.21.4 nccztsjb-node-07 Running Running 20 hours ago *:8080->80/tcp,*:8080->80/tcp
z26ktqqsbj6x nginx.u87i9artgcnyki0osp9gvylu3 172.20.58.152/middleware/nginx:1.21.4 nccztsjb-node-08 Running Running 20 hours ago *:8080->80/tcp,*:8080->80/tcp
m77cm6zvkq82 nginx.z1x3ufsdxekrt6w5n37m7azfe 172.20.58.152/middleware/nginx:1.21.4 nccztsjb-node-09 Running Running 20 hours ago *:8080->80/tcp,*:8080->80/tcp
3o0s4dekfl2v nginx.zbsfhbwjlit8f650bqvcbtkhl 172.20.58.152/middleware/nginx:1.21.4 nccztsjb-node-10 Running Running 20 hours ago *:8080->80/tcp,*:8080->80/tcp
[root@nccztsjb-node-07 ~]#
下面,就是关键了,让这个manager节点,不再执行任何的具体的task······
将manager节点,驱逐 (drain)
[root@nccztsjb-node-07 ~]# docker node update --availability drain mjktd9is5xd8d4el2awrqby5k
mjktd9is5xd8d4el2awrqby5k
[root@nccztsjb-node-07 ~]#
节点的可用性(AVAILABILITY)更新为Drain状态,上面的task也被终止了
新建service
OK,上面的过程显示,已有的task已经终止了,新建的service是否还会在这个节点上调度呢?
docker service create \
--replicas 6 \
--name redis \
--update-delay 10s \
--update-parallelism 2 \
172.20.58.152/middleware/redis:3.0.6
新部署的service,其中的task是没有在这个节点上运行的:
更为重要的是,不知道你注意了没有,当在manager上执行docker service命令的时候,依然可以进行任务的创建、调度等工作,也就是说,manager角色的作用还是在的!
只是,不执行具体的task了。
读到这里,你明白了没有?
- 如果有你任何的问题,欢迎留言······