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 이전 버전으로 롤백