14.2.운영 환경을 위한 롤링 업데이트 설정하기

예제 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) # ...
  1. 001: 모든 도커 리소스에는 inspect 부명령이 있다. 그중에서도 서비스는 pretty 플래그를 사용해 좀 더 깔끔한 결과를 출력할 수 있는 몇 안 되는 리소스 중 하나다.
  2. 010~015: 가장 최근 업데이트 또는 현재 진행 중인 업데이트의 상태가 나온다.

  3. 업데이트 설정을 변경할 때 꼭 알아 두어야 할 점은 이후 배포에도 이들 설정을 포함시켜야 한다는 것이다.

  4. 버전 v3로 업데이트하면서 추가한 업데이트 설정은 다음 배포에서도 같은 오버라이드 파일을 사용하지 않으면 원래 업데이트 설정으로 되돌아간다.
  5. 언제든지 자신 있게 업데이트를 배포할 수 있도록 하되, 롤링 업데이트 중에도 충분한 검증을 거치며 만약 일이 잘못되더라도 자동으로 이전 버전으로 롤백하도록 해야 한다.

links

social