서론
Kubernetes에서 애플리케이션을 안정적으로 운영하기 위해서는 배포(Deployment)할 때 서비스 중단 없이
애플리케이션을 업그레이드하거나 문제가 발생했을 때 이전 상태로 되돌리는 롤아웃(Rollout)과 롤백(Rollback) 기능에 대해서 알아본다.
Rollout & Rollback
Kubernetes에서 디플로이먼트를 생성하면, 자동으로 롤아웃(Rollout)이 발생하며 revision 1이라는 초기 버전이 저장된다.
이후 이미지 버전 변경 등으로 업데이트가 이루어질 때마다 새로운 롤아웃이 생성되고, 디플로이먼트는 revision 2, 3, … 와 같은 방식으로 버전 히스토리를 관리한다.
이러한 구조는 향후 문제가 발생했을 때 Rollback을 가능하게 해준다.
- 롤아웃 상태 보는 명령어
kubectl rollout status {deployment_name}
- 롤아웃 히스토리 보는 명령어
kubectl rollout history {deployment_name}
- 롤백 명령어
kubectl rollout undo {deployment_name}

Deployment 배포 전략
디플로이먼트에는 크게 두 가지 배포 전략이 존재한다:
- RollingUpdate (기본값): 파드를 하나씩 점진적으로 교체하며 무중단 배포를 가능하게 한다.
- Recreate: 기존 파드를 모두 중단한 후 새로운 파드를 배포하는 방식으로, 배포 중 애플리케이션이 일시적으로 중단된다.


Rolling Update가 수행되면 Kubernetes는 내부적으로 새로운 ReplicaSet을 생성하고, 해당 ReplicaSet이 새 파드들을 실행하게 된다.
이때 이전 ReplicaSet은 점차 축소되고, 새 ReplicaSet이 활성화된다.


만약 롤백이 수행될 경우 이 관계가 역전되어 이전 ReplicaSet이 다시 활성화된다.

Comment