Cloud/Docker

# Docker Swarm 클러스터 구성

skysoo1111 2020. 10. 13. 09:46

Docker Swarm 이란 컨테이너를 관리하는 Orchestration Tool 중의 하나이다.

 

 

Orchestration Tool 이란?

컨테이너의 단순 배포 뿐만이 아니라 확장, 네트워킹 등을 자동화하여 수백 또는 수천 개의 컨테이너를 보다 효율적으로 관리할 수 있는 기능을 지원하는 도구이다.

 

Orchestration Tool

장점

단점

Docker Swarm

Docker 의 모든 기능이 내장되어 있다.

Docker 외 별도의 툴 설치가 필요하지 않다.

Orchestration Tool에 비해 다루기 쉽다.

Orchestration Tool에 비해 기능이 단순하다.

초대형 노드 클러스터링에는 무리가 있다.

Kubernates

현재 가장 많이 쓰이고 있는 툴이다.

내장된 기능이 많아 타사 툴을 따로 설치할 경우가 현저히 적다.

구성과 개념 이해에 높은 이해가 필요하다.

소규모 프로젝트에서 구축하기 쉽지 않다.

Apache Mesos

이미 대형 회사 (트위터, 넷플릭스, 우버) 서비스를 운영 중이므로 안정성이 검증 되었다.

수만 대의 물리적 시스템으로 확장 가능하도록 설계되어 있다.

Zookeeper, Hadoop 과 같은 App을 연동하여 노드 클러스터링 및 자원 최적화가 가능하다.

너무 다양한 App 과의 연동으로 무거워 질 수 있다.

설치 및 관리가 어렵고 프레임워크 추가가 필수적이다.

 

대형 프로젝트가 아닌 비교적 간단한 수준의 시스템에 적합하고 Docker 외에 별도의 툴 설치가 필요하지 않기 때문에 가볍다는 장점을 가지고 있다.

 

Docker Swarm은 Manager Worker 노드로 구성되며 각 노드는 아래의 기능을 담당한다.

  • Manager Node : 클러스터 작업 관리, 상태 유지, 스케줄링, HTTP API EndPoint
  • Worker Node : 컨테이너 실행

 

그럼 Docker Swarm 으로 클러스터링으로 구성하는 방법을 알아보자.

 

* 사전 준비 사항

  1. Docker가 설치된 서버를 준비한다. (2대이상)

Step 1. Swarm 클러스터 초기화

  • 초기화 한 서버는 Manager 노드가 된다.
  • 초기화 후 나온 토큰 값은 이후 클러스터 Join에 사용된다.
$ docker swarm init --advertise-addr <Manager 노드 IP>

Step 2. Worker 노드 추가 하기

  • Worker 노드가 될 서버에서 Swarm 클러스터 초기화 후 나온 토큰 값을 입력하여 Join을 시도한다.
$ docker swarm join --token SWMTKN-1-3i8q95cihjgjmh1060zc049ptpspntwz5opdxkbm0jvjpdonkm-21fyb5smn1xz4py22tjh2srgd <Manager 노드 IP>:2377

Step 3. Docker Swarm 노드 확인

$ docker node ls

Step 4. Swarm 클러스터에 Manager Node를 추가하는 방법

  • Manager 노드에서 Manager 용 Join 토큰 발급
$ docker swarm join-token manager

  • Manager 노드로 추가시킬 서버에서 발급 받은 토큰으로 Join 시도
$ docker swarm join --token SWMTKN-1-3i8q95cihjgjmh1060zc049ptpspntwz5opdxkbm0jvjpdonkm-500v6p57e6wvl078oay4fuse8 <Manager 노드 IP>:2377

Step 5. Docker Swarm 클러스터에 서비스 등록

$ docker service create --name testApp -p 4567:4567 subicura/whoami:1

Step 6. 등록된 서비스 확인

$ docker service ls

Step 7. 서비스 상세 확인

$ docker service ps <서비스명>

Step 8. 서비스 확장 및 축소

$ docker service scale <서비스명>=<확장 or 축소 시킬 App Count>

Step 9. 등록된 서비스 테스트

$ curl <Swarm 클러스터 IP>:<서비스 Port>

=> 서비스는 worker01 Node에만 떠있지만 Swarm 클러스터에 포함된 다른 Node들에게 서비스 요청을 하더라도 같은 결과 값을 응답해준다. 이는 Docker Swarm이 Ingress Network 방식으로 요청 값을 목적지 노드로 리다이렉트 하기 때문이다.

 

Ingress Network

  • Docker Swarm은 서비스를 외부에 쉽게 노출하기 위해 모든 Nodeingress 라는 가상 네트워크에 속해있다.
  • ingressrouting mesh 라는 개념을 가지고 있는데, 이는 하나의 Node가 서비스 포트를 오픈할 경우 클러스터 내의 다른 모든 Node 역시 해당 포트를 오픈한다.
  • 그로인해 어떤 Node에 요청을 보내도 ingress가 실제 실행 중인 NodeByPass 해준다.

 

<참고 사이트>

docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/

 

How nodes work

 

docs.docker.com

subicura.com/2017/02/25/container-orchestration-with-docker-swarm.html

 

Docker Swarm을 이용한 쉽고 빠른 분산 서버 관리

도커 스웜은 오케스트레이션 툴은 관리가 어렵고 사용하기 복잡하다는 편견을 완전히 바꿔놓았습니다. 구축 비용이 거의 들지 않고 관리 또한 쉬우며 다양한 기능을 쉽게 제공하고 가볍게 사용

subicura.com

team-platform.tistory.com/48

 

Docker : 컨테이너 오케스트레이션 개요 편

컨테이너 오케스트레이션 개요 도커 컨테이너의 갯수가 꾸준히 늘어나면 필요한 자원도 지속적으로 늘어나기 마련이다 때문에 서버 또한 여러대로 늘어날 수 있는데 한대 두대의 수준이 아니��

team-platform.tistory.com

 

'Cloud > Docker' 카테고리의 다른 글

# Docker Swarm 클러스터 모니터링  (0) 2020.10.13
# docker 설치  (0) 2019.09.06