Kubernetes/Kubernetes Basics

📌 Kubernetes 이벤트 기반 자동 확장: KEDA 사용하기

ygtoken 2025. 3. 4. 11:58
728x90

 

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에서 더 유연하고 비용 효율적인 자동 확장을 구현할 수 있습니다! 🚀

 

 

728x90