Docker Machine을 이용한 Swarm 클러스터 생성

 

Docker Swarm 구축 시에 가상머신으로 노드를 띄우고자 한다면 ‘Docker-Machine’을 활용해보는 것도 좋은 옵션입니다. Docker-Machine은 가볍고 최적화된 OS 이미지로 Swarm 노드들을 생성하고 클러스터 운영/관리를 돕는 커맨드-라인 기반의 플러그인입니다.

 

사전 준비요소


Docker 서비스를 구동시키는 Docker Engine과 가상머신 생성을 위한 드라이버를 제공하는 VirtualBox나 VMware와 같은 도구가 미리 설치되어 있어야 합니다.

Install Docker Engine

 

Install Docker Engine

Learn how to choose the best method for you to install Docker Engine. This client-server application is available on Linux, Mac, Windows, and as a static binary.

docs.docker.com

Downloads – Oracle VM VirtualBox

 

Downloads – Oracle VM VirtualBox

Download VirtualBox Here you will find links to VirtualBox binaries and its source code. VirtualBox binaries By downloading, you agree to the terms and conditions of the respective license. If you're looking for the latest VirtualBox 6.1 packages, see Virt

www.virtualbox.org

 

Docker-machine 설치


# Windows
$ if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi && \
curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" && \
chmod +x "$HOME/bin/docker-machine.exe"

# Mac OS 또는 여타 다른 Linux
$ curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-`uname -s`-`uname -m` >/usr/local/bin/docker-machine && \
chmod +x /usr/local/bin/docker-machine

 

Docker-machine으로 Node 만들기


docker-machine 명령어로 Docker가 탑재된 가상의 클라이언트 호스트를 만들 수 있고, 각 Docker 클라이언트에 Docker 명령을 실행할 수 있습니다.

 

실습을 위해 가장 먼저 Node를 3개 생성하였으며, 본 포스트에서는 VirtualBox 플랫폼을 선택하였습니다. 관리자 또는 root 모드로 진행해주세요.

# Node 생성
$ docker-machine create --driver virtualbox node1
$ docker-machine create --driver virtualbox node2
$ docker-machine create --driver virtualbox node3

# Node 목록 조회
$ docker-machine ls

VirtualBox 탭에 가상머신이 하나 둘 등록됩니다.

 

Swarm 클러스터 생성


만들어진 노드에 Mangager와 Worker 중 하나의 역할을 부여합니다.

  • Manager Node: node1
  • Worker Node: node2, node3

 

Manager에 해당하는 노드는 우선 docker swarm init 이라는 명령어로 클러스터를 생성해야합니다. 이 때 노드는 가상의 클라이언트이기 때문에, swarm 명령어를 호스트 PC에서 SSH로 던져줘야합니다. 다행히도, docker-machine ssh 명령어를 이용하면 간단하게 각 Node에게 SSH 채널로 명령을 수행하게 할 수 있습니다.

# 각 노드의 IP 확인 후,
$ docker-machine ls

# Manager Node가 될 노드의 IP를 명시하여 swarm init 수행
$ docker-machine ssh node1 "docker swarm init --advertise-addr [Manager Node의 IP]"

 

이제 Worker에 해당하는 나머지 node2, node3node1에 연결해주어야 합니다. 이는 swarm join명령어로 할 수 있으며, 클러스터에 붙을 수 있는 노드임을 인증하기 위해 ‘token’이라는 정보를 제공해야합니다.

 

앞서 swarm init 명령을 수행하면 화면에 친절하게도 token 정보와 아래와 같은 swarm join 명령어를 수행하라고 안내해 줍니다.

 

docker node ls 명령을 수행해보면 각 노드의 상태와 역할(Manager Status)을 확인할 수 있습니다. Manager Status의 구분은 다음과 같습니다.

  • Leader: 클러스터를 최초로 생성한 노드 (= swarm init을 수행한 노드)
  • Reachable: 클러스터 생성 이후에 Manager 자격을 부여 받은 노드
  • 공란: Worker 노드

 

한 번 확인해볼 겸, node2를 Manager로 변경해보겠습니다.

$ docker-machine ssh node1 "docker node update --role manager node2"

 

Service 생성부터 그 이후까지


가상 클라이언트로 노드를 구성한 뒤에 Service를 생성하는 내용은 이전 포스트(~~)와 그대로 동일합니다. 다만 작업을 할거면 가상머신의 터미널로 들어가야겠죠. 이때는 아래와 같이 SSH로 원격 접속을 하면 됩니다.

# SSH 접속 (username: docker, password: tcuser)
$ ssh docker@[노드 IP]

 

SSH 접속 이후에 간단히 Service를 생성하는 것으로 본 포스트의 내용을 마칩니다.

$ docker service create --detach --replicas 1 --name my_app alpine

 

반응형