KEDA 시리즈 1 - 개념과 아키텍처

2026년 03월 01일

devops

# Kubernetes# KEDA# Autoscaling# CNCF# DevOps

개요

Kubernetes의 기본 오토스케일러인 HPA는 CPU와 메모리 사용률을 기반으로 동작합니다. 하지만 실제 워크로드는 CPU가 아닌 이벤트에 반응해야 하는 경우가 많습니다.

  • Kafka topic에 메시지가 쌓이면 consumer를 늘려야 한다
  • 새벽에는 트래픽이 없으니 Pod를 완전히 내리고 싶다
  • 업무 시간에는 최소 N개를 항상 유지해야 한다

HPA만으로는 이런 요구사항을 충족하기 어렵습니다. KEDA는 이 간극을 메우기 위해 만들어진 도구입니다.

KEDA가 필요한 대표적인 상황:

상황 HPA KEDA
Kafka consumer lag 기반 스케일링 불가 가능
이벤트 없을 때 Pod 0으로 축소 불가 (최소 1) 가능
시간대별 스케줄 스케일링 불가 가능
Redis/RabbitMQ 큐 길이 기반 스케일링 불가 가능
CPU/Memory 기반 스케일링 가능 가능 (KEDA가 HPA를 내부 활용)

KEDA는 HPA를 대체하는 것이 아니라, HPA가 다루지 못하는 외부 메트릭을 HPA에 연결해주는 어댑터 역할을 합니다. 기존 HPA 위에 얹히는 구조라 기존 Kubernetes 워크플로우와 충돌하지 않습니다.


KEDA란?

KEDA(Kubernetes Event-Driven Autoscaling)는 Kubernetes에서 이벤트 소스(Kafka lag, HTTP 요청 수, Redis 큐 길이 등)를 기반으로 워크로드를 자동 확장/축소하는 오픈소스 컴포넌트입니다.

기본 HPA(Horizontal Pod Autoscaler)는 CPU/Memory 메트릭만 지원하지만, KEDA는 외부 이벤트 소스에 연결된 30+ Scaler를 제공합니다.

KEDA가 해결하는 문제

KEDAYesYesYes

Kafka lag > 1000?

Consumer Pod 추가

HTTP RPS > 100?

API Pod 추가

새벽 2시?

Pod 0으로 축소

기본 HPAYesNo

CPU 70% 초과?

Pod 추가

현상 유지

HPA와 가장 큰 차이점은 Pod를 0으로 축소(scale-to-zero) 할 수 있다는 점입니다. 이벤트가 없을 때 Pod를 완전히 제거하고, 이벤트 발생 시 다시 시작합니다.


아키텍처

App NamespaceKEDA Namespacemetricswatchescreates & managesprovides metricsscales

External Event Source\nKafka / HTTP / Redis / ...

KEDA Operator

Metrics Server

ScaledObject / ScaledJob

HPA (KEDA가 자동 생성)

Application Pods

KEDA는 내부적으로 HPA를 생성하고 관리합니다. 직접 HPA를 조작하지 않아도 됩니다.

핵심 CRD

CRD 용도
ScaledObject Deployment, StatefulSet 등 상시 실행 워크로드 스케일링
ScaledJob Job 단위로 실행되는 배치 워크로드 스케일링
TriggerAuthentication Scaler 인증 정보(시크릿 참조) 분리 관리

Pod Scale-out 과정

KEDA가 외부 이벤트를 감지한 뒤 실제로 Pod가 늘어나기까지 두 레이어를 거칩니다.

Layer 1 - KEDA 컴포넌트 간 흐름

HPAKEDA OperatorMetrics ServerKEDA ScalerExternal SourceHPAKEDA OperatorMetrics ServerKEDA ScalerExternal Sourceloop[pollingInterval마다]메트릭 조회 (lag, RPS 등)현재 메트릭 값 반환외부 메트릭 등록메트릭 요청외부 메트릭 값 반환목표 replica 수 계산scale 요청ScaledObject 상태 업데이트

각 컴포넌트의 역할:

  • Scaler: 외부 이벤트 소스에 직접 연결해 메트릭을 가져오는 플러그인. Kafka면 consumer lag, Redis면 list length를 조회
  • Metrics Server: Scaler가 가져온 값을 Kubernetes Custom Metrics API 형태로 노출. HPA가 이 API를 통해 외부 메트릭을 읽음
  • KEDA Operator: ScaledObject를 감시하고 대응하는 HPA를 생성/삭제/업데이트. scale-to-zero도 이 Operator가 직접 처리 (HPA는 0 replica를 지원하지 않으므로)
  • HPA: 실제 Deployment의 replica 수를 조절하는 Kubernetes 기본 컨트롤러

Layer 2 - Kubernetes 내부 메커니즘

HPA가 scale 결정을 내린 뒤 실제 Pod가 생성되기까지의 흐름입니다.

New Podkubeletkube-schedulerkube-apiserverHPA ControllerNew Podkubeletkube-schedulerkube-apiserverHPA ControllerDeployment replicas 업데이트ReplicaSet 생성/업데이트미배치 Pod 이벤트Node 선택 (리소스, affinity 등)Pod에 Node 바인딩Pod 스펙 전달컨테이너 이미지 pull컨테이너 실행readinessProbe 통과Pod Ready 상태 보고

각 단계 설명:

  1. HPA → kube-apiserver: HPA controller가 계산한 replica 수로 Deployment를 업데이트
  2. ReplicaSet 생성: Deployment controller가 차이만큼 새 Pod 스펙을 가진 ReplicaSet 생성
  3. kube-scheduler: Pending 상태 Pod를 감지하고 Node의 가용 리소스, nodeSelector, affinity, taint/toleration을 검토해 배치할 Node 결정
  4. kubelet: 배정된 Node의 kubelet이 컨테이너 이미지를 pull하고 컨테이너 실행
  5. readinessProbe: readinessProbe를 통과해야 Service 엔드포인트에 등록되어 트래픽을 받기 시작

Scale-to-zero 특수 처리

HPA는 replica를 0으로 설정할 수 없습니다. KEDA Operator가 이를 직접 처리합니다.

YesYesNoNoYes

메트릭 = 0?

cooldownPeriod 대기

여전히 0?

KEDA Operator가\nDeployment replicas=0으로 직접 패치

HPA에게 제어 반환

HPA가 정상 스케일링

새 이벤트 발생?

KEDA Operator가\nreplicas=1로 복구 후 HPA에게 제어 반환

  • scale-to-zero: KEDA Operator가 Deployment를 직접 0으로 패치
  • scale-from-zero: 새 이벤트 감지 시 Operator가 1로 복구한 뒤 HPA가 이후 스케일링을 이어받음

설치

helm repo add kedacore https://kedacore.github.io/charts
helm repo update

helm install keda kedacore/keda \
  --namespace keda \
  --create-namespace

설치 확인:

kubectl get pods -n keda
# NAME                                      READY   STATUS
# keda-operator-xxx                         1/1     Running
# keda-operator-metrics-apiserver-xxx       1/1     Running

다음: KEDA 시리즈 2 - ScaledObject/ScaledJob 사용법

© 2026, 미나리와 함께 만들었음