🔁 Kubernetes Deployment Rollout 완전 정리

2026. 2. 21. 20:44k8s

Kubernetes에서 Deployment를 수정하면
Pod가 한 번에 교체되지 않고 점진적으로 교체된다.

이 과정을 Rollout(롤아웃)이라고 한다.

Rollout은:

  • 무중단 배포
  • 자동 롤백 가능
  • 이전 버전 유지

를 가능하게 하는 핵심 기능이다.


📦 Rollout이 발생하는 경우

Deployment의 Pod Template이 변경되면 Rollout이 시작된다.

예:

  • 이미지 변경
  • 환경변수 변경
  • 리소스 변경
  • label 변경
kubectl set image deploy/nginx nginx=nginx:1.24.0 -n test

📊 Rollout 상태 확인

🔹 진행 상태 확인

kubectl rollout status deploy/nginx -n test

출력 예:

deployment "nginx" successfully rolled out

⚠ 이 명령은 pause 여부는 알려주지 않는다.
배포 완료 여부만 확인한다.


📚 Rollout 히스토리 확인

kubectl rollout history deploy/nginx -n test

출력 예:

REVISION  CHANGE-CAUSE
1         Initial deploy
2         Update image to nginx:1.24.0

🔎 특정 Revision 상세 보기

kubectl rollout history deploy/nginx -n test --revision=2

해당 revision의 Pod template 변경 내용을 확인할 수 있다.


🔁 Rollback (이전 버전으로 되돌리기)

🔹 직전 버전으로 롤백

kubectl rollout undo deploy/nginx -n test

🔹 특정 revision으로 롤백

kubectl rollout undo deploy/nginx -n test --to-revision=1

⏸ Rollout Pause / Resume

🔹 일시 중지

kubectl rollout pause deploy/nginx -n test

🔹 재개

kubectl rollout resume deploy/nginx -n test

🔍 Pause 상태 확인 방법

✅ 가장 정확한 방법

kubectl get deploy nginx -n test -o jsonpath='{.spec.paused}{"\n"}'
  • true → pause 상태
  • false 또는 빈값 → 정상 상태

🔁 Rolling Update 동작 원리

Deployment는 내부적으로:

Deployment
   │
   ├── ReplicaSet A (old)
   └── ReplicaSet B (new)

새 ReplicaSet을 생성하고
기존 ReplicaSet의 Pod를 점진적으로 줄인다.


📌 RollingUpdate 설정

strategy:
  type: RollingUpdate
  rollingUpdate:
    maxUnavailable: 25%
    maxSurge: 25%

🔹 maxUnavailable

동시에 내려갈 수 있는 Pod 수

🔹 maxSurge

기존 replicas보다 추가로 생성 가능한 Pod 수


📊 %와 정수의 관계

replicas: 4일 때

설정 실제 동작
25% 1
50% 2
1 항상 1
2 항상 2

✔ %는 replicas 기준 비율
✔ 정수는 고정 값
✔ 둘 다 사용 가능

운영 환경에서는 보통 %를 많이 사용한다.


📝 CHANGE-CAUSE 설정 방법

rollout history의 CHANGE-CAUSE는
자동 기록되지 않는다.

명시적으로 annotation을 설정해야 한다.

kubectl annotate deploy/nginx -n test \
kubernetes.io/change-cause="Update image to nginx:1.24.0" --overwrite

확인:

kubectl rollout history deploy/nginx -n test

📌 revisionHistoryLimit 설정

오래된 ReplicaSet 자동 정리:

spec:
  revisionHistoryLimit: 2

🎯 전체 흐름 요약

1️⃣ Deployment 변경
2️⃣ 새로운 ReplicaSet 생성
3️⃣ RollingUpdate 전략 적용
4️⃣ 필요 시 rollback 가능
5️⃣ change-cause로 변경 이력 관리


🏁 한 줄 정리

Rollout은
Deployment의 버전 교체 과정이며
Rolling Update와 Rollback을 통해
안정적인 무중단 배포를 가능하게 한다.