본문 바로가기
Linux

Docker Swarm - Update(Rollout) 와 Rollback 이해

by 올엠 2024. 3. 7.
반응형

Docker Swarm 명령을 이용하다 보면, 익숙하지 않은 명령어 3개를 확인 할 수 있다.

이 명령은 Docker Swarm 에서만 사용이 가능한 명령으로 서비스를 효과적으로 관리하는데 목적을 두고 있다.

 

 

그럼 Update(Rollout) 와 Rollback에 대해 공부를 진행하기 위해 서비스를 만들어 보자.

Swarm Init

Swarm 모드를 사용하기 위해서 가장 먼저 해야 하는 작업으로, Swarm 서버를 구성하는 것이다.

Swarm 모드는 다중 물리적인 호스트를 연결하여 Resource를 관리할 수 있는 기능을 제공한다.




Swarm 활성화는 다음 명령으로 진행할 수 있다.

docker swarm init
# 만약 사설 ip가 다중으로 가지고 있는 경우 --advertise-add 으로, 하나를 지정해야 함.
docker swarm init --advertise-addr PRIVATE_IP
이후 Worker 노드를 추가하거나, 관리 안정성을 위해서 Master 노드를 추가할 수 있다.
 
Master 노드는 Worker 노드와 동일한 기능을 하면서, Swarm을 관리하는 기능이 추가되었다고 생각하면 된다.
 
여기에서는 바로 서비스를 생성해보도록 하자.
 
Rollout을 이해하기 위해서 mariadb:10.4 버전을 설치한다.
docker service create --name db-swarm --replicas 4 --env MARIADB_ROOT_PASSWORD=password mariadb:10.4


 
정상적으로 서비스가 올라왔는지 ls 명령을 통해 4개의 복제된 서비스가 실행된 것을 알 수 있다.
docker service ls
docker insect를 통해 확인해보면 현재 mariadb:10.4 버전으로 동작하는 것을 알 수 있다.
docker inspect <docker-service-id>

Rollout(Update)

앞서 우리는 mariadb:10.4 버전을 사용하였는데, 11.0.2 버전으로  Rollout을 통해서 이미지를 변경해보자.
docker service update --image mariadb:11.0.2 db-swarm
 
inspect 명령을 보면 정상적으로 11.0.2 이미지로 변경된 것을 알 수 있다.
 


정상적으로 업데이트가 되는 것을 알 수 있다.
 

Rollback

그런데 만약 업데이트한 이미지에 문제가 있다면 어떻게 해야 할까? 바로 Rollback 명령을 사용해야 한다.

Inspect를 통해 확인해 보면 10.4 버전임을 알 수 있는데, 이렇게 Rollback이 가능한 이유는,  inspect 에서 볼 수 있는데, 바로 PreviousSpec 정보를 가지고 있다가 rollback 명령이 내려오면 이전 이미지로 전환하는 것이다.
과거 정보를 보관하고 있다.
 
 

Additional

이렇게 편리한 Rollout과 Rollback에 추가적으로 이해하면 좋은 옵션이 있는데,
 
--update-parallelism  --update-delay, --update-failure-action 이다.
 
보통 서비스들은 이미지가 올라오는데 시간이 필요하고, 서비스를 시작하는데 있어 연속적인 서비스를 보장하는 것이 좋다.
 
이를 위해 제공하는 옵션으로 --update-parallelism는 동시에 업데이트 하는 복제 갯수(기본값은 1)이며,  --update-delay는 업데이트가 성공한 이후 대기하는 시간(기본값은 0)이라고 할 수 있다.
 
만약 앞서 우리가 4개의 서비스를 복제하였는데, --update-parallelism 2를 입력하면 Rollout시 2개의 복제 단위로 작업을 시작하게 된다.
 
그리고 --update-delay  값을 통해 복제의 작업이 성공하면 대기시간을 가짐으로써, 서비스가 시작이후 준비할 수 있는 시간을 만들어 주어, 중단없이 서비스를 재개할 수 있도록 도와준다.
 
--update-failure-action 에는 만약 업데이트 실패시 진행할 작업을 선택할 수 있는데, pause, continue, rollback중 선택할 수 있다(기본값 pause).
 
Rollback에서도 --rollback-parallelism과 --rollback-delay 옵션을 제공하므로 동일하게 적용한다면 유용할 것이다.
 
반응형