Kubernetes Deployment 완전정복: Pod 배포와 업데이트 자동화의 핵심 리소스
Kubernetes Deployment: 무중단 배포를 위한 핵심 리소스
Kubernetes에서 Deployment(디플로이먼트) 는 실제 운영 환경에서 가장 많이 사용되는 Pod 관리 리소스입니다.
단순히 Pod를 실행하는 것에 그치지 않고, 버전 업데이트, 롤백, 스케일링, 자동 복구 기능까지 포괄합니다.
이번 글에서는 다음과 같은 내용을 다룹니다:
- Deployment란 무엇인가?
- 왜 ReplicaSet보다 Deployment를 사용해야 하는가?
- YAML 예시와 명령어 실습
- 롤링 업데이트와 롤백
- 실전 운영 팁 및 자주 묻는 질문
1. Deployment란?
Deployment는 내부적으로 ReplicaSet을 생성하고 관리하며, 사용자에게는 상위 레벨의 배포/운영 기능을 제공합니다.
쉽게 말해,
"Deployment는 내 앱이 항상 정해진 수만큼 실행되고, 새로운 버전으로 점진적으로 바뀌도록 보장해주는 설계도"입니다.
2. 왜 ReplicaSet 대신 Deployment를 사용하는가?
비교 항목 | ReplicaSet | Deployment |
---|---|---|
사용 목적 | Pod 복제 유지 | Pod 배포 및 버전 관리 |
업데이트 기능 | 없음 | 롤링 업데이트 지원 |
롤백 기능 | 없음 | kubectl rollout undo 로 가능 |
운영 추천도 | 낮음 (비직관적) | 높음 (표준 방식) |
즉, ReplicaSet은 기초 레벨 제어, Deployment는 실전 배포 전용입니다.
3. Deployment YAML 기본 구조
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
설명:
replicas
: 실행할 Pod 수selector
: 관리 대상 Pod 식별용 라벨template
: Pod 사양 (컨테이너, 이미지, 포트 등)
4. Deployment 생성 및 확인
kubectl apply -f deployment.yaml
kubectl get deployments
kubectl get pods
배포 후, 지정된 수의 Pod가 자동으로 생성됩니다. 삭제되어도 다시 생성됩니다.
5. Deployment 업데이트
이미 배포된 컨테이너 이미지 버전을 바꿔보겠습니다:
kubectl set image deployment/my-deployment nginx=nginx:1.23
롤링 업데이트
Deployment는 모든 Pod를 한꺼번에 교체하지 않고, 순차적으로 교체합니다.
이를 롤링 업데이트(Rolling Update) 라고 하며, 무중단 배포가 가능해집니다.
6. 배포 상태 확인
kubectl rollout status deployment/my-deployment
롤백
kubectl rollout undo deployment/my-deployment
실수로 잘못된 버전을 배포해도 쉽게 원상복구할 수 있습니다.
7. 수동 스케일링
kubectl scale deployment/my-deployment --replicas=5
ReplicaSet과 마찬가지로 Deployment도 수평 확장이 가능합니다.
8. 자주 묻는 질문 (FAQ)
Q1. Deployment와 ReplicaSet 둘 다 필요할까요?
아닙니다. Deployment만 정의하면 내부에서 자동으로 ReplicaSet이 생성되어 관리됩니다.
Q2. 롤링 업데이트 중 장애가 생기면 어떻게 하나요?
Deployment는 업데이트 중 문제가 발생하면 자동으로 중단하거나 롤백할 수 있습니다.
Q3. Canary 배포도 가능한가요?
일부 Pod만 먼저 새 버전으로 교체하는 Canary 전략은 별도 설정 및 Istio 등과 연동해 가능합니다.
9. 운영 팁
minReadySeconds
,strategy.rollingUpdate.maxUnavailable
등의 옵션을 활용하면 배포 안정성을 조정할 수 있습니다.revisionHistoryLimit
를 설정하여 이전 버전 개수를 제한하면 리소스 절약에 도움이 됩니다.kubectl rollout history
를 통해 버전 히스토리를 확인할 수 있습니다.
10. 요약
항목 | 설명 |
---|---|
목적 | Pod 배포, 업데이트, 롤백 등 자동화 |
업데이트 방식 | 롤링 업데이트 (무중단) |
버전 관리 | 자동 히스토리 관리 및 롤백 지원 |
운영 난이도 | 쉬움, 실무 배포에 필수 |