1. 程式人生 > >08_drain a node on the swarm

08_drain a node on the swarm

docker swarm

在之前的小節,所有的節點的狀態都是運行著的可用狀態。swarm manager 可以分配任務給任意可用的節點。


有時候,你可能需要對某臺服務器進行維護,你需要配置某個節點為drain狀態,即排幹該節點上面的所有運行的容器。drain狀態可以防止維護節點再收到 管理節點的指令。


它也意味著管理節點停止在該服務器上面運行任務,並把復制任務放到別的可用節點上面。

$ docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
1bcef6utixb0l0ca7gxuivsj0    worker2   Ready   Active
38ciaotwjuritcdtn9npbnkuz    worker1   Ready   Active
e216jshn25ckzbvmwlnh5jr3g *  manager1  Ready   Active        Leader


如果你不在運行redis3.0.7的鏡像,回滾到原來的redis3.0.6,你可以執行以下命令

$ docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6
c5uo6kdmzpon37mgj9mwglcfw
$ docker service ps redis
NAME                               IMAGE        NODE     DESIRED STATE  CURRENT STATE
redis.1.7q92v0nr1hcgts2amcjyqg3pq  redis:3.0.6  manager1 Running        Running 26 seconds
redis.2.7h2l8h3q3wqy5f66hlv9ddmi6  redis:3.0.6  worker1  Running        Running 26 seconds
redis.3.9bg7cezvedmkgg6c8yzvbhwsd  redis:3.0.6  worker2  Running        Running 26 seconds


當我們想要排幹 worker1上面的容器,進行維護時


docker node update --availability drain <NODE-ID>

docker node update --availability drain worker1
worker1
$ docker node inspect --pretty worker1
ID:38ciaotwjuritcdtn9npbnkuz
Hostname:worker1
Status:
 State:Ready
 Availability:Drain
...snip...


可以看到

Availability:Drain
$ docker service ps redis
NAME                                    IMAGE        NODE      DESIRED STATE  CURRENT STATE           ERROR
redis.1.7q92v0nr1hcgts2amcjyqg3pq       redis:3.0.6  manager1  Running        Running 4 minutes
redis.2.b4hovzed7id8irg1to42egue8       redis:3.0.6  worker2   Running        Running About a minute
 \_ redis.2.7h2l8h3q3wqy5f66hlv9ddmi6   redis:3.0.6  worker1   Shutdown       Shutdown 2 minutes ago
redis.3.9bg7cezvedmkgg6c8yzvbhwsd       redis:3.0.6  worker2   Running        Running 4 minutes


swarm manager 會停止處於 drain狀態的節點上面的容器,並重新在可用的節點上面啟用該容器。


維護完畢,從drain狀態恢復回 active 狀態

$ docker node update --availability active worker1
worker1
$ docker node inspect --pretty worker1
ID:38ciaotwjuritcdtn9npbnkuz
Hostname:worker1
Status:
 State:Ready
 Availability:Active
...snip...


當你設置一個維護的節點重新回到 active 狀態時候,它能夠重新收到如下的任務分配:


  1. 服務更新擴容

  2. 滾動更新

  3. 當你設置別的節點為drain

  4. 當另外一個節點上面的任務運行失敗


本文出自 “清風柳絮” 博客,請務必保留此出處http://binuu.blog.51cto.com/801317/1942412

08_drain a node on the swarm