CKA
Kubernetes Deployment 업데이트와 롤백
심플코더
2025. 4. 9. 09:11
Kubernetes - Deployment 업데이트와 롤백(rollback)
Deployment는 단순히 파드를 생성하는 역할만 하는 게 아니라, 애플리케이션의 버전을 관리하고 롤백할 수 있는 기능도 지원한다. 이를 통해 배포 중 문제가 생겼을 때 손쉽게 이전 버전으로 복구할 수 있다.
롤아웃(Rollout)과 리비전(Revision)
Deployment를 처음 생성하면 하나의 **롤아웃(Rollout)**이 시작되고, 리비전 1이 만들어진다.
kubectl create -f deployment.yaml
이후, 애플리케이션 버전을 업데이트하면 다시 롤아웃이 발생하고, 그때마다 새로운 **리비전(Revision)**이 생성된다. 예를 들어 새로운 컨테이너 이미지로 업데이트하면 리비전 2가 생기는 식이다.
롤아웃 상태 확인
kubectl rollout status deployment/my-deployment
리비전 내역 확인
kubectl rollout history deployment/my-deployment
Deployment 전략 (Recreate vs RollingUpdate)
Deployment에는 대표적으로 두 가지 배포 전략이 있다.
1. Recreate 전략
- 기존의 파드를 모두 먼저 삭제하고
- 새로운 파드를 그 다음에 생성함
- 이 과정에서 서비스가 잠시 중단될 수 있음 (다운타임 발생)
2. RollingUpdate 전략 (기본값)
- 기존 파드를 하나씩 제거하면서, 동시에
- 새로운 파드를 하나씩 생성함
- 이 방식은 서비스가 중단되지 않도록 도와준다
아무 설정도 하지 않으면 기본 전략은 RollingUpdate다.
Deployment 업데이트 방법
1. 정의 파일을 수정하고 적용
kubectl apply -f deployment.yaml
이렇게 하면 새로운 롤아웃이 트리거되고, 리비전이 하나 더 생긴다.
2. 명령어로 이미지 직접 업데이트
kubectl set image deployment/my-deployment my-container=my-image:v2
이 방법은 간편하긴 하지만, **정의 파일(deployment.yaml)**과 실제 상태가 달라질 수 있어서 관리 측면에서는 주의가 필요하다.
전략별 업데이트 확인
kubectl describe deployment my-deployment
- Recreate 전략:
- 기존 ReplicaSet이 0으로 줄어든 뒤
- 새 ReplicaSet이 5로 증가
- RollingUpdate 전략:
- 기존 ReplicaSet이 1씩 줄어들고
- 동시에 새 ReplicaSet이 1씩 증가
배포의 내부 동작 방식
Deployment가 동작할 때는 ReplicaSet이 자동으로 생성된다.
- 처음 배포하면 → ReplicaSet 1개 생성 → 파드 5개 생성
- 업데이트하면 → 새로운 ReplicaSet 생성 → 파드 교체 진행 (기존 ReplicaSet은 점점 줄어들며 제거됨)
kubectl get replicaset
이 명령으로 여러 ReplicaSet을 확인할 수 있고, 각각 몇 개의 파드를 유지 중인지도 볼 수 있다.
롤백 (Rollback)
업데이트한 뒤 문제가 생겼을 경우, 이전 버전으로 롤백할 수 있다.
kubectl rollout undo deployment/my-deployment
- 새로운 ReplicaSet은 제거되고
- 이전 버전의 ReplicaSet이 다시 살아나면서 파드를 생성한다
kubectl get replicaset
롤백 전:
- old RS → 0 pods
- new RS → 5 pods
롤백 후:
- old RS → 5 pods
- new RS → 0 pods
자주 쓰는 명령어
명령어설명
kubectl create -f | 배포 생성 |
kubectl get deployments | 배포 목록 조회 |
kubectl apply -f | 배포 업데이트 (정의 파일 기반) |
kubectl set image | 이미지 업데이트 (명령어 기반) |
kubectl rollout status | 배포 상태 확인 |
kubectl rollout history | 리비전 히스토리 확인 |
kubectl rollout undo | 이전 버전으로 롤백 |