udemy - Docker Mastery: with Kubernetes +Swarm from a Docker Captain
컨테이너를 사용하여 어떤 환경에서든 쉽게 배포할 수 있게 되었지만, 이로 인해 또다른 문제가 생겨났다.
위와 같이 다양한 문제들을 해결하기 위해 여러 docker host 들을 마치 하나인 것처럼 다룰 수 있게 해주는 오케스트레이션 도구가 개발된다.
Swarm Mode
와 같이 다중 컨테이너 패키지 어플리케이션을 배포하는 동안 사용되는 컨테이너, 리소스의 자동화, 정렬, 조정 및 관리를 하는 것을 container orchestration
이라고 한다.
Docker Swarm 은 2014년 시작된 Orchestration 도구를 말하는 동시에 2016년 버전 1.12 부터 시작된 Swarmkit의 기능을 말하기도 한다. 이 두 가지는 동일한 기능을 하지만 별개의 프로젝트로 존재한다.
1.12 버전 이전은 Docker와 독립되어 있었으나, 그 이후 Swarmkit은 Docker 에 built-in 되었다.
해당 강의에서는 bulit-in 된 Docker Swarm Mode
에 대해서 알아본다.
Swarm Mode
는 Manager 와 Worker 로 구분할 수 있으며, 각 Manager는 swarm을 통해서 각 worker와 통신할 수 있는 권한을 갖는다. 접근이 허락된 Manager 만이 Worker와 통신하며 정보를 주고 받을 수 있다.
분산 시스템에서 환경을 공유하는 알고리즘을 consensus algorithm
이라고 하며 docker swarm 은 Raft 라는 알고리즘을 통해 swarm 안에서 환경을 공유한다. 앞서 봤던 것 처럼 Manager 는 클러스터 상태 유지, 스케줄링, Swarm mode HTTP API endpoints 제공 등의 역할을 한다.
Worker 는 Manager에 의해서 할당된 Task를 수행하는 역할을 한다.
Docker Engine 을 Swarm Mode 에 참여시키면(Docker swarm mode를 시작하게 되면), 서비스를 생성한다. 서비스는 사용자가 Dockr swarm 에게 단위 업무를 할당하는 논리적 단위로, Swarm 에 의해서 여러 Task로 분할되어 처리된다. 그리고 분할된 Task 는 각각의 컨테이너와 1:1 로 매칭된다.
서비스를 생성하면 사용자는 기존 docker api가 아닌 새로운 Swarm API 를 통해서 Manager와 통신하게 되고, Manager가 각각의 task를 Worker에게 할당하는 방식으로 동작한다.
docker info
Swarm: inactive
가 확인된다. Swarm 을 구성하기 위해 init 해준다.
init 하는 순간 여러가지 환경이 구성된다.
docker node ls
생성된 Manager node 를 확인할 수 있다.
service 를 생성하면 아래와 같이 자동으로 name이 부여되고 서비스가 생성된다.
현재 생성된 서비스를 업데이트하여 task 복사본 3개를 생성하였다.
위와 같이 3개의 task가 생성되었고, 모두 running 중인 것을 볼 수 있다.
container 하나를 삭제하면 자동으로 다른 container를 실행한다. 서비스가 항상 running 상태를 유지하도록 하는 것이다. 따라서 모든 컨테이너를 삭제시키고 싶다면 서비스 자체를 삭제시켜야 한다.
3개의 linux 환경에서 각각의 node를 swarm을 통해 관리하는 방법을 실습해본다.
이를 위해 docker machine 과 virtual box를 설치한다.
docker machine 은 하나의 호스트 머신이 아닌 여러대의 호스트 머신에서 Docker의 실행 환경을 명령으로 자동 생성하기 위한 툴 이다.
세 개의 linux 환경을 만들고 docker swarm 을 생성한다.
node1 에서 발급된 token 을 통해 node2 에서 swarm 에 join 한다. 최초 worker 로 swarm 에 합류한다. worker는 swarm command를 사용할 수 없다. 따라서 manager로 업데이트 해줘야 한다.
swarm 에 합류하기 위한 join token 은 아래와 같이 command를 통해서 언제든지 확인할 수 있다.
위와 같은 방식으로 node3 도 swarm에 합류하여 Manager로 업데이트 할 수 있다.