- toc {:toc}
Swarm
[Fig1]
-
Docker Swarm : Orchestrator
-
100~1000개 정도의 컨테이너라면 충분히 Swarm으로 동작 가능하다.
-
중앙집중형 제어장치이다.
-
Container Orchestration : 배포, 관리, 자원 할당, 네트워킹, 이용가능성을 중앙 통제를 통해 자동화하는 과정이다.
-
주 목적 : 관리, 모니터링을 하고, 자동화를 통해서 능률이 증가하도록 한다.
- 과거에는 수동으로 전부 배포했어야 했기에 APP 배포가 매우 어려웠으나 이를 자동화를 통해 쉽게 만들었다.
-
Container orchestration → 작업량을 간소화한다.
- 사용자는 더 이상 기술적 문제를 다룰 필요가 없다.
- 더 많은 컨테이너들의 그룹들과 동시에 상호작용할 수 있다.
- 컨테이너 등록을 계획하고 구현할 수 있다.
- 네트워크, 스토리지, 보안 등을 모두 제공 가능하다.
[Fig2]
-
Container Orchestration History
-
2009년 Mesos 연구 프로젝트로 시작, 버클리 대학에서 시작.
-
2010 - Guest OS over Host OS 문제
-
2015년에 쿠버네티스 버전 1.0 출시, Docker Swarm 1.0 출시 (2013에는 개발시작하지 않았을까?)
-
오래되지 않은 분야이다.
-
Docker Swarm : Container Orchestration을 위한 도구이다.
- 다수의 도커 컨테이너를 하나의 서비스로 다루고 조종한다.
- Manager, Worker 지정, Worker → Manager에게 등록, Manager가 Worker 장악
-
Docker를 실행하는 머신의 그룹을 말한다.
-
다수의 도커 호스트로 구성되어 있다.
-
노드의 역할과 연결
- Manager
- 멤버쉽 등의 논리적 연결을 만들어 Worker들을 관리한다.
- Worker 노드와 같이 컨테이너를 실행할 수 있다.
- Workers (Nodes) : Swarm 서비스를 실행한다.
- join 명령어 : 매니저와 연결하여 매니저에 등록한다.
- leave 명령어 : 등록된 Worker를 매니저와 분리된다.
- Manager
-
Task : Swarm 매니저에 의해 관리되고 Swarm 서비스의 부분으로 실행 중인 컨테이너이다.
-
Node : Swarm에 참여한 도커 엔진의 인스턴스이다.
- Manager Nodes : worker node에 task를 보내준다.
- Worker Nodes : task를 매니저로부터 받고 실행한다.
[Fig3]
docker-machine ssh {manager name} docker swarm init --advertise-addr {manager ip}
-
advertise → 내가 Manager 라는 것을 알리고 Manager가 되기 위한 초기화를 한다.
-
Manager의 Worker로 들어가고 싶은 경우 join과 토큰을 통해 해당 Manager의 일꾼으로 등록한다.
-
Manager와 Worker 노드 사이의 포트 번호 2377, 2376 중 하나가 열려 있어야 한다. 이 포트를 통해서 docker swarm init, docker swarm join을 실행하여 연결하기 때문이다. (물리적으로 떨어져 있는 컴퓨터들을 클러스터링할 때 네트워크 제한을 받기 때문에 포트를 열어줘야 한다.)
-
Docker-Machine Task Deployment
-
scp → 파일을 상대방에게 복사할 수 있다. 매니저에게 docker-compose.yml 파일 전송하기
-
stack deploy → 실행
-
기본적으로 Worker에게 나눌 때는 Round Robin, 공평하게 나누어 전달한다.
cf) Label
- key value의 형태로 값을 준다.
- 범주화하기 위한 일종의 태그를 붙이는 것과 같다.
- Docker Object Labels : Docker object에 메타데이터를 적용하기 위한 매커니즘
- Key는 특수하고 Value는 여러 개일 수 있다.
- Url을 뒤집은 형태로 범주화하여 나눌 수 있다. (.과 - 사용)
- 시작시 대부분 소문자로 시작하고 끝나는 경우도 소문자로 끝낸다.
- e.g., com.example.some-label
- 연속적인 .과 -은 허용되지 않는다.
- namespace 필드는 . 에 의해 분리된다.
- DNS notation의 역순
- 그룹들로 나누어 명령어를 줄 수 있기 때문에 사용한다.
참고문헌
- [Fig1] : https://subscription.packtpub.com/book/virtualization_and_cloud/9781786469755/1
- [Fig2] : https://scoutapm.com/blog/container-orchestration-in-2019
- [Fig3] : https://www.slideshare.net/Docker/docker-swarmmikegoelzermvmeetup45minworkshop-02242016-1-58805924