728x90
반응형
Deployment란?
Deployment는 Pod를 직접 띄우는 리소스가 아니라, "원하는 상태(desired state)의 Pod를 안정적으로 유지/업데이트"하도록 ReplicaSet을 관리하는 상위 컨트롤러.
- "항상 nginx Pod 2개를 유지해줘"
- "이미지를 nginx:1.27 → 1.28로 무중단(rolling)으로 바꿔줘"
- "업데이트가 문제 생기면 이전 버전으로 롤백해줘"
이런 걸 담당.
Deployment가 관리하는 흐름
Deployment → ReplicaSet → Pod
- Deployment: 업데이트 전략/버전 히스토리/롤백/스케일 등 "운영 레벨"을 관리
- ReplicaSet: 특정 Pod 템플릿으로 "몇 개 유지할지" 관리
- Pod: 실제 컨테이너 실행 단위
즉, Deployment를 만들면 보통 내부적으로 ReplicaSet이 자동으로 생기고, 그 ReplicaSet이 Pod를 만든다.
Deployment 기본 구조
1. replicas: 원하는 Pod 개수
2. selector.machLabels: 어떤 Pod를 "내 Pod"로 볼지
3. template.metadata.labels: 실제 생성될 Pod 라벨 (selector와 반드시 맞아야 함)
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec: # 라벨이 app=web인 Pod를 내가 관리하는 Pod로 보겠다.
replicas: 2
selector:
matchLabels:
app: web
template: # 내가 새로 만들 Pod는 이렇게 만들겠다.
metadata:
labels:
app: web
spec:
containers:
- name: app
image: nginx:1.27
업데이트(배포) 전략: RollingUpdate가 기본
RollingUpdate 개념
기본적으로 Deployment는 새 버전 Pod를 조금씩 늘리고, 기존 버전 Pod를 조금씩 줄이면서 교체한다.
- maxSurge: 업데이트 중 추가로 더 띄워도 되는 Pod 수
- maxUnavailable: 업데이트 중 일시적으로 Unavailable(중단) 되어도 되는 Pod 수
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
→ 2개 유지 중이면, 업데이트 중에서 최대 3가까지 잠깐 늘릴 수 있고, 다운타임 없이(0 unavailable) 바꿈.
롤백
배포가 문제 생기면 이전 revision으로 되돌릴 수 있다.
명령어
kubectl rollout status deploy/web
kubectl rollout history deploy/web
kubectl rollout undo deploy/web
# 특정 revision으로
kubectl rollout undo deploy/web --to-revision=2
스케일링
kubectl scale deploy/web --replicas=5
실습
1) Deployment 생성
kubectl create deploy web --image=nginx:1.27 --replicas=2
kubectl get deploy,rs,po -l app=web
2) 이미지 업데이트(롤링)
kubectl set image deploy/web nginx=nginx:1.28
kubectl rollout status deploy/web
kubectl get rs -l app=web
- 새 ReplicaSet이 생기고, 이전 ReplicaSet은 줄어드는 걸 볼 수 있음.
3) 문제가 생겼다고 가정하고 롤백
kubectl rollout undo deploy/web
kubectl rollout status deploy/web728x90
반응형
'CKA' 카테고리의 다른 글
| [k8s] 스케줄링 기본기: nodeSelector / nodeAffinity / podAntiAffinity로 Pod 배치 제어하기 (실습 포함) (0) | 2026.02.22 |
|---|---|
| [k8s] Secret 정리 (ConfigMap 차이) (0) | 2026.02.20 |
| [k8s] ConfigMap 정리(Env/Volume 주입, 변경 반영, 실습 포인트) (0) | 2026.02.17 |
| [k8s] kubectl 자동완성(Tab completion) 설정하기 : zsh에서 kubectl completion 켜는 방법 (0) | 2026.02.16 |
| [k8s] namespace 구분 (0) | 2026.02.15 |