docker swarm join 명령으로 노드 추가 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker swarm join 명령을 사용하여 기존 Docker Swarm 에 노드를 추가하는 방법을 배우게 됩니다. 작업자 (worker) 로 노드를 참여시키는 과정과, 스웜 관리에 참여하는 매니저 (manager) 로 참여시키는 과정을 다룰 것입니다. 작업자는 매니저가 할당한 작업을 실행합니다.

또한 --availability 플래그를 살펴보고, 노드를 참여시킬 때 스웜 내에서의 초기 가용성을 제어하기 위해 이를 사용하는 방법을 이해할 것입니다. 이 실습을 통해 Docker Swarm 클러스터를 확장하기 위한 필수 단계에 대한 실질적인 경험을 얻을 수 있습니다.

작업자로 스웜에 노드 참여시키기

이 단계에서는 기존 Docker Swarm 에 작업자 (worker) 로 노드를 참여시키는 방법을 배우겠습니다. 작업자 노드는 스웜에 배포된 서비스를 실행하는 머신입니다. 작업자 노드는 매니저 노드에서 할당된 작업을 수신하고 실행합니다.

노드를 스웜에 참여시키기 전에, 실행 중인 Docker Swarm 매니저 노드가 있어야 합니다. 이 랩에서는 스웜이 이미 초기화되었고 작업자 노드에 대한 조인 토큰 (join token) 을 가지고 있다고 가정합니다.

먼저, 조인 토큰을 갖는 상황을 시뮬레이션해 보겠습니다. 실제 시나리오에서는 docker swarm join-token worker 명령을 사용하여 매니저 노드에서 이 토큰을 얻습니다. 이 랩에서는 자리 표시자 토큰을 사용합니다.

매니저가 제공하는 조인 명령이 다음과 유사하다고 가정해 보겠습니다.

docker swarm join --token SWMTKN-1-abcdefghijklmnopqrstuvwxyz-1234567890abcdef --advertise-addr <THIS_NODE_IP> <MANAGER_IP>:2377

이 명령에서:

  • docker swarm join: 노드를 스웜에 참여시키는 명령입니다.
  • --token SWMTKN-1-abcdefghijklmnopqrstuvwxyz-1234567890abcdef: 스웜에 노드를 인증하는 고유한 토큰입니다.
  • --advertise-addr <THIS_NODE_IP>: 이 플래그는 참여하는 노드가 스웜의 다른 노드에 자신을 알리는 데 사용할 IP 주소를 지정합니다. <THIS_NODE_IP>를 참여시키려는 노드의 실제 IP 주소로 바꿉니다.
  • <MANAGER_IP>:2377: 스웜의 매니저 노드 주소입니다. 참여하는 노드는 이 주소에 연결하여 스웜에 참여합니다. <MANAGER_IP>를 매니저 노드의 실제 IP 주소로 바꿉니다. 기본 스웜 포트는 2377 입니다.

이 랩에서는 단일 VM 환경에서 작업하므로, 단순화된 명령을 사용하여 조인 프로세스를 시뮬레이션합니다. 매니저 IP 로 127.0.0.1을 사용하고 자리 표시자 토큰을 사용합니다.

작업자로 스웜에 참여하는 것을 시뮬레이션하려면 다음 명령을 실행하십시오. 이 명령은 이 단일 VM 설정에서는 실제 스웜에 실제로 참여하지 않지만, 명령 구조를 보여줍니다.

docker swarm join --token SWMTKN-1-abcdefghijklmnopqrstuvwxyz-1234567890abcdef 127.0.0.1:2377

노드가 스웜에 참여하려고 시도하고 있음을 나타내는 출력을 볼 수 있습니다. 실제 시나리오에서 조인이 성공하면 "This node joined a swarm as a worker."와 같은 메시지가 표시됩니다.

매니저로 스웜에 노드 참여시키기

이 단계에서는 기존 Docker Swarm 에 매니저 (manager) 로 노드를 참여시키는 방법을 배우겠습니다. 매니저 노드는 스웜 상태 유지, 서비스 스케줄링, 스웜 전체 작업 처리와 같은 스웜 관리 작업을 처리합니다. 스웜은 고가용성을 위해 여러 매니저 노드를 가질 수 있습니다.

