KEDA vs. Kubernetes HPA: Event-Driven Autoscaling im Vergleich 2026
Kubernetes skaliert Workloads standardmäßig über den Horizontal Pod Autoscaler (HPA) — basierend auf CPU- und Memory-Metriken. Für moderne, Event-Driven-Architekturen reicht das oft nicht aus. KEDA (Kubernetes Event-Driven Autoscaling) füllt diese Lücke mit über 50 eingebauten Skalierungstriggern für Message Queues, Datenbanken, HTTP und mehr.
Der native Kubernetes HPA
Der HPA ist seit Kubernetes 1.2 Teil des Kerns und skaliert Deployments, StatefulSets und andere Workloads anhand von Metriken. Er fragt den Metrics Server ab (CPU, Memory) oder nutzt Custom Metrics via dem Prometheus Adapter.
HPA-Konfiguration (CPU-basiert):
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: api-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
Stärken des HPA:
- Kein zusätzliches Tool nötig — Teil von Kubernetes
- Gut dokumentiert, stabile API
- Unterstützt Custom Metrics via Prometheus Adapter
- Einfach zu verstehen und zu debuggen
Schwächen des HPA:
- Reagiert auf aktuelle Last, nicht auf bevorstehende Last
- Skaliert auf 0 nicht möglich (mind. 1 Replica)
- Kein direktes Event-Driven-Scaling ohne Custom Metrics-Setup
Was ist KEDA?
KEDA ist ein Kubernetes-Operator, der als Custom Controller im Cluster läuft und eigene Custom Resource Definitions (CRDs) mitbringt. Es installiert sich als Helm Chart und erweitert den HPA, anstatt ihn zu ersetzen.
helm repo add kedacore https://kedacore.github.io/charts
helm install keda kedacore/keda --namespace keda --create-namespace
KEDA bringt zwei eigene Ressourcentypen mit:
- ScaledObject: skaliert Deployments/StatefulSets
- ScaledJob: erstellt Kubernetes Jobs pro Event (für Batch-Processing)
KEDA in der Praxis: Kafka-basiertes Scaling
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: kafka-consumer-scaler
spec:
scaleTargetRef:
name: kafka-consumer
minReplicaCount: 0
maxReplicaCount: 20
triggers:
- type: kafka
metadata:
bootstrapServers: kafka:9092
consumerGroup: my-group
topic: events
lagThreshold: "100"
Dieses ScaledObject skaliert den Kafka-Consumer basierend auf dem Consumer-Lag. Bei 0 Nachrichten in der Queue: 0 Pods. Bei 2000 Nachrichten: automatisch auf 20 Pods. Der HPA allein könnte das nicht — er weiß nichts vom Kafka-Lag.
KEDA ScaledJob für Batch-Processing
apiVersion: keda.sh/v1alpha1
kind: ScaledJob
metadata:
name: image-processor
spec:
jobTargetRef:
template:
spec:
containers:
- name: processor
image: my-image-processor:latest
triggers:
- type: rabbitmq
metadata:
host: amqp://rabbitmq:5672/
queueName: image-jobs
queueLength: "1"
Für jeden Job in der RabbitMQ-Queue wird ein Kubernetes Job erstellt. Ideal für Bildverarbeitung, Report-Generierung oder andere Batch-Workloads.
KEDA Scaler im Überblick
KEDA 2.x unterstützt über 50 eingebaute Scaler:
| Kategorie | Scaler |
|---|---|
| Message Queues | Kafka, RabbitMQ, NATS, Azure Service Bus, AWS SQS |
| Datenbanken | PostgreSQL, MySQL, Redis, MongoDB |
| HTTP | HTTP Requests (via http-add-on), Prometheus |
| Cloud | AWS CloudWatch, GCP Pub/Sub, Azure Event Hubs |
| K8s intern | CPU, Memory (wie HPA), Cron-basiert |
Scale-to-Zero: Der entscheidende Unterschied
Der wichtigste Vorteil von KEDA: Scale-to-Zero. Ein Deployment kann auf 0 Replicas skaliert werden, wenn keine Events vorliegen. Der HPA erlaubt mindestens 1 Replica.
Für Self-Hoster mit begrenzten Ressourcen ist das besonders wertvoll: Batch-Worker laufen nur, wenn es Arbeit gibt. In einem Homelab-Cluster mit 3 Nodes spart das signifikant CPU und RAM.
Vergleich: HPA vs. KEDA
| Kriterium | HPA | KEDA |
|---|---|---|
| Installation | Im Kern vorhanden | Helm Chart nötig |
| Trigger | CPU, Memory, Custom Metrics | 50+ Scaler inkl. alle HPA-Trigger |
| Scale-to-Zero | ❌ | ✅ |
| Batch-Jobs | ❌ | ✅ (ScaledJob) |
| Kafka/Queue-Scaling | Indirekt via Prometheus | Nativ |
| Lernkurve | Niedrig | Mittel |
| Produktionsreife | Sehr hoch | Hoch (CNCF Graduated) |
Wann HPA, wann KEDA?
Bleib beim HPA, wenn:
- CPU/Memory-basiertes Scaling ausreicht
- Du kein zusätzliches Tool im Cluster willst
- Einfache, zustandslose Services ohne Queue-Backend
Nutze KEDA, wenn:
- Du Message Queues oder Event Streams verarbeitest
- Scale-to-Zero für Batch-Worker wichtig ist
- Du Cron-basiertes Scaling brauchst
- Prometheus-Metriken als Scaling-Trigger
KEDA ersetzt den HPA nicht — es ergänzt ihn. Hinter den Kulissen erstellt KEDA selbst HPA-Objekte und sorgt für die Metrik-Brücke.
Fazit
Für Standard-Workloads ist der native HPA völlig ausreichend und wartungsärmer. Sobald du Event-Driven-Architekturen mit Kafka, RabbitMQ oder HTTP-basierten Triggern betreibst, ist KEDA die richtige Wahl. Als CNCF-Graduated-Projekt ist es produktionsreif und in vielen großen Kubernetes-Clustern im Einsatz.
Weiterführende Artikel
- ArgoCD vs. Flux CD: GitOps für Kubernetes im Vergleich
- Kafka vs. RabbitMQ vs. NATS: Message Broker im Vergleich
- k3s vs. MicroK8s: Lightweight Kubernetes im Vergleich
- Cilium vs. Calico: Kubernetes CNI-Plugins im Vergleich