본문으로 건너뛰기

Rolling Update & Rollback

December 15, 2025

헷갈렸던 용어 정리

Rollout

  • 일반적으로 새로운 소프트웨어 버전, 기능, 시스템 전체를 배포하는 과정 전체를 의미하는 '포괄적인' 용어

Rolling Update

  • 서비스 중단 없이 애플리케이션의 새로운 버전을 배포하는 '특정 Rollout 전략'

Deployment Rollout 과정​

최초 배포

  1. Deployment가 처음 생성되었을 때, Rollout이 트리거된다.
  2. Rollout이 새로운 ReplicaSet을 생성한다.
  3. 해당 ReplicaSet은 새로운 Revision(배포 버전)으로 기록된다.

업그레이드

  • 애플리케이션 컨테이너 버전 등을 업데이트하면 새로운 Rollout이 트리거된다.
  • Rollout이 업데이트 된 ReplicaSet을 생성한다.
  • 업데이트 된 ReplicaSet은 새로운 Revision으로 기록한다.

롤백

  • 기록된 이전 Revision으로 롤백되며, 이에 따라 이전 ReplicaSet이 생성된다.

Deployment Rollout 전략​

rolling1

Recreate​

상황

  • 기존에 Pod가 5개 존재하는 ReplicaSet을 가진 Deployment가 있다고 가정
  • 새로운 버전으로 업그레이드(롤백) 하는 상황

절차

  1. 기존 Pod 5개를 모두 삭제
  2. 새로운 Pod 5개 생성

문제점

  • 기본 Pod를 5개를 모두 삭제하고 새로운 Pod를 생성하는 사이에 서비스 중단 발생

Rolling Update​

상황

  • 기존에 Pod가 5개 존재하는 ReplicaSet을 가진 Deployment가 있다고 가정
  • 새로운 버전으로 업그레이드(롤백) 하는 상황

절차

  1. 기존 Pod 1개를 삭제
  2. 새로운 Pod 1개 생성
  3. 위 과정 5회 반복

장점

  • 서비스가 중단되지 않고 무중단 배포 가능
  • 이러한 장점으로 인해 Deployment는 기본 Rollout 정책으로 Rolling Update를 사용한다.

Recreate vs Rolling Update​

rolling2


업데이트 방법​

yaml 수정 -> apply​

# deployment-definition.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
labels:
app: nginx
spec:
template:
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx:1.7.1 # 1.7.0 -> 1.7.1
replicas: 3
selector:
matchLabels:
type: front-end
kubectl apply -f deployment-definition.yaml

command​

kubectl set image deployment/<deployment 이름> <contaiiner 이름>=<image 이름>

명령어​

kubectl rollout status deployment/<deployment 이름>
  • 현재 rollout의 상태 확인 (몇 개의 pod가 혅재 업데이트 되었는지, rollout이 완료 되었는지 등)
kubectl rollout history deployment/<deployment 이름>
  • revision 히스토리 보기
kubectl rollout undo deployment/<deployment 이름>
  • 이전 revision으로 롤백

레퍼런스​