TIL(2020.12.13)

Awesome·2020년 12월 20일
0

TIL

목록 보기
44/46

Docker

udemy - Docker Mastery: with Kubernetes +Swarm from a Docker Captain

Swarm Intro and Creating a 3-Node Swarm Cluster

Docker Swarm 개념

컨테이너를 사용하여 어떤 환경에서든 쉽게 배포할 수 있게 되었지만, 이로 인해 또다른 문제가 생겨났다.

  • 컨테이너의 lifecycle 을 자동화하는 방법
  • 컨테이너 규모를 손쉽게 조절하는 방법
  • 컨테이너에 문제가 발생했을 때, 재실행하는 방법
  • 컨테이너가 동작을 멈추지 않고 업데이트하는 방법
  • 각각의 컨테이너에 필요한 환경변수들을 올바르게 저장하는 방법

위와 같이 다양한 문제들을 해결하기 위해 여러 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 Swarm 설정

docker info

Swarm: inactive 가 확인된다. Swarm 을 구성하기 위해 init 해준다.

init 하는 순간 여러가지 환경이 구성된다.

docker node ls

생성된 Manager node 를 확인할 수 있다.

service 를 생성하면 아래와 같이 자동으로 name이 부여되고 서비스가 생성된다.

현재 생성된 서비스를 업데이트하여 task 복사본 3개를 생성하였다.

위와 같이 3개의 task가 생성되었고, 모두 running 중인 것을 볼 수 있다.


container 하나를 삭제하면 자동으로 다른 container를 실행한다. 서비스가 항상 running 상태를 유지하도록 하는 것이다. 따라서 모든 컨테이너를 삭제시키고 싶다면 서비스 자체를 삭제시켜야 한다.



Creating 3-Node Swarm: Host Options

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로 업데이트 할 수 있다.

profile
keep calm and carry on

0개의 댓글