1️⃣ 개요
쿠버네티스에서 Deployment(디플로이먼트) 는 애플리케이션을 선언적으로 배포하고 관리하는 주요 리소스입니다.
Deployment를 활용하면 Pod 개수를 자동으로 조정하고, 버전 업데이트 및 롤백(Rollback) 등의 기능을 쉽게 사용할 수 있습니다.
이번 글에서는 Deployment의 핵심 개념과 활용하는 방법을 정리하겠습니다. 🚀
2️⃣ Deployment란?
✅ Deployment의 주요 기능
기능 | 설명 |
Pod 개수 유지 | 지정한 개수만큼 Pod가 항상 실행되도록 보장 |
버전 업데이트 | 새로운 애플리케이션 버전을 배포 가능 |
롤백 지원 | 문제가 발생하면 이전 버전으로 쉽게 복구 가능 |
Rolling Update 지원 | 기존 Pod를 점진적으로 교체하여 무중단 배포 가능 |
✅ Deployment는 내부적으로 ReplicaSet을 생성하여 Pod를 관리합니다.
3️⃣ Deployment와 ReplicaSet의 차이
Deployment와 ReplicaSet은 모두 Pod 개수를 관리하지만, Deployment는 추가적인 기능을 제공합니다.
📌 Deployment vs ReplicaSet 비교
특징 | ReplicaSet | Deployment |
Pod 개수 유지 | ✅ 가능 | ✅ 가능 |
버전 관리 | ❌ 불가능 | ✅ 가능 |
롤백 지원 | ❌ 불가능 | ✅ 가능 |
Rolling Update 지원 | ❌ 불가능 | ✅ 가능 |
✅ 운영 환경에서는 대부분 Deployment를 사용하여 애플리케이션을 배포합니다.
4️⃣ Deployment 기본 설정과 생성 방법
✅ 1. Deployment 생성 예제
아래는 3개의 Pod를 실행하는 Deployment 설정 파일입니다.
📌 Deployment YAML 예제 (Nginx 배포)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx
📌 Deployment 적용 방법
kubectl apply -f deployment.yaml
📌 배포된 Deployment 확인
kubectl get deployments
📌 Deployment가 생성한 ReplicaSet 확인
kubectl get rs
✅ Deployment는 내부적으로 ReplicaSet을 생성하여 Pod 개수를 유지합니다.
5️⃣ Deployment 실전 활용 방법
🚀 1. Pod 개수 변경 (Scale Up/Down)
• 트래픽 증가 또는 감소에 따라 Pod 개수를 조절할 수 있습니다.
📌 Pod 개수 5개로 조정
kubectl scale deployment my-deployment --replicas=5
📌 현재 실행 중인 Pod 개수 확인
kubectl get pods
✅ Pod 개수를 동적으로 변경하여 서비스 운영을 최적화할 수 있습니다.
🚀 2. Deployment 업데이트 (Rolling Update 적용)
• Deployment를 수정하면 기존 Pod를 점진적으로 새로운 버전으로 교체(Rolling Update) 합니다.
📌 Deployment YAML 수정 (nginx:latest → nginx:1.23)
spec:
template:
spec:
containers:
- name: my-container
image: nginx:1.23 # 새로운 버전
📌 Deployment 업데이트 적용
kubectl apply -f deployment.yaml
📌 Rolling Update 진행 상황 확인
kubectl rollout status deployment my-deployment
✅ Rolling Update를 활용하면 무중단 배포가 가능합니다.
🚀 3. Deployment 롤백 (Rollback 기능 활용)
• Deployment 업데이트 중 문제가 발생하면 이전 버전으로 롤백할 수 있습니다.
📌 현재 배포된 버전 기록 확인
kubectl rollout history deployment my-deployment
📌 이전 버전으로 롤백 실행
kubectl rollout undo deployment my-deployment
✅ 롤백 기능을 활용하면 안정적인 배포 운영이 가능합니다.
6️⃣ Deployment 사용 시 주의해야 할 점
✅ 1. ReplicaSet을 직접 관리하지 않아야 함
• Deployment는 내부적으로 ReplicaSet을 생성하여 관리합니다.
• kubectl delete replicaset 명령어로 직접 삭제하면 문제가 발생할 수 있음
📌 현재 Deployment가 관리하는 ReplicaSet 확인
kubectl get rs
✅ Deployment를 사용할 때는 ReplicaSet을 직접 수정하지 않고, Deployment를 통해 관리해야 합니다.
✅ 2. 적절한 maxUnavailable 및 maxSurge 설정
• Rolling Update 시 최대 몇 개의 Pod를 동시에 교체할 것인지 설정해야 합니다.
• maxUnavailable: 배포 중 한 번에 몇 개의 Pod를 비활성화할 것인지 설정
• maxSurge: 한 번에 몇 개의 새로운 Pod를 추가할 것인지 설정
📌 Rolling Update 최적화 설정 예제
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1 # 동시에 1개만 종료
maxSurge: 2 # 동시에 2개까지 추가 배포 가능
✅ 이 설정을 활용하면 배포 속도를 조절할 수 있습니다.
🔥 7️⃣ 결론
✔ Deployment는 애플리케이션을 선언적으로 배포하고 관리하는 주요 리소스
✔ Pod 개수를 유지하며, 새로운 버전 배포 및 롤백을 쉽게 수행할 수 있음
✔ Deployment는 내부적으로 ReplicaSet을 생성하여 Pod 개수를 관리
✔ Rolling Update를 활용하면 무중단 배포 가능, 문제가 발생하면 롤백 기능 제공
✔ 운영 환경에서는 maxUnavailable 및 maxSurge 값을 조정하여 최적화해야 함
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [Deployment 심화편 #3] Deployment와 Rolling Update: 무중단 배포 전략 (0) | 2025.03.13 |
---|---|
📌 [Deployment 심화편 #2] Deployment의 동작 원리와 트러블슈팅 (0) | 2025.03.13 |
📌 [ReplicaSet 심화편 #9] ReplicaSet과 Node Selector: 특정 노드에 Pod 배포 전략 (0) | 2025.03.12 |
📌 [ReplicaSet 심화편 #8] ReplicaSet과 Taints & Tolerations: 특정 노드에 Pod 배포 제어 (0) | 2025.03.12 |
📌 [ReplicaSet 심화편 #7] ReplicaSet과 Anti-Affinity: 특정 노드 간 분산 배포 전략 (0) | 2025.03.12 |