Name
Last commit
Last update
..
.gitkeep docker swarm index init
README.md swarm init
docker-swarm-overview.png swarm init

logo

Docker Swarm 클러스터 도입검토

www.hongsnet.net 서비스에 Docker Swarm을 검토하여, 고가용성이 지원되도록 클러스터링 한다.

Docker Swarm 도입검토

www.hongsnet.net 구성검토

swarm_overview

  • Front-end(HA-PROXY)와 Back-end(Docker Swarm)간의 Health Check가 정상적으로 수행되어야 한다.
    • 이는 주로 사용되는 Overlay Network를 이용하면되며, Service Expose를 통해 외부로의 접속을 허용해주면 된다.
  • Back-end(Docker Swarm)과 DBMS 간의 통신
    • docker-proxy는 Inbound에 대한 정책이며, Outbound는 Host의 iptables Rule에 따라 컨테이너의 외부로 나갈때는 POSTROUTING chain을 거쳐, MASQUERADE 되어 외부로 나가기 때문에 문제없다. 즉, Host가 DBMS와의 통신에 문제가 없다면 이슈가 되지 않는다.

Docker Swarm 주요기능

  • 컨테이너 자동 배치 및 복제 (Deploy Replica)
  • 컨테이너 그룹에 대한 로드 밸런싱
  • 컨테이너 장애 복구
  • 클러스터 외부에 서비스 노출 (Service Expose)
  • 컨테이너 추가 또는 제거로 확장 및 축소 (Scaling)
  • 컨테이너 서비스간의 인터페이스를 통한 연결 및 네트워크 포트 노출 제어

Swarm은 K8s에서 지원하는 Auto Scaling을 지원하지 않는다.

Docker Swarm 구성요소

  • Swarm : 군중이라는 뜻처럼, 분산된 노드에서 여러 개의 컨테이너를 실행 할 수 있다. 분산된 컨테이너를 실행 할 수 있는 클러스터를 Swarm Cluster라고 한다.
  • Node : 스웜 클러스터를 구성하는 도커 서버(Host Based)
  • Manager Node : 스웜 클러스터를 관리하는 노드다. 스웜 명령어는 매니저 노드에서만 실행한다(Host Based)
  • Worker Node : 매니저 노드의 명령을 받아서 컨테이너가 만들어지는 노드(Host Based)
  • Service : 스웜의 기본 배포단위다. 예를 들어 NginX로 로드밸런서를 구축한다면, NginX로 구성된 컨테이너들이 서비스가 된다.
  • Task : 서비스의 구성단위다. 워드프레스 서비스는, 워드프레스 애플리케이션, Mysql 테스크로 구성될 것이다.

Swarm 클러스터는 Raft Concensus Algorithm을 사용한다. 이 알고리즘의 사용으로 인해, 전체 Manager의 과반수 이상이 유효한 경우, 서비스를 멈추지 않고 가동시킬 수 있다. 과반수 규칙을 지키기 위해 Manager의 수를 3, 5, 7 식으로 홀수로 구성하는 것을 권장한다.

**www.hongsnet.net**은 Manager 시스템을 3대로 구성했기 때문에 최소한의 권장사항이 충족된다.

Docker Swarm의 오케스트레이션 기능

  • 스케쥴링(Scheduling) : 수동으로 각 Node에서 컨테이너를 기동할 필요없이, 미리 정의한 설정에 따라 컨테이너를 각 Worker Node에 배포한다.
  • 롤링 업데이트(Rolling Update) : 현재 기동되어 있는 컨테이너의 이미지를 업데이트할 때 각 컨테이너를 차례대로 업데이트한다.
  • 스케일링(Scaling) : 클러스터 내에 기동되어 있는 컨테이너 수를 조정하는 기능을 한다.
  • 로깅(Logging) : 다른 노드에서 실행중인 서비스에 대한 로그까지 확인할 수 있다.