AmberAx

KEDA (Kubernetes Event-driven Autoscaling) 소개

· 5 min read
KEDA (Kubernetes Event-driven Autoscaling) 소개

KEDA는 Kubernetes에서 이벤트 기반으로 워크로드를 확장할 수 있도록 돕는 프레임워크입니다.

이는 CPU나 메모리 사용량만을 기준으로 확장하는 기존 Horizontal Pod Autoscaler(HPA)와 달리, 메시지 큐, 데이터베이스, HTTP 요청 등 다양한 이벤트 소스를 트리거로 사용할 수 있는 유연함을 제공합니다.

KEDA는 특히 비정기적이고 이벤트 중심적인 작업이 많은 클라우드 네이티브 애플리케이션 환경에서 유용하며, 비용 효율성과 리소스 최적화를 동시에 추구할 수 있는 강력한 도구로 자리 잡고 있습니다.


KEDA의 주요 특징 #

  • 이벤트 기반 확장 Kafka, RabbitMQ, Azure Event Hubs, AWS SQS와 같은 다양한 이벤트 소스를 지원하여, 특정 이벤트를 기반으로 Pod의 확장 및 축소를 자동화. 이를 통해 워크로드의 변화에 따라 유연하게 리소스를 관리할 수 있음.

  • HPA와의 통합 기존 Kubernetes Horizontal Pod Autoscaler(HPA)와 함께 작동하며, 이벤트 기반 확장 기능을 추가적으로 제공. HPA가 CPU 및 메모리 사용량과 같은 기본 메트릭을 모니터링하는 반면, KEDA는 이벤트 기반 트리거를 통해 더욱 세밀한 확장 전략을 구현 가능.

  • 간단한 설치 Helm Chart 또는 YAML 파일을 사용하여 손쉽게 설치 가능하며, Kubernetes 클러스터에 빠르게 통합 가능.

  • 다양한 Scaler(Trigger) 제공 약 50개 이상의 **Scaler(트리거)**를 제공하며, 사용자는 특정 조건을 설정하여 Pod의 확장/축소를 세밀하게 조정 가능. 예: 특정 Queue의 메시지 수, 데이터베이스 커넥션 수 등.

  • 유휴 상태 지원 이벤트가 없을 경우 Pod의 개수를 0까지 줄일 수 있어, 리소스 사용을 최소화하고 비용 절감에 기여. 이는 온디맨드 방식의 클라우드 리소스 활용을 최적화함.


KEDA의 작동 원리 #

KEDA는 Kubernetes 클러스터에서 컨트롤러Scaler라는 두 가지 주요 구성 요소를 기반으로 동작합니다:

  • 컨트롤러

    • Scaler에서 정의된 트리거 조건을 지속적으로 모니터링.
    • 조건이 충족되면, HPA를 생성하거나 업데이트하여 Pod의 확장/축소를 자동으로 조정.
    • 이를 통해 Kubernetes 네이티브 방식으로 동작하며, 클러스터의 안정성과 확장성을 유지.
  • Scaler

    • 사용자 지정 메트릭 또는 이벤트 소스를 기반으로 트리거 조건을 설정.
    • 예: 특정 Queue의 메시지 개수, 데이터베이스 부하 상태, API 호출 빈도 등.
    • 설정된 조건에 따라 KEDA는 적절한 리소스를 자동으로 할당하여 이벤트 워크로드를 처리.

KEDA의 장점 #

  1. 유연한 확장 전략 이벤트 중심의 확장 및 축소를 통해, 변화하는 워크로드에 실시간으로 대응 가능. 특히, CPU/메모리 외의 사용자 정의 메트릭을 활용하여 확장성을 높임.

  2. 비용 효율성 유휴 상태에서 Pod 수를 0으로 줄일 수 있어 불필요한 리소스 사용을 방지. 클라우드 사용 비용을 효과적으로 절감.

  3. 광범위한 통합성 AWS, Azure, GCP를 비롯한 다양한 클라우드 서비스와 통합 가능하며, 50개 이상의 이벤트 소스를 지원하여 다양한 환경에서 활용 가능.

  4. 간단한 구현 YAML 설정 파일만으로도 손쉽게 확장 정책을 적용할 수 있어, DevOps 팀의 작업 부담을 줄임.

  5. HPA의 확장성 강화 기존 Kubernetes의 HPA 기능을 보완하여 더욱 다양한 시나리오에 대응 가능.

