Rolling Update
롤링 업데이트
인스턴스를 순차적으로 교체하는 배포 전략. 무중단.
롤링 업데이트
인스턴스를 순차적으로 교체하는 배포 전략. 무중단.
Rolling Update(롤링 업데이트)는 애플리케이션의 새 버전을 배포할 때 기존 인스턴스를 하나씩 순차적으로 교체하는 무중단 배포 전략입니다. 서비스 가용성을 유지하면서 점진적으로 업데이트를 진행하는 가장 기본적이면서도 안정적인 방법입니다.
Kubernetes에서 Rolling Update는 기본 배포 전략으로, maxSurge와 maxUnavailable 파라미터로 동시에 생성/삭제되는 Pod 수를 제어합니다. 예를 들어 10개 Pod에서 maxSurge=2, maxUnavailable=1로 설정하면, 최대 12개까지 Pod가 존재하고 최소 9개는 항상 가용 상태를 유지합니다. 이를 통해 트래픽 급증 시에도 안정적인 서비스를 제공할 수 있습니다.
# deployment-rolling.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 6
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2 # 최대 추가 생성 Pod 수
maxUnavailable: 1 # 최대 사용 불가 Pod 수
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web
image: myapp/web:v2.0.0
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /ready
port: 80
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
failureThreshold: 3
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
terminationGracePeriodSeconds: 30
#!/bin/bash
# rolling-update-monitor.sh
DEPLOYMENT="web-app"
NAMESPACE="production"
# 현재 버전 확인
echo "=== 현재 배포 상태 ==="
kubectl get deployment $DEPLOYMENT -n $NAMESPACE \
-o jsonpath='{.spec.template.spec.containers[0].image}'
echo ""
# 새 버전 배포
echo "=== v2.0.0 롤링 업데이트 시작 ==="
kubectl set image deployment/$DEPLOYMENT \
web=myapp/web:v2.0.0 -n $NAMESPACE
# 실시간 진행 상황 확인
echo "=== 배포 진행 상황 ==="
kubectl rollout status deployment/$DEPLOYMENT -n $NAMESPACE -w
# 완료 후 상태 확인
echo "=== 최종 상태 ==="
kubectl get pods -n $NAMESPACE -l app=$DEPLOYMENT -o wide
# 배포 히스토리
echo "=== 배포 히스토리 ==="
kubectl rollout history deployment/$DEPLOYMENT -n $NAMESPACE