Docker Swarm 클러스터에 노드 추가하는 방법

DockerBeginner
지금 연습하기

소개

Docker Swarm 은 대규모로 Docker 컨테이너를 조정하고 관리하는 강력한 도구입니다. 이 튜토리얼에서는 기존 Docker Swarm 클러스터에 새로운 노드를 추가하는 방법을 배웁니다. 이를 통해 인프라를 확장하고 애플리케이션의 가용성과 복원력을 향상시킬 수 있습니다.

Docker Swarm 기본 이해

Docker Swarm 이란 무엇인가?

Docker Swarm 은 Docker 컨테이너를 위한 네이티브 클러스터링 및 스케줄링 솔루션입니다. Swarm 은 여러 Docker 엔진 그룹 (swarm) 을 하나의 가상 Docker 엔진으로 관리할 수 있도록 합니다. 이는 여러 호스트에 애플리케이션을 배포하여 높은 가용성과 확장성을 보장할 수 있음을 의미합니다.

Docker Swarm 의 주요 개념

  • 노드 (Node): 노드는 swarm 에 참여하는 Docker 엔진의 인스턴스입니다. 노드는 매니저 또는 작업자 노드일 수 있습니다.
  • 매니저 노드 (Manager Node): 매니저 노드는 swarm 을 관리하는 역할을 합니다. 이는 작업 스케줄링, 클러스터 상태 유지 및 장애 복구를 포함합니다.
  • 작업자 노드 (Worker Node): 작업자 노드는 매니저 노드에서 배포된 작업을 수신하고 실행합니다.
  • 서비스 (Service): 서비스는 swarm 에서 일련의 작업 (컨테이너) 의 원하는 상태를 정의합니다. 서비스는 swarm 에서 애플리케이션을 배포하는 기본 구성 요소입니다.
  • 작업 (Task): 작업은 서비스의 일부인 단일 컨테이너이며 노드에서 실행될 예정입니다.

Docker Swarm 의 장점

  • 간편함: Docker Swarm 은 Docker 엔진에 내장되어 있어 설정 및 관리가 용이합니다.
  • 높은 가용성: Swarm 은 자동 로드 밸런싱 및 장애 복구를 제공하여 애플리케이션의 높은 가용성을 보장합니다.
  • 확장성: swarm 에 노드를 추가하거나 제거하여 애플리케이션을 쉽게 확장할 수 있습니다.
  • 보안: Docker Swarm 은 암호화된 통신 및 역할 기반 액세스 제어와 같은 내장 보안 기능을 사용합니다.

Docker Swarm 시작하기

Docker Swarm 을 시작하려면 swarm 클러스터를 설정해야 합니다. 이는 매니저 노드를 초기화하고 작업자 노드를 swarm 에 추가하는 것을 포함합니다. Ubuntu 22.04 를 사용한 예를 살펴보겠습니다.

## 매니저 노드에서 swarm 초기화

## 작업자 노드를 swarm에 가입

swarm 을 설정한 후에는 서비스로 애플리케이션을 배포하기 시작할 수 있습니다.

Docker Swarm 클러스터에 노드 추가하기

작업자 노드를 Swarm 에 가입하기

Docker Swarm 클러스터에 작업자 노드를 추가하려면 docker swarm join 명령어를 사용합니다. 이 명령어는 매니저 노드에서 얻을 수 있는 가입 토큰이 필요합니다.

매니저 노드에서 가입 토큰을 얻으려면 다음 명령어를 실행합니다.

docker swarm join-token worker

이 명령어는 작업자 노드를 swarm 에 가입하는 데 사용할 수 있는 명령어를 출력합니다. 예를 들어:

docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s7riia...

이제 작업자 노드에서 매니저 노드가 제공한 명령어를 실행하여 swarm 에 가입합니다.

매니저 노드를 Swarm 에 가입하기

Docker Swarm 클러스터에 매니저 노드를 추가할 수도 있습니다. 이는 swarm 의 장애 허용성과 고가용성을 높이는 데 유용합니다.

새 매니저 노드를 추가하려면 새 노드에서 다음 명령어를 실행합니다.

