
kubectl create deployment nginx --image=nginx:1.16: 새로운 Deployment를 생성합니다.kubectl get deployments: 현재 클러스터의 Deployment 목록을 확인합니다.kubectl describe deployment <이름>: 특정 Deployment에 대한 상세 정보를 확인합니다.kubectl delete deployment <이름>: Deployment를 삭제합니다.배포 상태는 Deployment가 처음 만들어질 때, 또는 업데이트가 이루어질 때 관리됩니다.
kubectl rollout status deployment <이름>: 현재 배포 진행 상황을 확인합니다.kubectl rollout pause deployment <이름>: 배포 상태를 일시적으로 중지합니다.kubectl rollout resume deployment <이름>: 중지된 배포를 재개합니다.Deployment에 변경이 발생할 때마다 새로운 Revision이 추가됩니다.
kubectl rollout history deployment <이름>: Deployment의 리비전 이력을 확인합니다.kubectl rollout history deployment <이름> --revision=N: 특정 리비전에 대한 상세 정보를 확인합니다.--record 옵션을 사용하면, Deployment를 업데이트할 때 어떤 명령으로 변경했는지 기록할 수 있습니다.
kubectl set image deployment nginx nginx=nginx:1.17 --record: 이미지 업데이트와 동시에 변경 원인 기록.kubectl edit deployment nginx --record: YAML을 편집하며 변경 원인 기록.kubectl rollout history deployment nginx: 리비전 목록에서 change-cause를 확인합니다.Deployment를 이전 리비전으로 되돌리는 방법입니다.
kubectl rollout undo deployment <이름>: 직전 리비전으로 롤백합니다.kubectl rollout undo deployment <이름> --to-revision=N: 특정 리비전으로 롤백합니다.kubectl describe deployment <이름> | grep -i image: 롤백 후 실제 이미지 버전 확인합니다.추가 제어 옵션:
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1 # 동시에 내려갈 Pod 수
maxSurge: 1 # 동시에 더 올라갈 Pod 수
예시:
# v1 배포 (Blue)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-blue
spec:
replicas: 5
selector:
matchLabels:
app: myapp
version: v1
template:
metadata:
labels:
app: myapp
version: v1
spec:
containers:
- name: myapp
image: myapp:v1
# v2 배포 (Green)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-green
spec:
replicas: 5
selector:
matchLabels:
app: myapp
version: v2
template:
metadata:
labels:
app: myapp
version: v2
spec:
containers:
- name: myapp
image: myapp:v2
예시:
# Primary 배포 (구버전, 다수 Pod)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-primary
spec:
replicas: 5
selector:
matchLabels:
app: frontend
version: v1
template:
metadata:
labels:
app: frontend
version: v1
spec:
containers:
- name: myapp
image: myapp:v1
# Canary 배포 (신버전, 소수 Pod)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-canary
spec:
replicas: 1 # 소량만 배포
selector:
matchLabels:
app: frontend
version: v2
template:
metadata:
labels:
app: frontend
version: v2
spec:
containers:
- name: myapp
image: myapp:v2
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
spec:
selector:
app: frontend # version은 구분 안 함
ports:
- port: 80
targetPort: 8080
| 전략 | 특징 | 장점 | 단점 | 사용 시기 |
|---|---|---|---|---|
| Recreate | 구버전 Pod 전부 종료 후 신버전 전부 생성 | 단순, 깨끗한 전환 | 다운타임 발생, 사용자 서비스 중단 | - 다운타임 허용되는 내부 시스템 - DB 스키마 충돌 등 구/신버전 동시 실행 불가할 때 |
| Rolling Update | 구버전 Pod 하나씩 줄이고 신버전 Pod 하나씩 늘림 | 무중단 배포, 안정적 | 배포 속도 느림 | - 일반적인 웹 서비스 - 실시간 서비스(무중단 필요) |
| Blue-Green | Blue(구버전)와 Green(신버전) 동시 실행, 트래픽 스위치로 전환 | 빠른 롤백, 안정적인 전환 | 리소스 소모 2배 | - 대규모 릴리즈 - 장애 리스크가 큰 배포 |
| Canary | 일부 Pod에 신버전만 배포, 점진적으로 전체 확산 | 리스크 최소화, 안정성 검증 | 세밀한 트래픽 제어 어려움 | - 새 기능/버전 점진적 도입 - 리스크를 최소화하고 실서비스 검증 필요 |