1️⃣ Kubernetes에서 이벤트 기반 확장이 필요한 이유?
Kubernetes의 **Horizontal Pod Autoscaler(HPA)**는 CPU & 메모리 사용량을 기준으로 자동 확장합니다.
하지만 애플리케이션의 트래픽 패턴이 다양할 경우, HPA만으로는 충분하지 않을 수 있습니다.
✅ KEDA(Kubernetes Event-Driven Autoscaling)는 다음과 같은 경우 유용합니다.
✔ 이벤트 기반 확장 → 메시지 큐(예: Kafka, RabbitMQ) 또는 DB 쿼리 개수를 기반으로 확장
✔ 비용 절감 → 요청이 없을 때 Pod 개수를 0으로 줄여 리소스 사용 최소화
✔ 다양한 확장 트리거 지원 → AWS SQS, Azure Service Bus, HTTP 요청 등과 연동 가능
KEDA를 사용하면 트래픽 패턴에 맞춰 더욱 유연한 자동 확장을 구현할 수 있습니다! 🚀
2️⃣ KEDA란?
📌 **KEDA(Kubernetes Event-Driven Autoscaler)**는 특정 이벤트 발생 시 Kubernetes Pod 개수를 자동 조정하는 도구입니다.
✅ HPA와 KEDA 비교
특징HPA(Horizontal Pod Autoscaler)KEDA(Kubernetes Event-Driven Autoscaler)
확장 기준 | CPU & 메모리 사용량 | 메시지 큐, DB, HTTP 요청 등 다양한 이벤트 |
최소 Pod 수 | 1 이상 유지 | 0까지 축소 가능 (완전한 스케일 다운) |
사용 사례 | 일반적인 트래픽 증가 대응 | 비동기 이벤트 처리, 메시지 큐 기반 확장 |
✅ KEDA는 서버리스(Serverless)와 유사한 동작을 하며, 리소스 사용을 최적화할 수 있습니다.
3️⃣ KEDA 설치 및 설정하기
KEDA는 Helm Chart를 사용하여 간편하게 설치할 수 있습니다.
✅ Step 1: KEDA 설치
📌 Helm으로 KEDA 배포
helm repo add kedacore https://kedacore.github.io/charts
helm repo update
helm install keda kedacore/keda --namespace keda --create-namespace
📌 KEDA가 정상적으로 설치되었는지 확인
kubectl get pods -n keda
✅ KEDA가 실행 중인지 확인 후, 확장 트리거를 설정할 수 있습니다.
4️⃣ 메시지 큐 기반 자동 확장 (RabbitMQ 예제)
📌 KEDA는 RabbitMQ, Kafka, AWS SQS 등의 메시지 큐를 기반으로 확장을 수행할 수 있습니다.
✅ Step 1: RabbitMQ Pod 배포
📌 RabbitMQ 배포 (rabbitmq.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: rabbitmq
spec:
replicas: 1
selector:
matchLabels:
app: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
containers:
- name: rabbitmq
image: rabbitmq:3-management
ports:
- containerPort: 5672
- containerPort: 15672
📌 RabbitMQ 배포 명령어
kubectl apply -f rabbitmq.yaml
✅ RabbitMQ가 정상적으로 실행되는지 확인 (kubectl get pods)
✅ Step 2: KEDA ScaledObject 설정 (RabbitMQ 큐 기반 확장)
📌 KEDA ScaledObject 정의 (scaledobject-rabbitmq.yaml)
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: rabbitmq-scaler
namespace: default
spec:
scaleTargetRef:
kind: Deployment
name: my-app
minReplicaCount: 0 # 이벤트가 없을 때 0으로 축소
maxReplicaCount: 10 # 최대 10개까지 확장 가능
triggers:
- type: rabbitmq
metadata:
queueName: my-queue
host: "amqp://guest:guest@rabbitmq.default.svc.cluster.local:5672/"
queueLength: "5"
📌 배포 명령어
kubectl apply -f scaledobject-rabbitmq.yaml
✅ 메시지 큐에 5개 이상의 메시지가 쌓이면 Pod가 자동 확장됨!
5️⃣ HTTP 요청 기반 자동 확장 (Prometheus Metrics 활용)
📌 KEDA는 HTTP 요청 수가 일정 수준 이상이면 자동으로 Pod 개수를 조정할 수도 있습니다.
✅ Step 1: Prometheus & KEDA 확장 트리거 설정
📌 KEDA ScaledObject 정의 (scaledobject-http.yaml)
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: http-scaler
spec:
scaleTargetRef:
name: my-app
minReplicaCount: 1
maxReplicaCount: 10
cooldownPeriod: 30
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus.default.svc.cluster.local
query: avg(rate(http_requests_total[2m])) > 5
📌 배포 명령어
kubectl apply -f scaledobject-http.yaml
✅ HTTP 요청이 초당 5개 이상 발생하면 자동으로 Pod가 확장됨!
6️⃣ KEDA 활용 사례
KEDA는 다양한 이벤트 소스를 기반으로 자동 확장을 지원합니다.
사용 사례이벤트 소스
메시지 큐 기반 확장 | RabbitMQ, Kafka, AWS SQS |
데이터베이스 큐 기반 확장 | PostgreSQL, MySQL |
HTTP 트래픽 기반 확장 | Prometheus HTTP 요청 지표 |
Azure 이벤트 기반 확장 | Azure Service Bus, Event Hub |
✅ KEDA를 활용하면 애플리케이션의 트래픽 패턴에 맞춰 유연한 자동 확장이 가능! 🚀
📌 결론: KEDA를 사용하면 Kubernetes 확장이 더욱 유연해진다!
✔ 이벤트 기반 확장 → CPU/메모리 외에도 메시지 큐, HTTP 요청 등을 기반으로 확장 가능
✔ Pod 0까지 축소 가능 → 트래픽이 없을 때 리소스 사용량 최소화
✔ 비동기 메시지 기반 워크로드에 적합 → RabbitMQ, Kafka 등과 함께 사용 가능
✔ HPA보다 더 정밀한 자동 확장 가능 → 다양한 이벤트 트리거와 연동 가능
🔥 KEDA를 사용하면 Kubernetes에서 더 유연하고 비용 효율적인 자동 확장을 구현할 수 있습니다! 🚀
'Kubernetes > Kubernetes Basics' 카테고리의 다른 글
📌 Kubernetes CI/CD 파이프라인 최적화 (GitHub Actions, ArgoCD 심화) (0) | 2025.03.04 |
---|---|
📌 Kubernetes Helm 활용: 효율적인 애플리케이션 배포 전략 (0) | 2025.03.04 |
📌 Kubernetes CI/CD 최적화: GitOps 운영 방식 이해하기 (0) | 2025.03.03 |
📌 Kubernetes 배포 전략: Canary & Blue-Green 배포 이해하기 (0) | 2025.03.03 |
📌 Kubernetes 로그 & 모니터링 운영 전략 (0) | 2025.03.03 |