docker swarm join --token SWMTKN-1-61ztec9roubhglb7xbc...

매니저 노드에 가입하는 데 사용되는 토큰은 기존 매니저 노드에서 다음 명령어를 사용하여 얻을 수 있습니다.

docker swarm join-token manager

노드 상태 확인하기

swarm 에 노드를 추가한 후 docker node ls 명령어를 사용하여 클러스터의 모든 노드 상태를 볼 수 있습니다. 이 명령어는 각 노드의 역할 (매니저 또는 작업자) 과 현재 상태를 보여줍니다.

docker node ls

이 명령어는 swarm 의 각 노드에 대한 정보가 포함된 표를 출력합니다.

Swarm 에서 노드 제거하기

swarm 에서 노드를 제거해야 하는 경우 docker node rm 명령어를 사용할 수 있습니다. 예를 들어, 작업자 노드를 제거하려면 다음과 같이 합니다.

docker node rm worker-node

매니저 노드를 제거하려면 먼저 작업자 노드로 강등한 다음 제거해야 합니다.

docker node demote manager-node
docker node rm manager-node

노드 제거는 swarm 의 가용성과 복원력에 영향을 줄 수 있으므로 신중하게 계획해야 합니다.

Swarm 노드 관리 및 모니터링

Swarm 노드 모니터링

Docker Swarm 노드의 상태와 건전성을 모니터링하려면 다음 명령어를 사용할 수 있습니다.

## swarm 내 모든 노드 목록
docker node ls

## 특정 노드 검사
docker node inspect node-name

## 노드 메트릭 보기
docker node ps node-name

docker node ls 명령어는 swarm 내 모든 노드의 개요를 제공합니다. 노드의 역할 (매니저 또는 작업자), 상태 및 가용성을 포함합니다.

docker node inspect 명령어는 특정 노드에 대한 자세한 정보 (예: IP 주소, 리소스 및 레이블) 를 제공합니다.

docker node ps 명령어는 특정 노드에서 실행 중인 작업 및 컨테이너를 볼 수 있도록 합니다.

Swarm 노드 관리

모니터링 외에도 다양한 명령어를 사용하여 Docker Swarm 클러스터의 노드를 관리할 수 있습니다.

## 작업자 노드를 매니저 노드로 승격
docker node promote worker-node

## 매니저 노드를 작업자 노드로 강등
docker node demote manager-node

## 노드 레이블 업데이트
docker node update --label-add label=value node-name

## 노드 격리 (새 작업 스케줄링 방지)
docker node update --availability drain node-name

## 노드 다시 활성화
docker node update --availability active node-name

docker node promotedocker node demote 명령어는 swarm 내 노드의 역할을 변경할 수 있습니다.

docker node update 명령어를 사용하여 노드의 레이블을 추가, 수정 또는 제거할 수 있습니다. 레이블은 작업을 스케줄링할 때 특정 제약 조건이나 기본 설정을 적용하는 데 사용될 수 있습니다.

docker node update --availability drain 명령어는 노드를 일시적으로 서비스에서 제외하고 새 작업이 해당 노드에 스케줄링되지 않도록 합니다. 이는 노드에서 유지 관리 또는 업그레이드를 수행하는 데 유용합니다.

Swarm 상태 백업 및 복원

Docker Swarm 클러스터의 상태를 정기적으로 백업하여 문제 또는 오류로부터 복구할 수 있도록 하는 것이 중요합니다. 백업 데이터를 사용하여 새 swarm 을 초기화하려면 docker swarm init --force-new-cluster 명령어를 사용할 수 있습니다.

이러한 Swarm 노드 관리 및 모니터링 최선의 방법을 따르면 컨테이너화된 애플리케이션의 안정성과 복원력을 보장할 수 있습니다.

요약

이 튜토리얼을 마치면 Docker swarm 클러스터에 노드를 추가하는 방법에 대한 확실한 이해를 얻게 됩니다. Docker 인프라를 확장하여 애플리케이션이 증가하는 작업 부하를 처리하고 서비스의 고가용성을 제공할 수 있게 됩니다. 이 지식은 Docker 기반 솔루션을 계속 구축하고 관리하는 데 매우 귀중할 것입니다.