- 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 |