반응형
EKS(Amazon Elastic Kubernetes Service)에서 Deployment는 애플리케이션을 배포하고 관리하는 Kubernetes의 컨트롤러 객체 중 하나야.
🔹 Deployment의 역할
- 애플리케이션 배포 (Deploying Applications)
- 컨테이너화된 애플리케이션(Pod)을 Kubernetes 클러스터에 배포해.
- 자동화된 업데이트 (Automated Updates)
- 새로운 버전의 애플리케이션을 배포하면서, 기존 버전을 점진적으로 교체(롤링 업데이트)하거나 빠르게 롤백할 수 있어.
- 셀프힐링(Self-Healing)
- 장애가 발생한 Pod을 자동으로 다시 시작해서 애플리케이션을 안정적으로 유지해.
- 수평 확장(Scaling)
- 필요에 따라 Pod 개수를 늘리거나 줄일 수 있어(수동/자동 조정 가능).
🔹 Deployment 구조
Deployment는 기본적으로 ReplicaSet을 관리하면서 Pod을 배포하는 구조야.
Deployment → ReplicaSet → Pod
- Deployment: 원하는 애플리케이션 상태를 정의하고 관리하는 최상위 객체.
- ReplicaSet: Deployment가 생성하는 객체로, 원하는 수의 Pod을 유지.
- Pod: 실제 애플리케이션 컨테이너가 실행되는 단위.
🔹 Deployment YAML 예제
아래는 Nginx 웹 서버를 3개의 복제본(Pod)으로 배포하는 Deployment 예제야.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
labels:
app: nginx
spec:
replicas: 3 # 실행할 Pod 개수
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest # 사용할 컨테이너 이미지
ports:
- containerPort: 80
📌 주요 속성 설명
- replicas: 3 → Pod을 3개 실행.
- selector.matchLabels → 특정 라벨을 가진 Pod을 관리.
- template.spec.containers → 실행할 컨테이너를 정의.
🔹 Deployment 배포 & 관리 명령어
EKS(Kubernetes)에서 Deployment를 생성하고 관리하는 기본적인 kubectl 명령어는 다음과 같아.
1️⃣ Deployment 생성
kubectl apply -f deployment.yaml
2️⃣ Deployment 상태 확인
kubectl get deployments
3️⃣ Pod 목록 확인
kubectl get pods
4️⃣ Deployment 수정
Deployment를 업데이트하려면 YAML을 수정한 후 다시 적용하면 돼.
kubectl apply -f deployment.yaml
5️⃣ 롤링 업데이트(버전 업데이트)
kubectl set image deployment/my-nginx nginx=nginx:1.19
6️⃣ 롤백 (이전 버전으로 되돌리기)
kubectl rollout undo deployment my-nginx
7️⃣ Deployment 삭제
kubectl delete deployment my-nginx
🔹 Deployment vs StatefulSet vs DaemonSet 차이점
유형설명사용 예제
Deployment | 일반적인 배포 방식. 필요 시 Pod 개수를 조정 가능 | 웹 서버, API 서버 |
StatefulSet | 상태가 중요한 애플리케이션을 위한 배포 방식 | 데이터베이스 (MySQL, MongoDB) |
DaemonSet | 모든 노드에 하나의 Pod을 배포하는 방식 | 로그 수집, 모니터링 에이전트 |
✅ 결론
EKS에서 Deployment는 컨테이너화된 애플리케이션을 배포하고, 업데이트 및 확장하는 핵심 기능이야. Kubernetes의 셀프힐링, 롤링 업데이트, 확장성을 활용해서 안정적인 애플리케이션 운영이 가능하지! 🚀
반응형