땡글이LAB

[도커] 스웜 모드(Swarm mode) - 서비스 롤링 업데이트 본문

Devops/도커, 쿠버네티스

[도커] 스웜 모드(Swarm mode) - 서비스 롤링 업데이트

땡글이B 2022. 8. 30. 21:21

 스웜 모드는 자체적으로 롤링 업데이트를 지원하며, 매우 간단하게 사용할 수 있다. 우선 롤링 업데이트를 테스트하기 위한 서비스를 생성한다. 이 서비스는 앞에서 생성한 서비스와 유사하지만 이번에는 컨테이너 생성에 사용될 이미지를 nginx:1.10 으로 설정했다.

$ docker service create --name myweb2 \
--replicas 3 \
nginx:1.10

 

 서비스가 정상적으로 생성되면, docker service update 명령어로 서비스의 이미지를 업데이트할 수 있다. docker service update 명령어를 사용하면 생성된 서비스의 각종 설정을 변경할 수 있다. 이미지를 업데이트하려면 update 명령어의 --image 옵션을 설정하면 된다. 

 

 다음 명령은 myweb2 서비스의 이미지를 nginx:1.11로 업데이트한다.

$ docker service update \
--image nginx:1.11 \
myweb2

  • docker service ps 명령어에서 NAME 항목에 \_ 가 붙어있는 컨테이너는 어떠한 이유로든 동작을 멈춘 컨테이너로서, 서비스에서의 컨테이너 변경 기록을 나타낸다.

 서비스를 생성할 때 롤링 업데이트의 주기, 업데이트를 동시에 진행할 컨테이너의 개수, 업데이트에 실패했을 때 어떻게 할 것인지를 설정할 수 있다.

 

 아래의 예시는 각 컨테이너 레플리카를 10초 단위로 업데이트하며 업데이트 작업을 한 번에 2개의 컨테이너에 수행한다는 것을 의미한다. 이를 설정하지 않으면 주기 없이 차례대로 컨테이너를 한 개씩 업데이트한다. 

// 롤링 업데이트 설정하면서 서비스 생성
$ docker service create \
--replicas 4 \
--name myweb3 \
--update-delay 10s \
--update-parallelism 2 \
nginx:1.10

 위와 같은 서비스의 롤링 업데이트 설정은 docker service inspect 또는 docker inspect --type service 명령어로 확인할 수 있다.

 

아래의 명령어는 롤링 업데이트 설정 뿐만 아니라, 서비스 자체의 정보도 출력한다. 

// 서비스의 정보와 롤링 업데이트 설정을 조회 
$ docker service inspect --pretty myweb3

 위의 출력 결과 중 'On failure' 항목에서 'pause'라고 표시되어 있는데, 이는 업데이트 도중 오류가 발생하면 롤링 업데이트를 중지하는 것을 의미한다. 업데이트 실패에 대해 아무런 설정을 하지 않으면 On failure 항목은 pause로 설정되지만, 서비스를 생성할 때 --update-failure-action 인자의 값을 continue로 지정해 업데이트 중 오류가 발생해도 계속 롤링 업데이트를 진행하게 할 수 있다→  아래 스크립트 참고

// 업데이트 도중 오류 발생해도 계속 롤링 업데이트할 수 있도록 설정
$ docker service create --name myweb4 \
--replicas 4 \
--update-failure-action continue \
nginx:1.10

 

 이러한 롤링 업데이트 옵션은 기본적으로 서비스 자체에 설정돼있지만, docker service update 명령어의 옵션 값을 다르게 설정함으로써 변경할 수 있다. 서비스 롤링 업데이트 후, 서비스를 롤링 업데이트 전으로 되돌리는 롤백(rollback) 또한 가능하다.

// 롤링 업데이트 이전으로 되돌아감.
// (myweb2 는 이전에 롤링 업데이트가 있었던 서비스이다.)
$ docker service rollback myweb2

 

Comments