Rolling Update & Rollback
경고
헷갈렸던 용어 정리
Rollout
- 일반적으로 새로운 소프트웨어 버전, 기능, 시스템 전체를 배포하는 과정 전체를 의미하는 '포괄적인' 용어
Rolling Update
- 서비스 중단 없이 애플리케이션의 새로운 버전을 배포하는 '특정 Rollout 전략'
Deployment Rollout 과정
최초 배포
Deployment가 처음 생성되었을 때,Rollout이 트리거된다.Rollout이 새로운ReplicaSet을 생성한다.- 해당
ReplicaSet은 새로운Revision(배포 버전)으로 기록된다.
업그레이드
- 애플리케이션 컨테이너 버전 등을 업데이트하면 새로운
Rollout이 트리거된다. Rollout이 업데이트 된ReplicaSet을 생성한다.- 업데이트 된
ReplicaSet은 새로운Revision으로 기록한다.
롤백
- 기록된 이전
Revision으로 롤백되며, 이에 따라 이전ReplicaSet이 생성된다.
Deployment Rollout 전략

Recreate
상황
- 기존에
Pod가 5개 존재하는ReplicaSet을 가진Deployment가 있다고 가정 - 새로운 버전으로 업그레이드(롤백) 하는 상황
절차
- 기존
Pod5개를 모두 삭제 - 새로운
Pod5개 생성
문제점
- 기본
Pod를 5개를 모두 삭제하고 새로운Pod를 생성하는 사이에 서비스 중단 발생
Rolling Update
상황
- 기존에
Pod가 5개 존재하는ReplicaSet을 가진Deployment가 있다고 가정 - 새로운 버전으로 업그레이드(롤백) 하는 상황
절차
- 기존
Pod1개를 삭제 - 새로운
Pod1개 생성 - 위 과정 5회 반복
장점
- 서비스가 중단되지 않고 무중단 배포 가능
- 이러한 장점으로 인해
Deployment는 기본 Rollout 정책으로Rolling Update를 사용한다.
Recreate vs Rolling Update

업데이트 방법
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으로 롤백
레퍼런스
- https://kubernetes.io/docs/concepts/workloads/controllers/deployment
- https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment
- Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests (Mumshad)- Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests (Mumshad)