목차
Docker Swarm
Container Orchestration Tools
- 컨테이너 오케스트레이션은 여러 클러스터 내의 마이크로 서비스를 기반으로 애플리케이션의 개별 컨테이너 작업을 조정, 관리하거나 예약하는 자동화하는 작업이다.
- 컨테이너 오케스트레이션은 컨테이너의 수명주기와 동적 환경을 관리하는 데 중점을 둔다.
- Docker Swarm, 쿠버네틱스, openshift, ...
Docker Swarm
• Cluster로 docker가 동작하고 있는 machine들의 그룹
• swarm manager에 의해 cluser 실행
• swarm에서의 machine은 physical 일수도 있고 virtual일수도 있다
• swarm에 join하면 node라고 불린다
• 도커가 공식적으로 만든 Orchestration Tool
• Orchestration Tool: 여러 호스트 서버의 컨테이너들을 배포 및 관리 위한 툴
• 쿠버네티스 대신할 도커에서 만든 컨테이너 관리 위한 툴
• 오랫동안 개발되었고(2015년 1.0버전) 1,000개 노드에 50,000개 컨테이너도 문제없이 테스트하여 안전성 검증
• 오케스트레이션 툴 다양한 기능
① 컨테이너 자동 배치 및 복제
② 컨테이너 그룹에 대한 로드밸런싱
③ 컨테이너 장애 복구
④ 클러스터 외부에 서비스 노출
⑤ 컨테이너 추가 또는 제거 이용한 확장 및 축소
⑥ 컨테이너 서비스간 인터페이스 통한 연결 및 네트워크 포트 노출 제어
• Docker Swarm 장점
① 여러 개의 Docker 호스트 함께 클러스터링하여 단일 가상 Docker 호스트 생성
② 호스트 OS에 Agent만 설치하면 간단하게 작동, 설정 쉽고 Agent 외부에 설치하지 않음
③ Docker명령어와 Compose 그대로 사용 가능
=> docker swarm은 load balancing과 high availability를 위해 사용
Docker Swarm 구조
- Manager : 전체 클러스터 관리
- Worker : 컨테이너 생성
- Manager와 Worker 각각에 daemon이 있다. daemon을 통해 서로 통신한다
- store : 전체 container에 대한 설정을 저장
- scheduler : 어느 노드에 배치할지 결정 -> 자동화되어있음
- Discovery Service : container가 제대로 작동하는지 체크(모니터링)
- Docker Client : 기본적으로 manager에게 접속. manager는 받은 명령을 worker에게 전달
Docker Swarm 용어
- Manager의 High Availability를 위해 Manager가 여러대 실행되어야 한다(홀수로 세팅)
- 1개 -> 문제 생기면 전체 shutdown, 3개 -> 1개가 문제생겨도 다른것들이 대신 동작하면됨-> 문제없음 => high availability => Fault Tolerance
- 컨테이너들이 Worker에서 생성되는것이 일반적이나 Manager에도 생성될 수 있음
Docker Swarm Service
Docker Service 배포유형
• Replicated Service: 사용자가 원하는 수만큼 Task 동일하게 생성하여 실행되는 Service
• Global Service: 모든 Node에서 하나의 Task 실행하는 Service, 미리 지정된 Task 개수 없음
• Global Service는 Monitoring Agent, Virus 백신 Scanner 또는 Swarm의 모든 Node에서 실행해야 하는 Container들
Docker Service Network - Ingress
• Service Node들간 Load Balancing 하는 Overlay Network
• Overlay => 같은 포트에 대해 모든 노드가 연결되어 있다.
• Docker Swarm의 모든 Node가 노출된 Port로 요청 받으면, 해당 요청 IPVS 모듈로 전달
• IPVS는 해당 Service에 참여하는 모든 IP 주소 추적하고 그 중 하나 선택한 뒤, 요청 해당 경로로 Routing
• Routing Mesh 개념 이용 서비스가 포트 오픈할 경우 모든 노드에 포트가 오픈되고 어떤 노드에 요청 보내도 실행 중인 컨테이너에 자동 전달
• Docker Swarm Init하거나 Join할 때 자동 생성
• IPVS: IP Virtual Server
Service Discovery
• 내부 DNS Server: 사용자가 정의한 Bridge, Overlay 및 MACVLAN Network들에게 Host 내의 모든 Container 위치 제공 -> Service Discovery
• 각 Docker Container/Docker Swarm Task에 존재하는 DNS Resolver가, DNS 쿼리 DNS Server 역할 Docker Engine으로 전달: /etc/resolv.conf
• Docker Engine은 DNS 쿼리가 요청한 Container가 Network 내에 포함되어 있는지 확인
• Docker Engine은 key-value 저장소에서 Container, Task/Service 이름과 일치하는 IP주소 조회, 해당 IP/Service Virtual IP(VIP) 요청자에게 반환
• Service Discovery는 동일한 Network에 있는 Contrainer/Task만 내장 DNS 기능 사용
• 동일한 Network에 없는 Container 서로의 주소 확인 불가
• 특정 Network에 Container/Task가 있는 Node만 해당 Network DNS 항목 저장
• 대상 Container/Service가 원본 Container와 동일한 Network에 속하지 않으면, Docker Engine은 구성된 기본 DNS Server로 DNS 쿼리 전달