작업자로 참여하는 것과 마찬가지로, 매니저로 참여하려면 기존 매니저 노드에서 조인 토큰 (join token) 이 필요합니다. 기존 매니저 노드에서 매니저 조인 토큰을 얻는 명령은 docker swarm join-token manager입니다.

매니저 노드에 대한 조인 명령이 다음과 유사하다고 가정해 보겠습니다.

docker swarm join --token SWMTKN-1-abcdefghijklmnopqrstuvwxyz-1234567890abcdef --advertise-addr <THIS_NODE_IP> <MANAGER_IP>:2377

명령 구조가 작업자를 참여시키는 것과 동일하지만 토큰이 다르다는 점에 유의하십시오. 매니저 노드 참여를 위한 토큰은 고유하며 더 높은 권한을 부여합니다.

이 랩에서는 다시 한 번, 자리 표시자 매니저 토큰과 127.0.0.1을 매니저 IP 로 사용하여 단일 VM 환경에서 조인 프로세스를 시뮬레이션합니다.

매니저로 스웜에 참여하는 것을 시뮬레이션하려면 다음 명령을 실행하십시오.

docker swarm join --token SWMTKN-1-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0987654321fedcba 127.0.0.1:2377

노드가 스웜에 참여하려고 시도하고 있음을 나타내는 출력을 볼 수 있습니다. 실제 다중 노드 스웜에서 조인이 성공하면 "This node joined a swarm as a manager."와 같은 메시지가 표시됩니다.

--availability 플래그 이해 및 사용 (노드 참여 시)

이 단계에서는 Docker Swarm 에 노드를 참여시킬 때 사용할 수 있는 --availability 플래그를 살펴보겠습니다. --availability 플래그는 노드가 작업을 스케줄링할 수 있는지 여부를 제어합니다. 이는 노드 유지 관리를 관리하거나 스웜에서 제거하지 않고 노드를 일시적으로 서비스에서 제외하는 데 특히 유용합니다.

--availability 플래그는 세 가지 값 중 하나를 가질 수 있습니다.

  • active: 노드는 작업을 스케줄링할 수 있습니다. 이는 새로 참여한 노드의 기본 상태입니다.
  • pause: 노드에는 새 작업이 할당되지 않지만 기존 작업은 계속 실행됩니다.
  • drain: 노드에는 새 작업이 할당되지 않으며 기존 작업은 종료되고 다른 사용 가능한 노드에서 다시 스케줄링됩니다.

노드를 참여시킬 때 초기 가용성을 지정할 수 있습니다. 예를 들어, 가용성이 drain으로 설정된 작업자로 노드를 참여시키려면 다음과 같은 명령을 사용합니다.

docker swarm join --token SWMTKN-1-abcdefghijklmnopqrstuvwxyz-1234567890abcdef --availability drain --advertise-addr <THIS_NODE_IP> <MANAGER_IP>:2377

이 랩에서는 --availability drain 플래그로 노드를 참여시키는 것을 시뮬레이션합니다. 다시 한 번, 단일 VM 환경에서 자리 표시자 토큰과 127.0.0.1을 매니저 IP 로 사용합니다.

가용성을 drain으로 설정하여 스웜에 참여하는 것을 시뮬레이션하려면 다음 명령을 실행하십시오.

docker swarm join --token SWMTKN-1-abcdefghijklmnopqrstuvwxyz-1234567890abcdef --availability drain 127.0.0.1:2377

노드가 참여하려고 시도하고 있음을 나타내는 출력을 볼 수 있습니다. 실제 스웜에서 노드는 가용성이 drain으로 설정되어 참여하며, 이는 새 작업에 대해 스케줄링되지 않고 기존 작업이 이동됨을 의미합니다.

요약

이 랩에서는 docker swarm join 명령을 사용하여 기존 Docker Swarm 에 노드를 추가하는 방법을 배웠습니다. 작업자로 노드를 참여시키는 프로세스를 탐구하고, 조인 토큰 (join token), 매니저 주소 및 --advertise-addr 플래그의 역할을 이해했습니다. 또한 매니저 노드에서 얻은 다른 조인 토큰이 필요한 매니저로 노드를 참여시키는 방법도 살펴보았습니다. 마지막으로, --availability 플래그와 스웜 내에서 노드의 초기 가용성을 제어하기 위해 조인 프로세스 중에 이를 사용하는 방법을 배웠습니다.