내 잡다한 노트
docker swarm 실습 본문
먼저, swarm 실습을 위해서는 여러 호스트가 필요하다. vm을 사용하는 방법도 있고, 하나의 컴퓨터만 사용해야한다면
docker in docker(DinD)라는 이미지가 있는데 도커 컨테이너안에서 컨테이너를 또 만드는 방식을 통해 여러 호스트를 만든 것처럼 할 수 있다.
나는 aws도 연습할 겸 Auto scaling을 활용하여 3개의 인스턴스를 만들고 보안그룹으로 포트를 열어놓은 뒤 실습을 진행하였다.
swarm 관련해서 열어두어야 할 포트는 2377, 7947, 4789 포트이다.
3개의 인스턴스가 같은 vpc에 있고 같은 서브넷에 있으므로 내부ip를 통하여 연결하였다.
swarm에는 매니저노드, 워커노드가 존재한다.
매니저노드의 역할은 worker 노드들을 관리하는 역할이다.
좀 더 정확히 말하면 클러스터의 상태를 유지하고, 서비스 배포, 상태 모니터링, 노드 간의 조정을 담당한다.
클러스터를 구성하다보면 나오는 개념이 리더선출 개념이다. 이때 리더를 선출하기 위해 Raft(뗏목) 알고리즘이 사용된다. 투표를 통해 리더를 선택한다.
여기 swarm에도 그런 개념이 있어서 뒤에 후술되는 Reachable 상태가 되면 리더인 매니저노드가 죽게되면 다음 리더는 Reachable인 노드가 된다.
worker 노드들은 실제로 컨테이너가 관리, 생성되며 운영된다. 다만, 매니저노드가 worker 노드의 역할 또한 수행할 수 있다.
# 도커 스웜 클러스터 매니저노드 만들기
sudo docker swarm init --advertise-addr 172.31.9.170
# 워커 노드 추가
sudo docker swarm join --token <JOIN_TOKEN> <MANAGER_IP>:2377
매니저노드를 제외한 다른 인스턴스에서 이 명령어를 치면 된다.
# swarm 노드 확인
sudo docker node ls
# 서비스 배포
sudo docker service create --name my-nginx -p 80:80 --replicas 3 nginx
# 서비스 확인
sudo docker service ls
# 노드 역할 변경
docker node promote <NODE_ID> # 매니저 노드로 승격
docker node demote <NODE_ID> # 워커 노드로 강등
promote를 하게되면 MANAGER STATUS가 Reachable로 바뀌게 된다. (이미 매니저노드가 있을 경우에)
이렇게 되면 매니저 노드가 HA로 구성된 것이라고 한다
# 서비스 스케일링
docker service scale my-nginx=5
도커 서비스를 활용하려면 swarm 클러스터를 꼭 만들어야 한다.
'DevOps > docker' 카테고리의 다른 글
도커 레포지토리와 레지스터 (0) | 2024.06.27 |
---|---|
도커 디스크 용량 확보 prune (0) | 2024.06.27 |
도커 네트워크에 대해 간단히 알아보기 (0) | 2023.11.09 |
Dockerfile 만들기 (1) | 2023.11.03 |
port mapping과 volume mapping이 필요한 이유 (0) | 2023.09.15 |