10.9 노드 가용성 속성 변경

manager1 노드에서 아래의 명령어를 실행하여 노드 목록과 상태를 볼 수 있습니다.

docker@manager1:~$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION yli8mapw893qwmavhq7at3x0t * manager1 Ready Active Leader 19.03.5 op87x0jmdhvk030rjscbcjw6r worker1 Ready Active 19.03.5 856rqgebt7da4c0yppdl6fcwl worker2 Ready Active 19.03.5 mlve8o2r06p1hvq8bqpwwx3ab worker3 Ready Active 19.03.5 docker@manager1:~$

AVAILABILITY가 Active로 되어 있는것을 알수 있습니다.

때로는 관리상의 이유로 노드를 중단시켜야 할 경우가 발생합니다. 이 의미는 AVAILABILITY를 Drain mode로 설정하는 것을 의미합니다. 우리는 노드 중 하나를 이용하여 테스트하도록 하겠습니다.

우선 웹 서비스의 프로세스 상태와 실행중인 노드를 확인합니다.

docker@manager1:~$ docker service ps web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS wtvu8i8qjadv web.1 nginx:latest manager1 Running Running 2 hours ago z07fi174otkf web.2 nginx:latest worker1 Running Running 2 hours ago 8euc7m27n5up web.3 nginx:latest worker2 Running Running 2 hours ago uk1k8ej2195j web.4 nginx:latest worker3 Running Running 10 minutes ago tzdb0xxq3nb6 web.5 nginx:latest worker3 Running Running 10 minutes ago docker@manager1:~$

복제본(Replica)가 5개 있는 것을 확인했습니다.

  • manager1에 1개

  • worker1에 1개

  • worker2에 1개

  • worker3에 2개

이제 worker1 노드에서 아래의 명령을 이용하여 상태를 확인합니다.

docker@manager1:~$ docker node ps worker1 ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS z07fi174otkf web.2 nginx:latest worker1 Running Running 2 hours ago docker@manager1:~$

현재 Running 상태입니다. docker node inspect 명령어를 이용하여 노드의 가용성을 확인합니다.

docker@manager1:~$ docker node inspect worker1 ~~~ 생략 ~~~ "Spec": { "Labels": {}, "Role": "worker", "Availability": "active" }, ~~~ 생략 ~~~

Availability 속성이 “active”임을 알 수 있습니다.

이제 가용성(Availability)을 DRAIN으로 설정해보겠습니다. 해당 명령을 실행하면 Manager는 해당 노드에서 실행중인 작업을 중지하고 ACTIVE 가용성이 있는 다른 노드에서 복제본을 시작합니다. 따라서 Manager가 worker1에서 실행중인 1개의 컨테이너를 가져와서 다른 노드에 예약합니다.

이제 Availability 속성을 “drain”으로 설정해서 노드를 업데이트 해봅시다.

docker@manager1:~$ docker node update --availability drain worker1 worker1 docker@manager1:~$

프로세스 상태를 살펴봅시다.

docker@manager1:~$ docker service ps web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS wtvu8i8qjadv web.1 nginx:latest manager1 Running Running 2 hours ago mofh2xf7kk6z web.2 nginx:latest manager1 Running Running 45 seconds ago z07fi174otkf \_ web.2 nginx:latest worker1 Shutdown Shutdown 46 seconds ago 8euc7m27n5up web.3 nginx:latest worker2 Running Running 2 hours ago uk1k8ej2195j web.4 nginx:latest worker3 Running Running 19 minutes ago tzdb0xxq3nb6 web.5 nginx:latest worker3 Running Running 19 minutes ago docker@manager1:~$

worker1의 컨테이너가 재조정되고 있음을 알 수 있습니다. 위에서는 manager1으로 예약되고 구동중입니다. 훌륭하지 않습니까?