반응형
개요
swarm에 컨테이너 생성시 swarm manager는 자동으로 각 노드에 내부 알고리즘을 이용하여 컨테이너를 배포한다. 그러나 운영중 worker 노드가 추가(삭제) 또는 service생성시 특정 노드가 unusable시 의도치 않게 특정 노드에 컨테이너가 집중될수 있다. 이러한 문제를 해결하기 위해 docker는 rebalance 기능을 이용하여 컨테이너를 각 노도에 재 배포할 수 있다.
구성환경
docker-ce-19.03.5 / CentOS 7.6
syntax) docker service update --force serviceName
예) 2노드(총 6개의 컨테이너)로 이루어진 swarm에 1개의 노드를 swarm에 추가, rebalance 실행후 각 노드에 컨테이너가 재 배포 되었는지 확인
1. node1(manager) 에서 컨테이너 생성
snell> docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION tabzxnado7x2fon7x67vqg7m1 rac1.hoya.com Ready Active Leader 19.03.5 qz09j7g6d6mxenvaiu35p616w * testsvr Ready Active Reachable 19.03.5 snell> docker service create --replicas 6 --name my_nginx_1 -p 8080:80 nginx:latest k8f5uiwomjwg0w3ewfi95qyi9 overall progress: 6 out of 6 tasks 1/6: running 2/6: running 3/6: running 4/6: running 5/6: running 6/6: running verify: Service converged snell> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0585c4d7ab0c nginx:latest "nginx -g 'daemon of…" 13 seconds ago Up 11 seconds 80/tcp my_nginx_1.2.ouch2bilavqupskc3bo02sv27 c79358f42072 nginx:latest "nginx -g 'daemon of…" 13 seconds ago Up 11 seconds 80/tcp my_nginx_1.6.17rw4cxx63cb5bgyfugd8vlpn 5654a78737df nginx:latest "nginx -g 'daemon of…" 13 seconds ago Up 11 seconds 80/tcp my_nginx_1.4.qra9qdzbo3o0cwhutg9b1pttx shell> docker service ls ID NAME MODE REPLICAS IMAGE PORTS k8f5uiwomjwg my_nginx_1 replicated 6/6 nginx:latest *:8080->80/tcp shell> |
2. node2에 배포된 컨테이너 3개 확인
shell> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a5208fa90018 nginx:latest "nginx -g 'daemon of…" 21 seconds ago Up 17 seconds 80/tcp my_nginx_1.3.ayjf638nmyev2323rsjbplm7h bbdacc4011e8 nginx:latest "nginx -g 'daemon of…" 21 seconds ago Up 18 seconds 80/tcp my_nginx_1.5.81y0we9botdcfka5v2ijvs8bz 2f3e67941912 nginx:latest "nginx -g 'daemon of…" 21 seconds ago Up 18 seconds 80/tcp my_nginx_1.1.z28h0pz6g0vo1j06z9viy95pl shell> |
3. node3에서 swarm에 가입
shell> docker swarm join --token SWMTKN-1-11a6xx0tp9ikxdzfponlfinetsydfjmncvo9x3zx23in2n9lxh-5puxp1z3p2hss4kimdhuviqi5 192.168.0.167:2377 This node joined a swarm as a manager. shell> docker ps => 아직 어떠한 컨테이너도 없음 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES shell> |
4. node1에서 rebalance 실행후 3개에서 2개로 조정됨
shell> docker service update --force my_nginx_1 my_nginx_1 overall progress: 6 out of 6 tasks 1/6: running 2/6: running 3/6: running 4/6: running 5/6: running 6/6: running verify: Service converged shell> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 558d7003977e nginx:latest "nginx -g 'daemon of…" 22 seconds ago Up 17 seconds 80/tcp my_nginx_1.6.uaxbb2ow5894m7vkr9d9l68pm 74b10a86c30e nginx:latest "nginx -g 'daemon of…" 26 seconds ago Up 22 seconds 80/tcp my_nginx_1.1.swh9746z2puyy1ikveme20zil shell> |
5. node2 에서 컨테이너가 3개의 2개로 조정됨
shell> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 51cc0ff99eaf nginx:latest "nginx -g 'daemon of…" 17 seconds ago Up 12 seconds 80/tcp my_nginx_1.3.qaeki0jye8imyyrclo5qihtl8 d73c5dc1411b nginx:latest "nginx -g 'daemon of…" 22 seconds ago Up 17 seconds 80/tcp my_nginx_1.5.rokzl83jzzarhfiz4472ceyef shell> |
6. node3에 컨테이너2개가 추가 됨을 확인할 수 있다
shell> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a8e79d67dd62 nginx:latest "nginx -g 'daemon of…" 41 seconds ago Up 36 seconds 80/tcp my_nginx_1.4.gyhbxg2v7qwfzswboyzudumtx a9cac4336fe4 nginx:latest "nginx -g 'daemon of…" 46 seconds ago Up 41 seconds 80/tcp my_nginx_1.2.w7g8vhzlnpftkivfuzkqgmcur shell> |
반응형
'가상화 > Kubernetes' 카테고리의 다른 글
[kubernetes] kubeadm을 사용하여 고 가용성(HA) 클러스터 만들기 (0) | 2020.03.22 |
---|---|
[kubernetes] 설치 (0) | 2020.03.15 |
[Docker] docker service create --mode 옵션 (0) | 2020.01.15 |
[Docker] Volume 관리 (0) | 2020.01.14 |
[Docker] swarm 모드에서 NFS 구성 (0) | 2020.01.10 |