도커 서버 클러스터링의 이점
: 새로운 컨테이너를 할당, 발견 작업, 스케줄링과 LB, HA 보장 등
도커 스웜이란?
: 도커 서버 클러스터링 중 하나. 배포된 컨테이너들 관리를 자동화하기 때문에 컨테이너 오케스트레이션이라고도 불린다.
- 스웜 클래식: 단일 접근점에 초점. 도커 ver 1.6~ 사용가능하나, 공식문서에 의하면 레거시이므로 스웜 모드를 사용하는 것이 좋다.
- 스웜 모드: 일반적으로 말하는 스웜. 클러스터링에 초점.
- 유동적으로 컨테이너 수 조절, 서버 발견, LB 등을 지원한다.
도커 스웜(스웜 모드)
매니저 노드
- 워커 노드에 서비스를 배포하고 관리하는 역할. 스웜 명령어는 매니저 노드에서 가능하다.
- 1개의 리더와 n-1개의 매니저노드가 존재한다. 리더 장애 발생 시 리더를 재선출한다.
- 네트워크 파티셔닝, 투표를 위해 홀수개의 노드로 띄워놓는다. (Raft Consensus)
- 워커 노드의 역할도 수행할 수 있지만 구분해 사용하는 것이 권장.
워커 노드
: 매니저 노드의 명령을 받으며, 실제 서비스를 제공하기 위한 애플리케이션들을 띄워놓는다.
서비스
- 서비스 내에는 1개 이상의 컨테이너(태스크)가 존재할 수 있다.
- 서비스에 설정한 레플리카 수만큼 컨테이너가 스웜 클러스터 내에 존재한다.
- 특정 노드가 다운되면 해당 노드에 존재하던 레플리카는 다른 노드에 새로운 컨테이너를 생성한다.
- 스웜 클러스터에 서비스가 배포되면 클러스터 내의 어떤 노드를 통해 접근해도 서비스로 접근이 가능하다. 이 때 접근될 컨테이너는 RR 방식으로 결정된다.
롤링 업데이트: 무중단 배포를 위해 서버를 하나씩 재시작하고 삭제하는 매커니즘
서비스 모드
- replica mode: 레플리카셋의 수를 정의해 그만큼 컨테이너를 복제하는 모드. default
- 노드 장애 발생 시 매니저가 컨테이너를 생성해 자동으로 복구한다. 노드가 회복되어도 재균형(rebalancing)은 되지 않는다. 재균형을 위해서는 scale-in 후 scale-out을 수행해야한다.
- global: 모든 노드에 컨테이너를 하나씩 생성하는 모드.
- 스웜 클러스터를 모니터링하기 위한 에이전트 컨테이너 등을 생성할 때 적합하다.
secret, config
: 이미지에 설정을 정의할 수 있으나, 유연성을 위해 secret, config를 생성해 서비스에 적용시킨다.
네트워크
- ingress: 스웜 클러스터에 자동으로 등록되는 네트워크. 어떤 스웜 노드에 접근하더라도 컨테이너에 접근할 수 있도록 라우팅 메시 구성. (RR 방식)
- overlay network 드라이버를 사용한다: 여러 도커 데몬에 존재하는 컨테이너가 서로 통신 가능하다.
서비스 디스커버리
: 오버레이 네트워크를 사용하는 서비스는 VIP(Virtual IP)를 갖고, 도커엔진의 내장 DNS 서버는 호스트 이름을 IP로 변환한다. 따라서, 새로운 서비스가 생성되어도 서비스의 주소를 알 필요 없이 호스트 이름을 통해 접근이 된다.
볼륨
- 도커 볼륨 or 호스트 디렉터리 공유인지를 type을 명시해야한다.
- 호스트마다 볼륨을 맵핑해줘야 하는데 이 방법 보다는 서드파티 플러그인 혹은 nfs, dfs 등 persistenct storage를 사용하는 것이 좋아보인다.
스택 ?
: 컨테이너들을 하나의 yaml로 관리하며 한번에 띄우기 위한 목적으로 docker-compose
를 사용하는데, 컴포즈 파일을 대상으로 docker stack deploy -c docker-compose.yml myStack
과 같이 명령어를 주면 해당 컴포즈를 스웜으로 배포한다.
노드 다루기
- AVAILABILITY: Active(서비스 할당가능), Drain(할당 불가, 기존 서비스 이관), Pause(할당 불가, 기존 서비스 유지)
- 라벨링: labels, id, host,name 등 라벨을 추가해 서비스를 배포할 노드를 분류할 수 있다.
Reference)
시작하세요! 도커 / 쿠버네티스