본격적으로 Docker Swarm을 구성하기 위해 세 개의 가상머신을 생성하겠다.
가상머신 생성은 Vagrant를 이용할 것이며, 매니저 노드 하나와 워커 노드 두 개를 생성하려한다.
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.hostname = "swarm-manager"
config.vm.network "private_network", ip: "192.168.111.100"
config.vm.synced_folder ".", "/vagrant_data", disabled: true
end
먼저 매니저 노드를 생성하기 위한 Vagrantfile을 생성해주고 vagrant up을 통해 실행시켜준다.
이번에는 가상머신의 운영체제를 우분투로 정하겠다.
나머지 워커 노드는 매니저 노드를 복제하여 만들 예정이다.
가상머신이 생성되었으면 ssh를 통해 접속해준다.
생성한 가상머신에는 도커가 설치되어있지 않기 때문에 도커를 설치해준다.
vagrant@swarm-manager:~$ sudo apt update
vagrant@swarm-manager:~$ sudo apt upgrade
vagrant@swarm-manager:~$ sudo apt install -y docker.io
vagrant@swarm-manager:~$ sudo usermod -a -G docker $USER
vagrant@swarm-manager:~$ sudo service docker restart
vagrant@swarm-manager:~$ sudo chmod 666 /var/run/docker.sock
vagrant@swarm-manager:~$ docker version
도커 설치가 완료되었다면 워커 노드를 복제하기 위해 가상머신을 중지시키고 복제한다.
이제 두 개의 워커 노드에 IP를 변경해주기로 한다.
sudo vi /etc/netplan/50-vagrant.yaml
sudo netplan apply
sudo hostnamectl set-hostname swarm-worker1
reboot
기본 vagrant의 yaml 파일은 /etc/netplan에 저장된다.
설정이 완료되었으면 ssh를 통해 각 노드에 접속한다.
매니저 노드에서 스웜 클러스터 시작
이제 본격적으로 스웜 클러스터를 작동해보겠다.
docker swarm init --advertise-addr 192.168.111.100
먼저 매니저 노드에서 스웜을 시작해주면 새로운 워커 노드를 클러스터에 추가할 때 필요한 키 (토큰)를 부여받게 된다.
위 토큰을 통해 워커 노드를 추가시키기로 한다.
docker node ls
매니저 노드에서 위 명령어를 통해 스웜 클러스터에 정상적으로 생성된 모습을 확인할 수 있다.
참고로 토큰을 조회하는 방법은
docker swarm join-token manager
이며 토큰을 변경하고 싶으면
docker swarm join-token --rotate manager
를 통해 변경이 가능하다.
워커 노드를 삭제하는 명령어는
docker swarm leave
이며 삭제 후 매니저에서 노드 상태를 확인해보면
STATUS가 down이 된 것을 볼 수 있다.
docker node rm swarm-worker2
STATUS가 down이 되면 rm을 통해 매니저에서 워커를 삭제시켜준다.
워커 노드를 매니저로 승격 시키는 것 또한 가능하다.
docker node promote swarm-worker1
반대로 매니저 노드를 워커 노드로 내리는 것 또한 가능하다.
docker node demote swarm-worker1
'Cloud Computing > Docker' 카테고리의 다른 글
Swarm mode의 서비스 장애 복구 (0) | 2021.01.06 |
---|---|
Swarm mode (0) | 2021.01.06 |
Docker Swarm Cluster를 구성하기에 앞서 (0) | 2021.01.06 |
Docker Compose 이용하기 (0) | 2021.01.05 |
Container 내부에 명령어를 전달하기 (0) | 2021.01.05 |