본문 바로가기
Framework and Tool/Docker

Swarm - drain node

by ocwokocw 2023. 10. 2.

- 출처: https://docs.docker.com/engine/swarm/swarm-tutorial/drain-node/

 

Drain a node on the swarm

Drain nodes on the swarm

docs.docker.com

 

- Drain 의 필요성

이전까지의 실습은 모든 node가 active 상태라고 가정하고 진행했다. swarm manager는 task를 active 상태인 node에 할당하므로 모든 node가 task 를 수신할 수 있었다.

 

하지만 실제 운영 환경에서는 특정 node가 유지보수 상태에 들어갈 수 있으므로 해당 node를 drain 상태로 유지해야하는 경우가 생긴다. drain 상태가 되면 swarm manager로 부터 더이상 새로운 task를 할당받지 않는다. 또한 manager가 해당 node에서 수행되고 있던 task를 중지하고, active 상태인 다른 node 에서 새로운 task를 시작한다.


- Drain 실습을 위한 service 실행

우선 모든 node가 active 상태인지 확인한다.

[ec2-user@ip-172-31-36-249 ~]$ docker node ls
ID                            HOSTNAME                                           STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
mngf06jxen3uztf1ipxwbdd4k *   ip-172-31-36-249.ap-northeast-2.compute.internal   Ready     Active         Leader           24.0.5
w9qqp173ppn90vo7erjnychaj     ip-172-31-45-73.ap-northeast-2.compute.internal    Ready     Active                          24.0.5
37ji937z46g8y154o594c7dhu     ip-172-31-46-128.ap-northeast-2.compute.internal   Ready     Active

rolling update 실습에서 활용한 redis service를 사용하여 3개의 task를 띄운다. 이미 띄워져있다면 수행할 필요 없다.

[ec2-user@ip-172-31-36-249 ~]$ docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6
pr83xa7scqjtqdeczia53oa7f
overall progress: 3 out of 3 tasks
1/3: running   [==================================================>]
2/3: running   [==================================================>]
3/3: running   [==================================================>]
verify: Service converged

[ec2-user@ip-172-31-36-249 ~]$ docker service ps redis
ID             NAME      IMAGE         NODE                                               DESIRED STATE   CURRENT STATE           ERROR     PORTS
k5q372uvlic7   redis.1   redis:3.0.6   ip-172-31-36-249.ap-northeast-2.compute.internal   Running         Running 9 seconds ago
mf8zqaqgpktl   redis.2   redis:3.0.6   ip-172-31-45-73.ap-northeast-2.compute.internal    Running         Running 9 seconds ago
p7ni46vkmch7   redis.3   redis:3.0.6   ip-172-31-46-128.ap-northeast-2.compute.internal   Running         Running 9 seconds ago

- Drain 수행 및 재할당 확인

[ec2-user@ip-172-31-36-249 ~]$ docker node update --availability drain 37ji937z46g8y154o594c7dhu
37ji937z46g8y154o594c7dhu

[ec2-user@ip-172-31-36-249 ~]$ docker node inspect --pretty 37ji937z46g8y154o594c7dhu
ID:			37ji937z46g8y154o594c7dhu
Hostname:              	ip-172-31-46-128.ap-northeast-2.compute.internal
Joined at:             	2023-09-30 14:34:20.321826545 +0000 utc
Status:
 State:			Ready
 Availability:         	Drain
...

Drain을 수행하고 inspect로 조회하면 Status > Availability가 Drain 상태로 변경된것을 확인할 수 있다. docker service ps 를 통해 swarm manager가 어떻게 task를 재할당했는지 확인해보자.

[ec2-user@ip-172-31-36-249 ~]$ docker service ps redis
ID             NAME          IMAGE         NODE                                               DESIRED STATE   CURRENT STATE                 ERROR     PORTS
k5q372uvlic7   redis.1       redis:3.0.6   ip-172-31-36-249.ap-northeast-2.compute.internal   Running         Running 4 minutes ago
mf8zqaqgpktl   redis.2       redis:3.0.6   ip-172-31-45-73.ap-northeast-2.compute.internal    Running         Running 4 minutes ago
jud5pxs0eelh   redis.3       redis:3.0.6   ip-172-31-36-249.ap-northeast-2.compute.internal   Running         Running about a minute ago
p7ni46vkmch7    \_ redis.3   redis:3.0.6   ip-172-31-46-128.ap-northeast-2.compute.internal   Shutdown        Shutdown about a minute ago

- Drain node 를 다시 Active로 활성화

[ec2-user@ip-172-31-36-249 ~]$ docker node update --availability active 37ji937z46g8y154o594c7dhu
37ji937z46g8y154o594c7dhu

[ec2-user@ip-172-31-36-249 ~]$ docker node inspect --pretty 37ji937z46g8y154o594c7dhu | grep Availability
 Availability:         	Active

Active 상태가 되었으므로 다시 신규 task를 수신받을 수 있는 상태가 되었다. 신규 task를 수신받는 경우는 아래와 같다.

  • service가 scale out 되는 경우
  • rolling update가 일어나는 경우
  • 다른 node가 drain 상태로 되는 경우
  • task가 다른 active node에서 실패하는 경우

'Framework and Tool > Docker' 카테고리의 다른 글

Docker compose - Overview and Feature  (0) 2023.10.12
Swarm - routing mesh  (1) 2023.10.08
Swarm - Rolling update  (0) 2023.10.02
Swarm mode tutorial  (0) 2023.10.02
Swarm mode overview and concepts  (0) 2023.09.17

댓글