책)시작하세요! 도커/쿠버네티스

leesj·2022년 3월 14일
0

Docker

목록 보기
5/5

도서 시작하세요! 도커/쿠버네티스 내용 정리

3️⃣ 도커 스웜

3.1.도커 스웜을 사용하는 이유

단일 호스트내에서의 도커 엔진 구동이 아닌 여러 대의 서버를 하나의 자원 풀로 만들어 사용하기 위해서는 다음과 같은 문제를 해결해야 한다

✔️ 새로운 서버나 컨테이너가 추가됐을 때 이를 발견하는 작업
✔️ 어떤 서버에 컨테이너를 할당할 것인가에 대한 스케줄러와 로드밸런서 문제
✔️ 클러스터 내의 서버가 다운됐을 때 고가용성을 어떻게 보장할지 등의 문제

이러한 문제를 해결하는 솔루션을 오픈소스로 활용할 수 있는데 이 가운데 도커에서 공식적으로 제공하는 것이 도커스웜(Docker swarm)과 스웜모드(swarm mode)

3.2.스웜 클래식과 도커 스웜모드

스웜 클래식과 스웜 모드는 여러 대의 도커 서버를 하나의 클러스터로 만들어 컨테이너를 생성하는 여러 기능을 제공한다.
PaaS 와 같은 용도로 도커 서버 클러스터링을 고려하고 있다면 가장 먼저 접근하기 좋은 방법은 도커 스웜 모드
실제 운영 환경에서 많이 쓰이지는 않음

항목스웜 클래식(Swarm classic)스웜 모드(Swarm mode)
버전도커 버전 1.6 이후부터 사용 가능도커 버전 1.12 이후부터 사용 가능
주요기능여러 대의 도커 서버를 하나의 지점에서 사용하도록 단일 접근점을 제공함마이크로서비스 아키텍처의 컨테이너를 다루기 위한 클러스터링 기능에 초점
세부기능docker run, docker ps 등 일반적인 도커 명령어와 도커 API로 클러스터의 서버를 제어하고 관리할 수 있는 기능을 제공함같은 컨테이너를 동시에 여러개 생성해 필요에 따라 유동적으로 컨테이너의 수를 조절할 수 있으며, 컨테이너로의 연결을 분산하는 로드밸런싱 기능을 자체적으로 지원
분산 코디이터분산 코디네이터, 에이전트 등이 별도로 실행돼야 함클러스터링을 위한 모든 도구ㅏ 도커 엔진 자체에 내장되어 있음
비교공식 문서에서도 레거시로서 언급하고 있으며 유지보수가 활발히 이루어지고 있지 않은 프로젝트서비스 확장성과 안정성 등 여러 측면에서 뛰어남

3.3.스웜모드

도커 엔진 자체에 내장돼 있기 대문에 docker info 명령어를 통해 도커 엔진의 스웜 모드 클러스터 정보를 확인할 수 있음

# docker info | grep swarm
Swarm: inactive

3.3.1.도커 스웜모드의 구조

매니저 노드와 워커 노드로 구성.

매니저 노드
워커 노드를 관리하기 위한 도커 서버, 워커 노드의 역할을 포함 함
운영 환경에서는 매니저 노드를 다중화 하는 것을 권장
매니저 노드는 홀수개로 다중화 하여 과반수 이상이 유지되는 쿼럼(quorum) 매니저에서 운영을 계속 할 수 있기 때문에 홀수 구성이 권장됨

워커 노드
실제로 컨테이너가 생성되고 관리되는 도커 서버

매니저노드는 1개 이상 필수지만 워커 노드는 없을수도 있음.

3.3.2.스웜 모드 클러스터 구축

3.3.3.스웜 모드 서비스

3.3.3.1.스웜 모드 서비스 개념

✔️ 스웜모드에서의 제어 단위
✔️ 같은 이미지에서 생성된 컨테이너의 집합
✔️ 서비스 내에 컨테이너는 1개 이상 존재할 수 있음
✔️ 서비스 내의 컨테이너들을 Task 라고 부름
✔️ 롤링 업데이트 기능 지원

레플리카(replica)
서비스 내에서 설정으로 정의하며 단일 이미지에서 생성된 컨테이너의 수

롤링 업데이트(Rolling Update)
서비스 내 컨테이너들의 이미지를 일괄적으로 업데이트해야 할 때 컨테이너들의 이미지를 순서대로 변경해 서비스 자체가 다운되는 시간 없이 컨테이너의 업데이트를 진행할 수 있음

3.3.3.2.서비스 생성

서비스를 제어하는 도커 명령어는 매니저 노드에서만 사용 가능함

복제모드
레플리카셋의 수를 정의해 그만큼의 같은 컨테이너를 생성하는 복제모드(replicated)

global 서비스 생성
스웜 클러스터 내에서 사용할 수 있는 모든 노드에 컨테이너를 반드시 하나씩 생성하는 모드. 따라서 글로벌 모드로 생성한 서비스는 레플리카 셋의 수를 별도로 지정하지 않음
(스웜 클러스터를 모니터링하기 위한 에이전트 컨테이너 등을 생성해야 할 때 유용함)

0개의 댓글