Docker Swarm 에서 리더 노드가 아닌 노드에서 관리 명령 실행 방법

DockerBeginner
지금 연습하기

소개

Docker Swarm 은 Docker 호스트 클러스터를 하나의 시스템으로 관리할 수 있는 강력한 오케스트레이션 도구입니다. Swarm 에서 하나의 노드는 리더로 지정되어 클러스터 상태를 관리하고 결정을 내립니다. 그러나 관리 명령을 비리더 노드에서 실행해야 할 때가 있을 수 있습니다. 이 자습서에서는 Docker Swarm 에서 리더 노드를 식별하고 비리더 노드에서 관리 명령을 실행하는 방법을 안내합니다.

Docker Swarm 아키텍처 이해

Docker Swarm 은 "스웜"이라고 불리는 Docker 호스트 클러스터를 관리할 수 있는 컨테이너 오케스트레이션 도구입니다. Docker Swarm 에는 매니저 노드와 작업자 노드 두 가지 유형의 노드가 있습니다.

매니저 노드

매니저 노드는 스웜의 전반적인 관리를 담당합니다. 다음과 같은 작업을 처리합니다.

  • 컨테이너 스케줄링 및 배포
  • 스웜의 원하는 상태 유지
  • 스웜과 상호 작용하기 위한 API 제공

매니저 노드는 컨테이너를 실행할 수도 있지만, 주요 역할은 스웜을 관리하는 것입니다.

작업자 노드

작업자 노드는 실제 컨테이너를 실행하는 역할을 합니다. 매니저 노드의 지시를 받아 실행합니다. 클러스터를 확장하기 위해 필요에 따라 작업자 노드를 스웜에 추가하거나 제거할 수 있습니다.

graph LR
    subgraph Docker Swarm
        Manager[매니저 노드] --- Worker[작업자 노드]
        Manager --- Worker
    end

Docker Swarm 아키텍처는 여러 매니저 노드가 스웜에 포함될 수 있도록 하여 고가용성과 장애 허용성을 보장합니다. 이렇게 하면 한 매니저 노드가 실패하더라도 나머지 매니저 노드로 스웜이 계속 작동할 수 있습니다.

Docker Swarm 에서 리더 노드 식별

Docker Swarm 에서 매니저 노드 중 하나가 리더로 선출됩니다. 리더 노드는 모든 중요한 결정을 내리고 다른 매니저 노드의 작업을 조정하는 역할을 합니다.

리더 노드 확인

Docker Swarm 에서 리더 노드를 식별하려면 다음 명령어를 사용할 수 있습니다.

docker node ls

이 명령어는 스웜의 모든 노드를 나열하고, 리더 노드는 * 기호로 표시됩니다.

또는 특정 노드에 대한 자세한 정보를 얻으려면 docker node inspect 명령어를 사용할 수 있습니다.

docker node inspect < node-id > --pretty

이 명령어는 노드의 역할, 상태 및 리더인지 여부를 포함한 기타 관련 정보를 표시합니다.

리더 선출 이해

Docker Swarm 은 매니저 노드 중 리더를 선출하기 위해 Raft 합의 알고리즘을 사용합니다. 리더는 결정을 내리고 다른 매니저 노드의 작업을 조정하는 역할을 합니다.

현재 리더 노드가 실패하거나 사용할 수 없게 되면, 남은 매니저 노드 중 새로운 리더가 자동으로 선출됩니다. 이를 통해 매니저 노드가 실패하더라도 스웜이 계속 작동할 수 있도록 합니다.

graph LR
    subgraph Docker Swarm
        Manager1[매니저 노드 1] --- Manager2[매니저 노드 2]
        Manager1 --- Manager3[매니저 노드 3]
        Manager2 --- Manager3
        Manager1 -- 리더 --> Manager2
        Manager2 -- 팔로워 --> Manager3
    end

리더 노드가 아닌 노드에서 관리 명령 실행

Docker Swarm 에서 리더 노드는 모든 중요한 결정을 내리고 다른 매니저 노드의 작업을 조정하는 역할을 합니다. 그러나 문제 해결이나 유지보수를 위해 리더 노드가 아닌 노드에서 관리 명령을 실행해야 하는 경우가 있을 수 있습니다.

리더 노드가 아닌 노드 접근

Docker Swarm 에서 리더 노드가 아닌 노드에 접근하려면 docker node ssh 명령어를 사용할 수 있습니다. 이 명령어는 스웜 내 특정 노드에 SSH 연결을 설정합니다.

docker node ssh <node-id>

<node-id>를 접근하려는 리더 노드가 아닌 노드의 ID 로 바꿔주세요.

관리 명령 실행

리더 노드가 아닌 노드에 SSH 연결을 설정한 후 필요에 따라 관리 명령을 실행할 수 있습니다. 일반적인 관리 명령으로는 다음이 있습니다.

  • 노드 상태 및 역할 확인:
    docker node inspect < node-id > --pretty
    
  • 노드 로그 보기:
    docker node logs <node-id>
    
  • 노드에서 명령 실행:
    docker exec -it <container-id> <command>
    

리더 노드가 아닌 노드에서 관리 명령을 실행할 수 있지만, 수행하는 변경 사항이나 작업은 스웜의 전체 상태에 영향을 주지 않습니다. 클러스터의 원하는 상태를 유지하는 것은 여전히 리더 노드의 책임입니다.

제한 사항

리더 노드가 아닌 노드에서 관리 명령을 실행하는 데는 제한 사항이 있습니다. 예를 들어, docker service 또는 docker stack 명령어는 리더 노드가 관리하는 스웜의 상태에 접근해야 하므로 리더 노드가 아닌 노드에서 사용할 수 없습니다.

스웜의 상태에 접근해야 하는 작업을 수행해야 하는 경우 리더 노드에서 수행하거나 리더 노드가 아닌 노드에서 리더 노드로 docker node exec 명령어를 사용하여 명령을 실행해야 합니다.

요약

이 튜토리얼을 마치면 Docker Swarm 아키텍처에 대한 이해도가 높아지고 리더 노드가 아닌 노드에서 관리 명령을 효과적으로 실행할 수 있게 됩니다. 이 지식은 Docker Swarm 환경에서 컨테이너화된 애플리케이션을 높은 가용성으로 효율적으로 관리하는 데 도움이 될 것입니다.