Home Docker Swarm
Post
Cancel

Docker Swarm

Docker Swarm

여러대 서버를 묶을 때 고려사항

  • 1) 새로운 서버나 컨테이너를 발견(Discovery)
  • 2) 스케줄러와 로드밸런서
  • 3) 클러스터 내 서버 다운시 고가용성

-> docker swarm, swarm mode 가 나오게 됨

Docker Swarm? Swarm Mode!

docker swarm

docker swarm은 swarm classic 이라고도 한다. swarm classic은 여러대의 도커를 하나의 컨테이너에서 접근 가능하게 했지만, 분산 코디네이터를 별도로 구성해야 하는 단점이 있다. 현재는 docker reference에도 Legacy로 언급될 만큼 유지보수는 이루어지고 있지 않다.

swarm mode!

swarm mode는 마이크로서비스 아키텍처 컨테이너를 다루는 클러스터링에 집중했다. 일반적으로 이 swarm mode를 많이 사용한다. 분산 코디네이터 또한 내부적으로 가지고 있다.

Swarm Mode!

swarm mode는 매니저 노드와 워커 노드로 구성되어 있다. 매니저 노드는 다중화, 홀수개로 구성하는 것이 권장사항이며, 절반 이상이 장애가 생겨 클러스터가 정상적으로 작동하지 못할 경우 해당 노드들이 복구될 때까지 클러스터의 운영을 중단한다.

Swarm Mode 클러스터 구축

구현 실습

Swarm Mode Service

Service는 Swarm Mode에서 제어하는 같은 이미지에서 생성된 컨테이너(Task)의 집합을 말한다. 이때 swarm scheduler는 서비스 정의에 따라 컨테이너를 할당할 적합한 노드를 선정하고 할당한다. 이때 함께 생성된 컨테이너를 replica 라고 하며 서비스에 설정된 replica 수만큼의 컨테이너가 스웜 클러스터 내에 존재해야 한다. 이미지를 일괄 적으로 업데이트 할 때 서비스는 Rolling Update 기능도 제공한다.

서비스 생성

생성 실습 replica 옵션 추가해서 Nginx 웹 서버 이미지를 이용해 서비스를 외부에 노출. docker service scale을 이용하면 replica set의 수를 늘리거나 줄일 수 있다.

  • replicated mode
  • global mode

서비스 장애 복구

특정 노드가 다운되면 스웜 매니저는 새로운 컨테이너를 생성해 자동으로 이를 복구한다. 만약 노드가 다운되는 경우, 장애복구를 위해 이미 다른 노드로 옮겨진 컨테이너는 다운된 노드가 회복된다 해도 rebalance 작업이 이뤄지지는 않는다.

서비스 롤링 업데이트

매우 간단하게 사용가능하다. service update 명령어로 가능. 혹은 서비스를 생성할 때 롤링 업데이트의 주기, 업데이트를 동시에 진행할 컨테이너의 개수 등을 설정할 수 있다.

서비스 설정정보 전달

서버 호스트마다 설정파일을 마련해두는 것은 매우 비효율적이며, 변경사항이 있을 경우마다 업데이트 하는 것도 쉽지 않다.

  • secret : 생성된 secret은 조회해도 실제 값을 확인 할 수는 없다. 매니저 노드간에 암호화된 상태로 저장된다. 휘발성이다. 대신 특정 경로로 컨테이너들이 접근이 가능한 형태여야 한다.

  • config : secret과 동일하나 인코딩된 값을 디코딩하면 원래의 값을 확인할 수 있다는 점이 차이점이다.

Swarm Network

Swarm 모드에서는 여러개의 도커 엔진에 같은 컨테이너를 분산해서 할당하기 때문에각 도커 데몬의 네크워크가 하나로 묶인 네트워크 풀이 필요하다. 목록을 보면 docker-gwbridge와 ingress 네크워크가 추가로 생성되어있다.

  • docker gwbridge : 스웜에서 오버레이 네크워크를 사용할 떄 사용. 외부로 나가는 통신 및 오버레이 네트워크의 트래픽 종단점(VTEP) 역할을 담당한다.
  • ingress : routing mesh -> round-robin 방식으로 분산(load-balancing) 에 사용 -> ingress는 오버레이(overlay) 네트워크를 사용한다. 오버레이 네트워크는 여러개의 도커 데몬을 하나의 네트워크 풀로 만드는 네트워크 가상화 기술을 뜻한다.

서비스 Discovery

서비스에 대한 컨테이너의 발견(Discovery)는 스웜모드 자체적으로 지원된다. VIP를 통해 내부에서 실제 server 서비스의 컨테이너의 IP까지 포워딩된다. DNS 기능 또한 사용 가능하지만 cache 문제로 서비스 발견이 정상적이지 않을때가 있으므로 VIP를 사용하는 것이 좋다.

서비스 볼륨

서비스를 생성할 때 도커 볼륨을 사용할 지 호스트와 디렉터리를 공유할 지 명시해야 한다. 실질적으로 스웜모드에서 볼륨은 권장되는 방식이 아니다. 외부에 별개로 존재하는 퍼시스턴트 스토리지(persistent storage)를 사용한다.

Docker Swarm Mode Controll

스웜 클러스터에 노드를 추가하는 것 뿐 아니라 노드를 다루기 위한 전략도 존재한다.

Node Availability

특정 노드의 Availability를 변경하면 컨테이너의 할당 가능 여부를 변경할 수 있다. 그 외 Active(새로운 노드가 스웜 클러스터에 추가되면 기본적으로 설정되는 상태), Drain(스웜 매니저의 스케줄러는 컨테이너를 해당 노드에 할당하지 않는다.), Pause(서비스의 컨테이너를 더는 할당받지 않는다+실행중인 컨테이너가 중지되지는 않는다) 상태가 있다.

Node Label

노드 분류를 의미한다. key-value 형태를 가지고 있다. 특정 노드에만 컨테이너를 할당할 수 있다. 노드ID나 호스트이름, 도커데몬의 라벨 등으로도 제약조건 설정이 가능하다.

This post is licensed under CC BY 4.0 by the author.