• 如何驱逐docker swarm集群中的一个node节点?



    驱逐节点?这是要干什么?

     

    我问你,如果你的swarm集群中的一个节点,由于硬件,比如内存条故障了,要检修,你怎么办?强行将节点关机,你不担心swarm集群直接异常,而永久无法修复吗?

     

    所以,这些粗暴的方法,或许并不适合,所以,看个更加温和的方法—drain

     

    也就是,将swarm集群中的节点,先驱逐集群,然后修复主机,然后再重新的激活,接收manager分配的task.

     

    接下来的部门,就会为你演示,如何一步一步的去做。

     

    1、首先查看集群节点的状态

    [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
    cw5bome4a9g1rzelivxejd31c     nccztsjb-node-10   Ready     Active                          20.10.17
    [root@nccztsjb-node-07 ~]# 

     

    目前,在集群中,一共有4个节点,3个是worker节点。目前都是Active的状态。

     

    查看service的task在节点上的分布的情况

     

    [root@nccztsjb-node-07 ~]# docker service ps redis
    ID             NAME      IMAGE                                  NODE               DESIRED STATE   CURRENT STATE            ERROR     PORTS
    ttt73voejbh4   redis.1   172.20.58.152/middleware/redis:3.0.6   nccztsjb-node-09   Running         Running 14 seconds ago             
    dkt6tw9yy44r   redis.2   172.20.58.152/middleware/redis:3.0.6   nccztsjb-node-07   Running         Running 14 seconds ago             
    kimseii4sc7m   redis.3   172.20.58.152/middleware/redis:3.0.6   nccztsjb-node-10   Running         Running 14 seconds ago             
    wa457rt4kdhk   redis.4   172.20.58.152/middleware/redis:3.0.6   nccztsjb-node-08   Running         Running 13 seconds ago             
    s6ueg62zlul9   redis.5   172.20.58.152/middleware/redis:3.0.6   nccztsjb-node-08   Running         Running 13 seconds ago             
    v2r39eb83iey   redis.6   172.20.58.152/middleware/redis:3.0.6   nccztsjb-node-09   Running         Running 14 seconds ago             
    [root@nccztsjb-node-07 ~]#

     

    在每个节点上都有task。

     

    现在,驱逐节点 nccztsjb-node-10 ,执行下面的命令:

     

    [root@nccztsjb-node-07 ~]# docker node update --availability drain cw5bome4a9g1rzelivxejd31c
    cw5bome4a9g1rzelivxejd31c
    [root@nccztsjb-node-07 ~]# 

    其中,cw5bome4a9g1rzelivxejd31c是docker node ls查出来的节点 nccztsjb-node-10 对应的nodeID.

     

    再次查看节点状态

     

     

    节点nccztsjb-node-10 已经变为 Drain状态了。

     

    再查看service的状态

     

    docker service ps redis

     

     

    发现节点 nccztsjb-node-10上的task已经是Shutdown状态了,并且是被调度到其他的Active节点上运行了。

     

     

    OK,到这里的话,这个节点就可以进行停机维护了。

     

    到这里,就结束了吗?当然没有,维护完了,怎么加回来呀?

     

    非常,非常的简单。

     

    就像这样:

     

    [root@nccztsjb-node-07 ~]# docker node update --availability active cw5bome4a9g1rzelivxejd31c
    cw5bome4a9g1rzelivxejd31c

     

    就可以了。

     

    当节点是Active的状态时,就可以重新接收task.

     

     

    总结一下:

     

    • 将节点驱逐的命令

     

    docker node update --availability drain <NODE_ID>

     

    • 将节点再次激活的命令

     

    docker node update --availability active <NODE_ID>
  • 相关阅读:
    闭包的一个经典例子
    手机归属地查询API
    安卓模拟器导入通讯录
    使用RazorGenerator实现项目模块分离
    .met mvc 一种判断是否已登录的方式
    stl 空间配置器理解
    STL 生成全排列
    KMP算法理解
    解决八皇后问题,递归与非递归方式两种
    获取第K大的数
  • 原文地址:https://www.cnblogs.com/chuanzhang053/p/16646215.html
Copyright © 2020-2023  润新知