AWS에서 EC2 인스턴스에 Docker-Swarm 만들기

안녕하세요.

DSG 웹서비스부문 개발 2팀 사원 손다연입니다.

[챕터 1]에서 배운 Docker-machine으로 EC2 인스턴스 노드까지 생성이 잘 되었나요?

이번 챕터는 그 노드로 Docker-Swarm을 만들어보도록 합시다.


목차는 다음과 같습니다.

1. Node중 하나를 Manager로 만들기
2. 나머지 Node들을 Worker로 만들기


0. 생성한 모든 Node에 docker 다운받기

챕터 1에서 만든 노드 3개에 docker를 설치해야합니다.

Docker, Docker-compose, Docker-machine을 모두 설치하도록 합시다.

챕터 1 다시 보기

[챕터 1] 의 3. 4. 5. 번을 참고하세요.


1. Node중 하나를 Manager로 만들기

저번 챕터에서 만들었던 노드들이 기억 나시나요?

명령어를 사용해서 다시 한 번 확인하겠습니다.

Node 확인하기

[ec2-user@ip-172-31-18-132 ~]$ docker-machine ls

NAME        ACTIVE   DRIVER      STATE     URL                         SWARM   DOCKER     ERRORS
aws-node1   -        amazonec2   Running   tcp://3.81.226.168:2376             v19.03.1   
aws-node2   -        amazonec2   Running   tcp://54.242.54.187:2376            v19.03.1   
aws-node3   -        amazonec2   Running   tcp://54.174.125.199:2376           v19.03.1   

이 중에서 하나를 골라서 manager라는 직급을 주도록 하겠습니다.
저는 aws-node1manager로 나머지 두 노드는 worker로 설정하도록 하겠습니다.

그렇다면, manager로 사용할 aws-node1에 접속하도록 하겠습니다.

사용법

$ docker-machine ssh [manager-node-name]

예시

[ec2-user@ip-172-31-18-132 ~]$ docker-machine ssh aws-node1

Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-1052-aws x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
 .
 .
ubuntu@aws-node1:~$ 

aws-node1에 접속한 후에 이 노드를 manager로 만들겠습니다.

사용법

$ sudo docker swarm init --advertise-addr [your-manager-ip]

예시

ubuntu@aws-node1:~$ sudo docker swarm init --advertise-addr 3.81.226.168

Swarm initialized: current node (95cac3o116goht3tjdw9finqy) is now a manager.
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-0w0oezqj2s59bj7635pj0mxiawgnmmr84ny15gl688yx98aypb-36jb6pj963h40dn0uolox5o46 3.81.226.168:2376

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

현재 노드가 manager가 되었다는 문장인
current node (95cac3o116goht3tjdw9finqy) is now a manager.가 나왔습니다.

다른 두 개의 노드를 worker로 설정하기 위해서는 위의 command인
docker swarm join --token SWMTKN-1-0w0oezqj2s59bj7635pj0mxiawgnmmr84ny15gl688yx98aypb-36jb6pj963h40dn0uolox5o46 3.81.226.168:2376을 저장해놔야 합니다.

다른 노드에 접속하여 이 command를 입력하면 worker로 만들 수 있습니다.
그 과정은 아래에서 이어서 설명하겠습니다.

만약, 다른 노드에 manager 직급을 주고 싶다면,
$ docker swarm join-token manager 를 사용하여 나온 토큰 값을
다른 노드에 접속하여 command하면 됩니다.


2. 나머지 Node들을 Worker로 만들기

이제 남은 두개에 노드에 접속하여 보겠습니다.
접속 전에 AWS 사이트에서 EC2 인스턴스들의 보안그룹을 확인해봅니다.

위에서 만든 인스턴스인 aws-node1, aws-node2, aws-node3의 보안그룹인 docker-machine이 생성되었습니다.

AWS의 보안그룹으로 들어가서 docker-machine의 인바운드를 확인해보겠습니다.
아래 표와 같이 2377 포트가 열려있어야 합니다.


유형   프로토콜   포트   소스
사용자 지정 TCP   TCP   2377   0.0.0.0/0

2377 포트가 열린 걸 확인한 후, ssh로 접속해보도록 하겠습니다.

TIP
3개의 노드를 사용하므로 창을 3개를 띄워서 하면 편합니다.

aws-node2에 접속해 worker로 만들기

[ec2-user@ip-172-31-18-132 ~]$ docker-machine ssh aws-node2
.
.
ubuntu@aws-node2:~$ sudo docker swarm join \
--token SWMTKN-1-581wwvbpfqapm8l1ryun99b4ne53ehdds0s1uyjnckm90b5x8e\
-1db5i7qqeb19w3ghoxjrs22g4 3.81.226.168:2377

This node joined a swarm as a worker.

aws-node3에 접속해 worker로 만들기

[ec2-user@ip-172-31-18-132 ~]$ docker-machine ssh aws-node3
.
.
ubuntu@aws-node3:~$ sudo docker swarm join \
--token SWMTKN-1-581wwvbpfqapm8l1ryun99b4ne53ehdds0s1uyjnckm90b5x8e\
-1db5i7qqeb19w3ghoxjrs22g4 3.81.226.168:2377

This node joined a swarm as a worker.

노드들이 잘 연결되었는지 확인해봅시다.
manager 노드인 aws-node1에 접속하여 확인할 수 있습니다.

Node 확인하기

ubuntu@aws-node1:~$ sudo docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
v0lbxme157q3e40kdmqz7ie0i *   aws-node1           Ready               Active              Leader              19.03.1
vxw2adfad395bunokybhkltln     aws-node2           Ready               Active                                  19.03.1
put1qu5xsd5ppol0uu5qkw26z     aws-node3           Ready               Active                                  19.03.1

다음과 같이 3개의 노드가 잘 연결되어 Docker-Swarm을 형성한 것을 볼 수 있습니다.


Docker-Swarm을 만드는 기본 단계를 모두 완료하셨습니다!

다음 단계에서는 오늘 만든 Docker-Swarm을 사용하여
서비스를 생성하는 방법에 대해 배워보겠습니다.

배운 내용 복습 하기
1. Node중 하나를 Manager로 만들기
2. 나머지 Node들을 Worker로 만들기

이전 단계로 돌아가기 : Docker 설치하기
다음 단계로 넘어가기 : 서비스 만들기