2026. 2. 21. 20:44ㆍk8s
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을 통해
안정적인 무중단 배포를 가능하게 한다.
'k8s' 카테고리의 다른 글
| 🔐 Kubernetes securityContext 완전 정리 (0) | 2026.02.22 |
|---|---|
| 🐤 Kubernetes Canary Deployment 완전 정리 (0) | 2026.02.21 |
| 🔁 Kubernetes Deployment에서 ReplicaSet이 여러 개 보이는 이유 (0) | 2026.02.21 |
| 🏷 Kubernetes Deployment에서 Label로 엮이는 구조 이해하기 (0) | 2026.02.21 |
| 🚫 Kubernetes Taint & Toleration 완전 정리 (0) | 2026.02.21 |