docker node rm 명령어를 사용하여 스웜에서 노드 제거하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker node rm 명령을 사용하여 Docker Swarm 내에서 노드를 관리하는 방법을 배우게 됩니다. 먼저, 스웜 내의 기존 노드를 나열하여 식별하는 것으로 시작합니다. 그런 다음, 실행 중인 노드를 제거하여 명령의 기본 동작과 제한 사항을 이해하려고 시도할 것입니다.

그 후, 중지된 노드를 스웜에서 성공적으로 제거하는 방법을 살펴봅니다. 마지막으로, 더 이상 접근할 수 없는 노드를 강제로 제거하는 방법을 배우게 되는데, 이는 노드에 더 이상 접근할 수 없는 시나리오를 처리하는 데 매우 중요합니다. 이 실습 경험은 Docker Swarm 클러스터를 유지 관리하는 데 필요한 실질적인 지식을 제공할 것입니다.

스웜 내 기존 노드 목록 확인

이 단계에서는 현재 Docker Swarm 의 일부인 노드를 나열하는 방법을 배우게 됩니다. 노드를 나열하기 전에 Docker Swarm 을 초기화해야 합니다.

먼저, 현재 머신에서 새로운 스웜을 초기화합니다. 이 머신은 매니저 노드가 됩니다.

docker swarm init

스웜이 초기화되었음을 나타내고 다른 노드를 워커로 참여시키는 명령을 제공하는 출력을 볼 수 있습니다.

이제 스웜이 초기화되었으므로 docker node ls 명령을 사용하여 스웜 내의 노드를 나열할 수 있습니다.

docker node ls

이 명령은 스웜 내의 노드를 보여주는 테이블을 표시합니다. 처음에는 방금 초기화한 매니저 노드만 표시됩니다. 출력에는 노드 ID, 호스트 이름, 상태, 가용성, 매니저 상태 및 엔진 버전과 같은 정보가 포함됩니다.

예를 들어, 출력은 다음과 유사할 수 있습니다.

ID                            HOSTNAME            STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
<node_id> *                   <hostname>          Ready     Active         Leader           20.10.21

ID 옆의 *는 현재 사용 중인 노드를 나타냅니다. MANAGER STATUS 열은 스웜 내에서 노드의 역할을 보여줍니다 (예: Leader, Reachable, Unavailable).

실행 중인 노드를 스웜에서 제거 시도

이 단계에서는 현재 실행 중이며 스웜의 일부인 노드를 제거하려고 시도합니다. 이를 통해 서비스를 중단하지 않고는 실행 중인 노드를 단순히 제거할 수 없음을 보여줍니다.

먼저, 실행 중인 노드의 노드 ID 를 확인하기 위해 노드를 다시 나열해 보겠습니다.

docker node ls

제거하려는 노드의 ID를 식별합니다. 이 경우, 나열된 유일한 노드인 매니저 노드가 됩니다.

이제 docker node rm 명령과 노드 ID 를 사용하여 노드를 제거해 봅니다. <node_id>를 이전 단계에서 찾은 실제 ID 로 바꿉니다.

docker node rm <node_id>

노드가 매니저이므로 이 방법으로는 제거할 수 없다는 오류 메시지 또는 노드가 여전히 활성 상태라는 오류 메시지가 표시될 것입니다. 이는 예상되는 동작입니다. Docker Swarm 은 서비스 중단을 방지하기 위해 실행 중인 노드를 직접 제거하는 것을 방지합니다.

오류 메시지는 다음과 유사할 수 있습니다.

Error response from daemon: node <node_id> is a swarm manager and cannot be removed without --force

이는 이후 단계에서 살펴볼 --force 플래그를 사용하지 않고는 실행 중인 매니저 노드를 제거할 수 없음을 확인합니다. 워커 노드의 경우, 일반적으로 제거하기 전에 노드를 드레이닝 (draining) 합니다.

스웜에서 중지된 노드 제거

이 단계에서는 더 이상 실행되지 않거나 접근할 수 없는 스웜에서 노드를 제거하는 방법을 배우게 됩니다. 현재 스웜에는 하나의 노드 (매니저) 만 있으므로, 먼저 현재 노드에서 스웜을 떠나 노드가 중지된 시나리오를 시뮬레이션합니다.

먼저, 현재 노드에서 스웜을 떠납니다. 이렇게 하면 Docker 데몬이 스웜에 참여하는 것을 중지합니다.

docker swarm leave

스웜을 떠나고 싶은지 확인하는 메시지가 표시됩니다. y를 입력하고 Enter 키를 누릅니다.

Node left the swarm.

이제 동일한 스웜의 다른 매니저 노드에 있었다면, 방금 떠난 노드를 제거할 수 있습니다. 우리는 유일한 노드에 있으므로, 다른 매니저에 있는 것을 시뮬레이션하기 위해 스웜을 다시 초기화합니다.

docker swarm init

스웜이 다시 초기화되었음을 나타내는 출력을 보게 됩니다.

이제 스웜 내의 노드를 나열해 보겠습니다. 현재 노드만 나열됩니다.

docker node ls

중지된 노드 제거를 시연하기 위해, 스웜을 떠난 다른 노드가 있는 것을 시뮬레이션해야 합니다. 이 환경에서는 다른 노드를 추가할 수 없으므로, 더 이상 스웜에 참여하지 않는 노드를 제거하는 더 일반적인 시나리오인 접근할 수 없는 노드를 강제로 제거하는 다음 단계로 진행합니다.

접근 불가능한 노드를 스웜에서 강제 제거

이 단계에서는 접근할 수 없거나 응답하지 않는 노드를 스웜에서 강제로 제거하는 방법을 배우게 됩니다. 이는 노드에 장애가 발생하여 정상적으로 제거할 수 없는 경우에 필요합니다.

먼저, 노드 ID 를 얻기 위해 스웜의 노드를 다시 나열해 보겠습니다.

docker node ls

강제로 제거하려는 노드의 ID를 식별합니다. 현재 설정에서는 이것이 유일한 노드이며, 매니저입니다.

노드를 강제로 제거하려면 --force 플래그와 노드 ID 를 함께 사용하여 docker node rm 명령을 사용합니다. <node_id>를 실제 ID 로 바꿉니다.

docker node rm --force <node_id>

노드가 제거되었음을 나타내는 출력을 보게 됩니다.

Node <node_id> removed from swarm

이제 스웜의 노드를 다시 나열하여 노드가 제거되었는지 확인합니다.

docker node ls

스웜에서 유일한 노드 (매니저) 를 제거했으므로 오류 메시지가 표시되며, 현재 Docker 데몬은 더 이상 스웜의 일부가 아닙니다.

Error: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to a swarm.

이는 노드가 매니저 노드였음에도 불구하고 스웜에서 성공적으로 제거되었음을 확인합니다. 다른 매니저가 없는 경우 매니저 노드를 강제로 제거하면 스웜의 가용성에 영향을 미칠 수 있으므로 주의해서 수행해야 합니다.

요약

이 랩에서는 docker node rm 명령을 사용하여 Docker Swarm 내에서 노드를 관리하는 방법을 배웠습니다. docker node ls를 사용하여 스웜을 초기화하고 기존 노드를 나열하여 ID 와 상태를 식별하는 것으로 시작했습니다.

이후, 실행 중인 노드를 제거하려고 시도하여 노드를 제거하기 전에 서비스에서 제거해야 함을 시연했습니다. 그런 다음 중지된 노드를 성공적으로 제거하고, 노드 제거에 대한 다양한 시나리오를 다루면서 접근할 수 없는 노드를 스웜에서 강제로 제거하는 방법을 배웠습니다.