KEDA는 Kubernetes 환경에서 이벤트 기반 확장을 필요로 하는 모든 애플리케이션에 적합한 경량화된 솔루션으로, 클라우드 네이티브 애플리케이션의 운영을 최적화하는 데 매우 유용합니다.


설치 및 사용법 #

설치 방법

KEDA는 Helm Chart나 YAML 파일을 사용하여 간단히 설치할 수 있습니다.

helm repo add kedacore https://kedacore.github.io/charts
helm repo update
helm install keda kedacore/keda --namespace keda --create-namespace

간단한 예제: RabbitMQ 메시지 큐 트리거

아래는 RabbitMQ 큐 길이를 기준으로 Pod를 확장하는 간단한 KEDA 설정 예제입니다:

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: rabbitmq-scaledobject
spec:
  scaleTargetRef:
    name: my-deployment
  triggers:
  - type: rabbitmq
    metadata:
      queueName: my-queue
      host: RabbitMQ-connection-string
      queueLength: "5"

이 설정은 RabbitMQ 큐에 메시지가 5개 이상 쌓이면 Pod를 자동으로 확장하도록 정의합니다.


KEDA의 활용 사례 #

  • 데이터 처리: Kafka나 RabbitMQ를 사용한 이벤트 스트리밍 처리 시 트리거 기반 확장.
  • AI/ML 모델 서빙: 추론 요청 빈도에 따라 API 처리 Pod 확장.
  • IoT 데이터 처리: 센서 데이터 수집 빈도에 따른 실시간 처리.
  • 비용 절감: 이벤트가 없을 경우 Pod를 0개까지 축소해 리소스 절약.

AI 서비스와 KEDA #

KEDA는 AI 서비스 배포에서도 중요한 역할을 할 수 있지만 GPU 활용과 관련된 한계도 존재합니다.

KEDA의 강점

  • CPU 중심 작업 관리: AI 서비스의 데이터 전처리, API 요청 처리 등 CPU를 주로 사용하는 작업의 트래픽 급증에 대응 가능.
  • 이벤트 처리 기반 확장: 추론 요청 수 증가나 데이터 처리 이벤트 발생 빈도를 기준으로 Pod 확장 가능.

GPU 사용량 기반 확장의 한계

  • GPU 사용량을 직접 모니터링하거나 이를 기준으로 Pod를 확장하는 기능은 제공하지 않음.
  • GPU 활용이 중요한 AI 서비스에서는 NVIDIA Kubernetes Device Plugin이나 Kubeflow와 같은 GPU 관리 도구를 추가로 사용해야 함.

대안 및 보완 솔루션

  • Kubeflow: AI 워크플로우 전반을 관리하며, GPU 활용 최적화 지원.
  • NVIDIA Triton Inference Server: GPU 기반 AI 모델 서빙에 최적화된 솔루션.
  • HPA 커스텀 메트릭: GPU 사용량을 기반으로 확장을 설정 가능.

KEDA의 현재 인기도 #

  • GitHub에서 약 8k Star를 기록하며 커뮤니티의 활발한 기여를 받고 있음.
  • 대규모 클라우드 플랫폼(Azure Functions, AWS Lambda 등)의 대안으로 활용되며, 비용 효율성 측면에서 특히 주목받고 있음.
  • Microsoft, Red Hat, Alibaba Cloud와 같은 기업에서도 적극 채택.

KEDA를 선택해야 하는 이유 #

  • 유연한 확장: 다양한 이벤트 소스를 지원하며, 기존 HPA와 통합 가능.
  • 비용 절감: 워크로드가 없는 경우 0개 Pod 상태 유지로 리소스 낭비 감소.
  • 미래 확장 가능성: 커뮤니티 지원이 활발하며, 새로운 Scaler가 지속적으로 추가.

결론 #

KEDA는 Kubernetes 클러스터에서 이벤트 기반 워크로드를 효율적으로 관리하고, 비용 절감과 확장성을 제공하는 강력한 도구입니다. 특히 비정기적 이벤트 처리와 CPU 중심 워크로드 관리에서 강점을 보이며, 다양한 클라우드 네이티브 환경에 적용할 수 있습니다.

AI와 같이 GPU 사용이 중요한 서비스에서는 KEDA와 Kubeflow 또는 NVIDIA Triton과 같은 도구를 조합하여 활용하는 것이 더 적합할 수 있습니다. 이벤트 기반의 동적 확장이 필요한 상황에서는 KEDA가 적합한 선택지가 될 것입니다.

Did you find this post helpful?
Share it with others!