Docker

도커 스웜 모드, docker swarm

sysman 2021. 3. 15. 17:10

- worker host들을 클러스터링

- 여러 대의 docker 호스트들을 하나처럼 만들어주는(클러스터링) 오케스트레이션 도구

- master node와 worker node로 구성

- master node는 최소 3대 이상 권장

- master 노드에서는 클러스터 관리 작업을 하고 클러스터 상태 유지, 스케쥴링 서비스 swarm http api endpoint 제공 및 컨테이너 실행 역할도 함

 

도커 스웜 클러스터 서비스

- 스웜모드에서 제어하는 단위 :service

- 서비스는 같은 이미지에서 생성된 컨테이너 집합

- 서비스 제어하면 해당 서비스 내의 컨테이너에 동일 명령어 수행

- 서비스내의 컨테이너는 1개 이상 존재하며 worker, master node에 할당 

 

도커 스웜 구성 시

- 대규모 클러스터 운영 시 별도 master pool과 worker pool 을 따로 관리( ex) 약 3-5대 master node, 30대 worker node) 

- 소규모 클러스터 운영 시 부하에 대한 예측이 가능하면 궂이 구분할 필요는 없다. ( ex) 약 10 ea)

 

/etc/hosts cpu mem ip address  
master 4 4 x.x.x.10  
worker1 2 4 x.x.x.20  
worker2 2 4 x.x.x.30  

3개 서버 다

vi /etc/hosts

x.x.x.10 master

x.x.x.20 worker1

x.x.x.30 worker2

 

master서버

hostnamectl set-hostname master

 

worker1서버

hostnamectl set-hostname worker1

 

worker2 서버

hostnamectl set-hostname worker2

 

master 서버

docker swarm init --advertise-addr x.x.x.10

(아래 출력 됨 -> ctrl+c 복사하기)

* docker swarm join --token dsfafa--~~~

 

worker1, worker2 서버에 복사한 토그 붙여 넣기

docker swarm join --token dsfafa--~~~

 

master에서 도커 스웸 시각화 툴 설치

docker service create --name=swarm-tool --publish=8008:8080 --constraint=node.role==manager --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock dockersamples/visualizer

 

마스터에서

docker node ls

docker info

 

 

-----------------------------------

웹 서비스 생성( 2개 복제 생성, 컨테이너 하나가 죽으면 자동생성)

docker service create --name web --replicas 2 -p 80:80 nginx

docker service ps web

 

컨테이너 확장시

docker service scale web=3

확인

docker service ps web

----------------------------------

global mode 옵션 - 모든 노드에 컨테이너 생성

 

docker service create --name global_web --mode global nginx

 

docker service ls

docker service ps global_web

-----------------------------------

장애시 서비스 복구 : 복제 mode 로 설정된 서비스의 컨테이너가 정지하거나 특정 node가 다운되면 swarm 마스터는 새로운 컨테이너를 생성해 자동으로 복구 수행함

 

docker rm -f web.dsjfls~~  // 임의의 컨테이너 강제로 삭제

docker service ps web // stats확인 시 shutdown  그리고 자동으로 새로 생성된 container에서 ready로 보임

 

노드 다운시

sudo service docker stop //도커 데몬 중지시킴

docker node ls // stat에서 특정 노드 down 확인

 

docker service ps web //다른 active 노드에서 새로 생성된 것들이 보임

 

복구시

자동으로 rebalance 되지 않음

수동으로 scale을 조절해주어야 함

docker service scale web=1

docker service scale web=5

 

----------------------------

rolling update

 

옵션 내용
--update-parallelism 동시 업데이트할 컨테이너 수
--update-delay 언데이트 간격  시간 조절
--update-order start-first :새컨테이너 생성 후 기존 컨테이너 삭제
stop-first :기존 컨테이너 삭제 후 새 컨테이너 생성
--update-failure-action 업데이트 실패 경우
puase : 업데이트 멈춤
continue : 업데이트 계속
rollback : 업데이트 롤백
--update-max-failure-ratio 실패 비율에 지정한 값 이상 이면 업데이트 실패로 간주

 

docker service create --name rol_web --replicas 3 nginx:1.0

docker service ps rol_web

docker service update --image nginx:1.10 rol_web

 

 

----------------------------------------

cluster node 삭제

docker swarm leave

docker swarm leave -force

 

cluster node 추가(worker 노드 추가하기 위한 token 확인)

docker swarm join-token manager

토큰 업데이트(master node 에서 수행 가능)

docker swarm join-token --rotate manager

--------------------------------

swarm mode에서 node 상태 변경

 

docker swarm leave

docker node ls

 

worker node 완전 삭제

docker node rm swarm-worker1 (hostname)

docker node ls

 

master node 삭제(해제), master node 가1개인 경우 삭제 시 더 이상 swarm cluster 사용 못함

docker swarm leave --force

 

worker node -> master node로 변경

docker node promote worker1

 

master node -> worker node로 변경

docker node demote worker1

 

---------------------------------------------

docker swarm 모드 작동 시 docker_gwbridge, ingress 가 자동 생성

 

2가지 트래픽 생성

- 도커 컨테이너 제어 및 관리 영역 : docker swarm에 대한 join 및 탈퇴 요청 같은 message 가 포함

- 애플리케이션 데이터 영역 : 컨테이너 및 외부 클라이언트와의 트래픽

 

overlay

- docker swarm에 조인하는docker daemon간 통신 관리

- 독립 실행 컨테이너의 네트워크를 생성한느 방법과 동일하게 생성

- 기존 생성된 overlay network에 service를 연결시켜 service간 통신 활성화

- overlay network drive 사용

 

ingress network

- service node 간 로드밸런스 수행

- docker swarm의 모든 node가 노출된 port로 요청 받게 되면, 해당 요청을 ipvs라는 모듈로 전달

- ipvs는 해당 서빗스에 조인하는 모든 ip 를 추적하고  그 중 하나를 선택 후 요청을 해당 경로로 라우팅함

- docker swarm을 init하거나 join하면 자동 생성

 

docker_gwbridge

- overlay network(ingress network포함) 를 개별 docker daemon의 물리적 network에 연결하는 bridge network

- 기본적으로, service가 실행 중인 각각의 컨테이너는 로컬 docker daemon host의 docker_gwbridge network에 연결

- docker swarm을 init 및 join 때 자동 생성

 

 

 

'Docker' 카테고리의 다른 글

docker-compose  (0) 2021.03.15
Docker - 명령어  (0) 2021.03.15
Docker 설치 및 삭제  (0) 2021.03.10
Docker - 이론  (0) 2021.03.09