1️⃣ 개요
애플리케이션을 운영하면서 새로운 기능을 배포하거나 버그를 수정할 때 서비스 중단 없이 업데이트하는 것이 매우 중요합니다.
쿠버네티스의 Deployment는 기본적으로 Rolling Update(롤링 업데이트) 방식을 사용하여 무중단 배포를 지원합니다.
이번 글에서는 Rolling Update의 동작 원리와 적용 방법, 그리고 효과적인 무중단 배포 전략을 정리하겠습니다. 🚀
2️⃣ Rolling Update란?
✅ 1. Rolling Update의 개념
• 기존 Pod를 한 번에 모두 삭제하지 않고, 점진적으로 새로운 버전의 Pod로 교체
• 트래픽을 계속 처리하면서 배포 진행 → 무중단 배포 가능
• 배포 중 문제가 발생하면 롤백 가능
📌 Rolling Update 주요 기능
기능 | 설명 |
점진적 배포 | 기존 Pod를 순차적으로 새 버전으로 교체 |
무중단 서비스 | 기존 Pod가 종료되기 전에 새로운 Pod가 준비됨 |
롤백 지원 | 배포 중 문제가 발생하면 이전 버전으로 복구 가능 |
✅ Rolling Update를 사용하면 배포 중에도 서비스가 지속적으로 운영됩니다.
3️⃣ Rolling Update 동작 과정
📌 Deployment → ReplicaSet → Pod 교체 과정
1️⃣ 새로운 버전의 Deployment가 배포되면, 새로운 ReplicaSet이 생성됨
2️⃣ 기존 Pod가 하나씩 삭제되고, 새로운 버전의 Pod가 점진적으로 생성됨
3️⃣ 모든 기존 Pod가 새로운 버전으로 교체되면 배포 완료
4️⃣ 이전 ReplicaSet은 유지되지만, 새로운 트래픽을 받지 않음
📌 Rolling Update 진행 상황 확인
kubectl rollout status deployment my-deployment
✅ Rolling Update는 한 번에 일부 Pod만 업데이트하며, 트래픽이 중단되지 않도록 보장합니다.
4️⃣ Rolling Update 적용 방법
✅ 1. Deployment 배포 (기본 설정)
먼저, Rolling Update가 적용될 Deployment를 생성합니다.
📌 Deployment YAML 예제 (v1.0 버전 배포)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1 # 배포 중 한 번에 최대 1개의 Pod만 중단 가능
maxSurge: 1 # 새로운 Pod를 한 번에 1개 추가 생성 가능
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:1.0
📌 Deployment 배포 명령어
kubectl apply -f deployment.yaml
📌 배포된 Deployment 확인
kubectl get deployments
📌 Rolling Update 진행 상태 확인
kubectl rollout status deployment my-deployment
✅ 이제 새로운 버전의 배포를 준비할 수 있습니다.
✅ 2. 새로운 버전으로 Rolling Update 수행
📌 Deployment YAML 수정 (nginx:1.0 → nginx:1.1)
spec:
template:
spec:
containers:
- name: my-container
image: nginx:1.1 # 새로운 버전
📌 Deployment 업데이트 적용
kubectl apply -f deployment.yaml
📌 Rolling Update 진행 확인
kubectl rollout status deployment my-deployment
✅ 기존 Pod가 하나씩 종료되고 새로운 버전의 Pod가 점진적으로 생성됩니다.
5️⃣ Rolling Update 최적화 전략
✅ 1. maxUnavailable과 maxSurge 값 조정
Rolling Update를 수행할 때 한 번에 몇 개의 Pod를 교체할 것인지 조정할 수 있습니다.
📌 설정 값 비교
설정 값 | 설명 |
maxUnavailable | 배포 중 동시에 중단될 수 있는 Pod 개수 |
maxSurge | 한 번에 추가로 생성할 수 있는 Pod 개수 |
📌 Rolling Update 최적화 설정 예제
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 2 # 한 번에 최대 2개의 Pod를 중단 가능
maxSurge: 2 # 새로운 Pod를 한 번에 2개까지 추가 생성 가능
✅ 이 설정을 활용하면 배포 속도를 조정할 수 있습니다.
✅ 2. 배포 안정성을 높이기 위한 Readiness Probe 설정
배포 중 새로운 Pod가 정상적으로 실행될 때까지 트래픽을 받지 않도록 설정해야 합니다.
이를 위해 Readiness Probe를 활용할 수 있습니다.
📌 Readiness Probe 적용 예제
readinessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 3
periodSeconds: 5
✅ Readiness Probe를 설정하면 새로운 Pod가 정상적으로 기동될 때까지 트래픽을 받지 않습니다.
6️⃣ 배포 중 문제가 발생했을 때 롤백하는 방법
✅ 1. 현재 배포 상태 확인
📌 현재 배포 버전 확인
kubectl rollout history deployment my-deployment
📌 특정 버전의 상세 정보 확인
kubectl rollout history deployment my-deployment --revision=2
✅ 2. 이전 버전으로 롤백
📌 롤백 실행 (이전 버전으로 되돌리기)
kubectl rollout undo deployment my-deployment
📌 특정 버전으로 롤백
kubectl rollout undo deployment my-deployment --to-revision=2
✅ 배포 중 문제가 발생하면 빠르게 이전 버전으로 복구할 수 있습니다.
🔥 7️⃣ 결론
✔ Rolling Update를 사용하면 기존 Pod를 점진적으로 교체하여 무중단 배포 가능
✔ maxUnavailable과 maxSurge 설정을 조정하면 배포 속도를 최적화할 수 있음
✔ Readiness Probe를 활용하여 배포 중 트래픽을 받지 않는 상태를 유지해야 함
✔ 배포 중 문제가 발생하면 kubectl rollout undo 명령어로 빠르게 롤백할 수 있음
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [Deployment 심화편 #5] Deployment와 Blue-Green Deployment: 안전한 배포 전략 (0) | 2025.03.13 |
---|---|
📌 [Deployment 심화편 #4] Deployment와 Canary Deployment: 점진적 배포 전략 (0) | 2025.03.13 |
📌 [Deployment 심화편 #2] Deployment의 동작 원리와 트러블슈팅 (0) | 2025.03.13 |
📌 [Deployment 심화편 #1] Deployment의 역할과 실무 활용 방법 (0) | 2025.03.13 |
📌 [ReplicaSet 심화편 #9] ReplicaSet과 Node Selector: 특정 노드에 Pod 배포 전략 (0) | 2025.03.12 |