📢 여러 대의 서버 또는 인스턴스에서 도커 컨테이너를 실행하면서 그들 사이의 통신을 원활하게 하기 위해서는 Docker Swarm, Kubernetes와 같은 오케스트레이션 도구를 사용하는 것이 일반적!
이러한 도구들은 여러 대의 서버에 걸친 컨테이너 관리와 네트워킹, 스케일링 등을 쉽게 할 수 있도록 돕는다.
컨테이너 오케스트레이션은 많은 컨테이너들을 잘 관리하고 운영하기 위한 도구나 기술을 말한다.
컨테이너는 애플리케이션을 실행하는 방법 중 하나로, 애플리케이션과 그것을 실행하는 데 필요한 모든 것들(라이브러리, 시스템 도구 등)을 포장해 놓은 것을 의미한다.
오케스트레이션의 주요 목적은 다음과 같다:
배치: 적절한 서버에 컨테이너를 배치한다.
스케일링: 필요에 따라 컨테이너 다운 애플리케이션의 수를 늘리거나 줄인다.
네트워크 구성: 각각의 컨테이너다운 애플리케이션이 서로 통신할 수 있도록 네트워크를 설정한다.
장애 복구: 어떤 문제가 발생하면 자동으로 복구하도록 합니다.
Kubernetes
와 Docker Swarm
같은 도구들은 이런 일들을 자동으로 해주는 프로그램들이다. 이런 도구들 없으면 많은 컨테이너를 일일히 손으로 관리해야 하기 때문에 굉장히 번거롭고 어렵다. 그래서 대규모 시스템에서는 이런 오케스트레이션 도구가 거의 필수적으로 사용된다.
cf. 💡 오케스트레이션과 컨테이너 오케스트레이션
오케스트레이션(Orchestration)
은 일반적으로 여러 컴포넌트 또는 서비스가 함께 작동하도록 조정하고 관리하는 프로세스를 의미한다.
컨테이너 오케스트레이션(Container Orchestration)
은 특정 시스템에서 여러 컨테이너의 배치, 네트워크 구성, 스케일링 및 장애 복구 등을 자동화하는 과정을 의미합니다. 즉, 컨테이너 오케스트레이션은 오케스트레이션의 하위 개념으로 보아도 무방하며 특별히 컨테이너 기반의 서비스 운영에 초점을 맞춘다.
따라서 주요 차이점은 "오케스트레이션"은 일반적인 조율 및 관리 프로세스를 설명하는 반면, "컨테이너 오케스트레이션"은 그 프로세스가 특별히 컨테이너다운 환경에서 이루어진다는 점이다.
Kubernetes
와 Docker Swarm
같은 도구들은 대형 시스템에서 수천 개의 컨테이너다운 애플리케이션을 관리하기 위해 사용되는 대부분의 주요 컨테인너 오케스트레이션 솔루션이라 할 수 있다.
💡 오케스트레이션 도구를 사용하면 여러 대의 서버 또는 인스턴스 간에 실행되고 있는 모든 서비스를 한 곳에서 관리할 수 있으며, 자동 스케일링(scale-out), 로드 밸런싱(load balancing), 네트워크 설정 등 많은 기능들을 제공하여 운영 부담을 줄여준다.
복잡성 :
Docker Swarm은 Kubernetes보다 설정과 관리가 상대적으로 간단하다. 만약 복잡한 설정 없이 간단하게 서비스들을 여러 대의 서버에서 운영하고 싶다면 Docker Swarm을 선택하는 것이 좋다.
기능 :
반면, Kubernetes는 많은 기능들(오토 스케일링, 롤링 업데이트 등)과 큰 커뮤니티를 가지고 있으며, 많은 클라우드 제공 업체들이 Kubernetes 지원 옵션을 제공한다.
규모 :
규모가 작고 간단한 프로젝트에서는 Docker Swarm이 적합할 수 있으나, 대규모 시스템에서는 Kubernetes가 더 나은 성능과 유연성을 제공한다.
❗ Docker Swarm, Kubernetes 는 내장된 로드 밸런싱 기능을 제공하여 여러 서비스 인스턴스 간에 부하를 분산시킬 수 있다.
Docker Swarm을 설정하고 사용하는 기본적인 방법을 알아보자
관리자 노드에서 다음 명령어를 실행하여 Docker Swarm을 초기화
docker swarm init --advertise-addr <MANAGER-IP>
✅ 여기서 < MANAGER-IP > 는 관리자 노드의 IP 주소
docker swarm init 명령어를 실행한 후에 출력되는 결과 중 docker swarm join 명령어를 복사하여 작업자 노드가 될 다른 인스턴스에서 실행
❗이 작업은 해당 인스턴스를 워커 노드로 추가하는 것
예시)
Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.99.100:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
✅ 여기서 아래부분만 저장하기
docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.99.100:2377
모든 작업자 노드가 정상적으로 Swarm에 참여되었는지 확인하기 위해, 관리자 노드에서 다음 명령어를 실행
docker node ls
새로운 서비스 생성
docker service create --replicas <N> --name <SERVICE_NAME> --publish published=<PUBLISHED_PORT>,target=<TARGET_PORT> <IMAGE>
현재 실행 중인 모든 서비스와 그 상태를 보여주는 명령어
docker service ls
실행 중인 서비스의 복제본 수를 변경
docker service update --replicas <N> <SERVICE-ID>
특정 서비스를 삭제
docker service rm <SERVICE-ID>