[K8s] Deployment: ReplicaSet, rolling update, rollback
Deployment, ReplicaSet, rolling update, k8s rollback, maxUnavailable, maxSurge, RollingUpdate strategy
정의
Deployment = stateless 워크로드를 위한 컨트롤러. 내부적으로 ReplicaSet 관리 + rolling update / rollback.
계층
flowchart TB
Dep[Deployment] --> RS[ReplicaSet]
RS --> P1[Pod 1]
RS --> P2[Pod 2]
RS --> P3[Pod 3]
Note["사용자는 Deployment 만 관리.<br/>ReplicaSet 은 자동."]
| 객체 | 책임 |
|---|---|
| Deployment | 원하는 상태 + rollout 전략 |
| ReplicaSet | replica 수 보장 |
| Pod | 실제 워크로드 |
YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 3
selector:
matchLabels: { app: web }
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
template:
metadata:
labels: { app: web }
spec:
containers:
- name: nginx
image: nginx:1.27
ports:
- containerPort: 80
readinessProbe:
httpGet: { path: /, port: 80 }
Rolling Update
sequenceDiagram
autonumber
participant D as Deployment
participant Old as ReplicaSet v1 (3 pods)
participant New as ReplicaSet v2 (0 pods)
D->>New: scale up 1 (maxSurge)
Note over Old,New: 4 pods 동안 운영
New->>D: pod ready
D->>Old: scale down 1 (maxUnavailable)
Note over Old,New: 3 pods
D->>New: scale up 1
Note over Old,New: 4 pods
Note over D: 반복...
Note over Old: 모두 0
Note over New: 모두 3
| 옵션 | 의미 | 기본 |
|---|---|---|
maxUnavailable | 동시에 불가용 될 수 있는 pod 수 (또는 %) | 25% |
maxSurge | 동시에 추가 될 수 있는 pod 수 | 25% |
TIP
짧은 maxUnavailable + 짧은 maxSurge = 안전 + 느림. zero-downtime + readiness probe 필수.
Recreate Strategy
strategy:
type: Recreate
- 옛 pod 모두 종료 → 새 pod 시작.
- 다운타임 발생.
- DB schema 마이그레이션 같이 두 버전 동시 운영 불가 한 경우.
Rollout 명령
kubectl rollout status deployment/web # 진행 상황
kubectl rollout history deployment/web # 이전 버전 목록
kubectl rollout undo deployment/web # 이전 버전으로 롤백
kubectl rollout undo deployment/web --to-revision=3
kubectl rollout restart deployment/web # 모든 pod 재시작 (rolling)
kubectl rollout pause deployment/web # rollout 일시 정지 (canary 용)
kubectl rollout resume deployment/web
Canary / Blue-Green (Deployment 만으로는 부족)
Deployment 의 기본 rolling 은 부분 canary. 진짜 canary / blue-green 은:
- Istio / Linkerd: traffic 분배 5%, 20%, 50%, 100%
- Argo Rollouts: 정식 canary / blue-green
- Flagger: progressive delivery 자동화
자세한 건 Zero Downtime Deployment 참고.
Revision History
spec:
revisionHistoryLimit: 10 # 기본 10. 옛 ReplicaSet 보관 수
kubectl get rs # 옛 ReplicaSet 들이 있음 (replica=0)
흔한 함정
WARNING
readinessProbe없음 = rolling update 가 준비 안 된 pod 도 ready 로 인식 → 503 폭증.maxSurge=0= 새 pod 만들기 전에 옛 pod 죽임 → 일시 capacity 부족.- 이미지 tag
latest=kubectl rollout restart안 하면 새 이미지 안 받음. 항상 명시 tag (sha). - Resource limits 없이 = 한 pod 가 node 자원 독점 → 다른 pod throttle.
관련 위키
이 글의 용어 (5개)
- [DevOps] 무중단 배포: Blue-Green, Canary, Rolling, Expand-Contractdevops
- 정의 무중단 배포 (Zero-Downtime Deployment) 는 서비스 가동을 멈추지 않고 새 버전을 배포하는 일련의 전략. 핵심 도전 4가지: 1. 트래픽 전환: 어떻게 …
- [K8s] HPA / VPA / KEDA: 자동 확장kubernetes
- 3가지 스케일링 HPA (Horizontal Pod Autoscaler) CPU / Memory / custom metric 기반 pod 수 조정. HPA 알고리즘 예: 현재 4…
- [K8s] Pod: 컨테이너의 최소 단위, sidecar, lifecyclekubernetes
- 정의 Pod = K8s 의 가장 작은 배포 단위. 1개 이상의 컨테이너 + 공유 네트워크 + 공유 스토리지. [!IMPORTANT] Pod 는 컨테이너의 wrapping 이 아니…
- [K8s] Service: ClusterIP / NodePort / LoadBalancer / ExternalNamekubernetes
- 정의 Service = Pod 집합에 안정 가상 IP + DNS 부여. Pod 가 죽고 다시 만들어져도 Service IP 는 그대로. 4가지 타입 1. ClusterIP (기본…
- [K8s] StatefulSet: 순서 보장, 고유 ID, 영속 스토리지kubernetes
- 정의 StatefulSet = 상태 있는 워크로드를 위한 컨트롤러. Deployment 와의 차이: | 항목 | Deployment | StatefulSet | |---|---|…
이 개념을 다룬 위키 페이지 (10)
- wiki[AWS] ECS + Fargate: 컨테이너 오케스트레이션
- wiki[AWS] EKS: managed Kubernetes
- wiki[GitOps] ArgoCD: Kubernetes GitOps
- wiki[K8s] Helm: 패키지 매니저, chart, release, hook
- wiki[K8s] ConfigMap & Secret: 설정과 비밀의 분리
- wiki[K8s] DaemonSet: 모든 노드에 한 pod
- wiki[K8s] HPA / VPA / KEDA: 자동 확장
- wiki[K8s] Job / CronJob: 일회성 + 스케줄 작업
- wiki[K8s] Pod: 컨테이너의 최소 단위, sidecar, lifecycle
- wiki[K8s] StatefulSet: 순서 보장, 고유 ID, 영속 스토리지
💬 댓글