복제 모드로 설정된 서비스의 컨테이너가 정지하거나 특정 노드가 다운되면 스웜 매니저는 새로운 컨테이너를 생성해 자동으로 복구함
#1 특정 노드에서 myweb 서비스에 속한 컨테이너를 삭제하면 자동으로 다시 생성되는 것을 확인
#1-1 swarm-manager 노드에서 실행 중인 컨테이너 목록 확인
#1-2 swarm-manager 노드에서 실행 중인 컨테이너 강제로 삭제
#1-3 myservice 서비스의 태스크(task) 확인 → 새로운 태스크가 생성된 것을 확인
#2 특정 노드가 다운되면 해당 노드의 컨테이너가 종료되고 다른 노드에 컨테이너가 생성되는 것을 확인
#2-1 swarm-worker1 노드의 도커 데몬 프로세스를 종료
#2-2 매저저 노드(swarm-manager)에서 노드 상태 확인 → swarm-worker1 노드가 다운 상태
#2-3 매니저 노드에서 myservice 서비스의 태스크 상태 확인 → 실행 중인 다른 노드에서 태스크가 생성되었음
#3 다운되었던 노드를 재시작해도 재균형(rebalance) 작업은 자동으로 일어나지 않음
#3-1 다운되었던 swarm-worker1 노드를 재시작
#3-2 매니저 노드에서 노드 상태 확인 → swarm-worker1 노드가 Active 상태
#3-3 매니저 노드에서 myservice 서비스의 태스크 상태 확인 → 여전히 myweb.2 태스크가 swarm-manager 노드에서 실행 중
#3-4 docker service scale 명령으로 컨테이너 수를 줄이고 다시 늘리는 방식으로 서비스의 컨테이너 할당의 균형을 맞춤
#4 서비스 롤링 업데이트 (스웜 모드에서 자체적으로 지원)
#4-1 서비스 생성
#4-2 docker service update 명령으로 생성된 서비스의 설정 변경
#4-3 서비스를 생성할 롤링 업데이트 설정 가능
롤링 업데이트 주기, 업데이트를 동시에 진행할 컨테이너의 개수, 업데이트에 실패했을 때 어떻게 할 것인지를 설정
#4-4 서비스의 롤링 업데이트 설정 확인
root@swarm-manager:~# docker inspect --type service myweb3
[
{
"ID": "npadraf3xx27kmy1f36fyoyah",
"Version": {
"Index": 201
},
"CreatedAt": "2020-09-13T04:20:09.816854398Z",
"UpdatedAt": "2020-09-13T04:20:09.816854398Z",
"Spec": {
"Name": "myweb3",
"Labels": {},
"TaskTemplate": {
"ContainerSpec": {
"Image": "nginx:1.10@sha256:6202beb06ea61f44179e02ca965e8e13b961d12640101fca213efbfd145d7575",
"Init": false,
"StopGracePeriod": 10000000000,
"DNSConfig": {},
"Isolation": "default"
},
"Resources": {
"Limits": {},
"Reservations": {}
},
"RestartPolicy": {
"Condition": "any",
"Delay": 5000000000,
"MaxAttempts": 0
},
"Placement": {
"Platforms": [
{
"Architecture": "amd64",
"OS": "linux"
}
]
},
"ForceUpdate": 0,
"Runtime": "container"
},
"Mode": {
"Replicated": {
"Replicas": 4
}
},
"UpdateConfig": {
"Parallelism": 2,
"Delay": 10000000000,
"FailureAction": "pause",
"Monitor": 5000000000,
"MaxFailureRatio": 0,
"Order": "stop-first"
},
"RollbackConfig": {
"Parallelism": 1,
"FailureAction": "pause", ⇐ 업데이트 도중 오류가 발생하면 롤링 업데이트를 중지
"Monitor": 5000000000,
"MaxFailureRatio": 0,
"Order": "stop-first"
},
"EndpointSpec": {
"Mode": "vip"
}
},
"Endpoint": {
"Spec": {}
}
}
]
#4-5 롤링 업데이트 중 오류가 발생해도 계속 롤링 업데이트를 진행하도록 설정
#4-6 서비스를 롤링 업데이트 이전으로 되돌리는 롤백
'컨테이너 > 도커' 카테고리의 다른 글
04 도커 스웜 네트워크 (0) | 2020.09.17 |
---|---|
03 서비스 컨테이너에 설정 정보 전달 (0) | 2020.09.17 |
01 스웜 모드 서비스 (0) | 2020.09.17 |
도커로 MySQL 설치 및 실행 (0) | 2020.05.28 |
09 docker container network (0) | 2019.05.20 |
댓글