예제 14-2 롤링 업데이트 커스텀 설정의 예 * 롤링 업데이트의 세세한 방식은 컴포즈 파일 내 서비스 정의의 deploy 항목에서 설정할 수 있다.
numbers-api:
deploy:
update_config:
parallelism: 3
monitor: 60s
failure_action: rollback
order: start-first
update_config 항목의 다음 네 가지 프로퍼티를 통해 롤링 업데이트 과정을 원하는 대로 설정할 수 있다. * parallelism: * 한 번에 교체하는 레플리카의 수를 의미한다. * 기본값은 1이므로 한 번에 레플리카가 하나씩 교체된다. * 앞의 설정에서는 롤링 업데이트를 좀 더 빨리 진행하고 이상을 더 잘 발견할 수 있도록 한 번에 세 대의 컨테이너를 교체하게 했다. * monitor: * 다음 컨테이너 교체로 넘어가기 전에 새로 실행한 컨테이너의 이상 여부를 모니터링하는 시간을 의미한다. * 기본값은 0이므로 헬스 체크 설정을 포함한 이미지의 경우 이 설정값을 늘려야 한다. * 이 시간을 증가시키면 롤링 업데이트의 신뢰성이 증가한다. * failure_action: * monitor에 설정한 시간 이내에 헬스 체크가 실패하거나 컨테이너가 실행되지 않아 롤링 업데이트가 실패한 경우에 어떤 조치를 취해야 하는지를 의미한다. * 기본값은 업데이트 중지이지만, 여기서는 이전 버전으로 롤백하도록 설정했다. * order: * 레플리카를 교체하는 절차의 순서를 의미한다. * stop-first가 기본값으로, 실행 중인 레플리카 수가 서비스 정의에 지정된 숫자를 넘어서지 않는다. * 하지만 레플리카를 실행할 수 있는 추가적인 시스템 자원이 있다면 start-first를 선택해 기존 레플리카를 제거하기 전에 새 레플리카를 먼저 검증하도록 하는 것이 좋다.
실습 이번 배포에는 변경된 업데이트 설정과 서비스에 사용된 이미지 태그를 V3로 교체해 반영한다. 롤링 업데이트에 새로 변경된 설정이 적용된다.
➜ cd ch14/exercises
➜ docker-compose -f ./numbers/docker-compose.yml -f ./numbers/prod.yml -f ./numbers/prod-healthcheck.yml -f ./numbers/prod-update-config.yml -f ./numbers/v3.yml config > stack.yml
➜
➜ docker stack deploy -c stack.yml numbers
Creating network numbers-prod
Creating service numbers_numbers-api
Creating service numbers_numbers-web
➜
➜ docker stack ps numbers
실습 무작위 숫자 API 서비스의 정보에서 현재 업데이트 상태를 확인하라.
- 스웜의 서비스 정보에서 서비스 정의, 업데이트 설정, 최근 업데이트 결과 등을 좀 더 쉽게 구분할 수 있는 팁이 있다.
- inpsect 명령에서 pretty 플래그를 적용하면 된다.
- 그러면 스택에서 생성된 서비스가 {stack-name}_{service-name}과 같은 형식으로 명명된다.
001) ➜ docker service inspect --pretty numbers_numbers-api
002)
003) ID: lacdnzuw6tyspxf8ufoqq5m8b
004) Name: numbers_numbers-api
005) Labels:
006) com.docker.stack.image=diamol/ch08-numbers-api:v3
007) com.docker.stack.namespace=numbers
008) Service Mode: Replicated
009) Replicas: 6
010) UpdateStatus:
011) State: completed
012) Started: 3 minutes ago
013) Completed: 2 minutes ago
014) Message: update completed
015) # ...
- 001: 모든 도커 리소스에는 inspect 부명령이 있다. 그중에서도 서비스는 pretty 플래그를 사용해 좀 더 깔끔한 결과를 출력할 수 있는 몇 안 되는 리소스 중 하나다.
-
010~015: 가장 최근 업데이트 또는 현재 진행 중인 업데이트의 상태가 나온다.
-
업데이트 설정을 변경할 때 꼭 알아 두어야 할 점은 이후 배포에도 이들 설정을 포함시켜야 한다는 것이다.
- 버전 v3로 업데이트하면서 추가한 업데이트 설정은 다음 배포에서도 같은 오버라이드 파일을 사용하지 않으면 원래 업데이트 설정으로 되돌아간다.
- 언제든지 자신 있게 업데이트를 배포할 수 있도록 하되, 롤링 업데이트 중에도 충분한 검증을 거치며 만약 일이 잘못되더라도 자동으로 이전 버전으로 롤백하도록 해야 한다.