도서 시작하세요! 도커/쿠버네티스 내용 정리
단일 호스트내에서의 도커 엔진 구동이 아닌 여러 대의 서버를 하나의 자원 풀로 만들어 사용하기 위해서는 다음과 같은 문제를 해결해야 한다
✔️ 새로운 서버나 컨테이너가 추가됐을 때 이를 발견하는 작업
✔️ 어떤 서버에 컨테이너를 할당할 것인가에 대한 스케줄러와 로드밸런서 문제
✔️ 클러스터 내의 서버가 다운됐을 때 고가용성을 어떻게 보장할지 등의 문제
이러한 문제를 해결하는 솔루션을 오픈소스로 활용할 수 있는데 이 가운데 도커에서 공식적으로 제공하는 것이 도커스웜(Docker swarm)과 스웜모드(swarm mode)
스웜 클래식과 스웜 모드는 여러 대의 도커 서버를 하나의 클러스터로 만들어 컨테이너를 생성하는 여러 기능을 제공한다.
PaaS 와 같은 용도로 도커 서버 클러스터링을 고려하고 있다면 가장 먼저 접근하기 좋은 방법은 도커 스웜 모드
실제 운영 환경에서 많이 쓰이지는 않음
항목 | 스웜 클래식(Swarm classic) | 스웜 모드(Swarm mode) |
---|---|---|
버전 | 도커 버전 1.6 이후부터 사용 가능 | 도커 버전 1.12 이후부터 사용 가능 |
주요기능 | 여러 대의 도커 서버를 하나의 지점에서 사용하도록 단일 접근점을 제공함 | 마이크로서비스 아키텍처의 컨테이너를 다루기 위한 클러스터링 기능에 초점 |
세부기능 | docker run, docker ps 등 일반적인 도커 명령어와 도커 API로 클러스터의 서버를 제어하고 관리할 수 있는 기능을 제공함 | 같은 컨테이너를 동시에 여러개 생성해 필요에 따라 유동적으로 컨테이너의 수를 조절할 수 있으며, 컨테이너로의 연결을 분산하는 로드밸런싱 기능을 자체적으로 지원 |
분산 코디이터 | 분산 코디네이터, 에이전트 등이 별도로 실행돼야 함 | 클러스터링을 위한 모든 도구ㅏ 도커 엔진 자체에 내장되어 있음 |
비교 | 공식 문서에서도 레거시로서 언급하고 있으며 유지보수가 활발히 이루어지고 있지 않은 프로젝트 | 서비스 확장성과 안정성 등 여러 측면에서 뛰어남 |
도커 엔진 자체에 내장돼 있기 대문에 docker info 명령어를 통해 도커 엔진의 스웜 모드 클러스터 정보를 확인할 수 있음
# docker info | grep swarm
Swarm: inactive
매니저 노드와 워커 노드로 구성.
매니저 노드
워커 노드를 관리하기 위한 도커 서버, 워커 노드의 역할을 포함 함
운영 환경에서는 매니저 노드를 다중화 하는 것을 권장
매니저 노드는 홀수개로 다중화 하여 과반수 이상이 유지되는 쿼럼(quorum) 매니저에서 운영을 계속 할 수 있기 때문에 홀수 구성이 권장됨
워커 노드
실제로 컨테이너가 생성되고 관리되는 도커 서버
매니저노드는 1개 이상 필수지만 워커 노드는 없을수도 있음.
✔️ 스웜모드에서의 제어 단위
✔️ 같은 이미지에서 생성된 컨테이너의 집합
✔️ 서비스 내에 컨테이너는 1개 이상 존재할 수 있음
✔️ 서비스 내의 컨테이너들을 Task 라고 부름
✔️ 롤링 업데이트 기능 지원
레플리카(replica)
서비스 내에서 설정으로 정의하며 단일 이미지에서 생성된 컨테이너의 수
롤링 업데이트(Rolling Update)
서비스 내 컨테이너들의 이미지를 일괄적으로 업데이트해야 할 때 컨테이너들의 이미지를 순서대로 변경해 서비스 자체가 다운되는 시간 없이 컨테이너의 업데이트를 진행할 수 있음
서비스를 제어하는 도커 명령어는 매니저 노드에서만 사용 가능함
복제모드
레플리카셋의 수를 정의해 그만큼의 같은 컨테이너를 생성하는 복제모드(replicated)
global 서비스 생성
스웜 클러스터 내에서 사용할 수 있는 모든 노드에 컨테이너를 반드시 하나씩 생성하는 모드. 따라서 글로벌 모드로 생성한 서비스는 레플리카 셋의 수를 별도로 지정하지 않음
(스웜 클러스터를 모니터링하기 위한 에이전트 컨테이너 등을 생성해야 할 때 유용함)