11.02.2026

KEDA Nedir? Kubernetes’te Event-Driven Autoscaling

KEDA ile Kubernetes’te kuyruk ve event’e göre otomatik ölçekleme kurun. HPA yetmediğinde maliyeti düşüren pratik rehber.

KEDA Nedir? Kubernetes’te Event-Driven Autoscaling

Meta Description

KEDA nedir? Kubernetes’te kuyruk/event trafiğine göre otomatik ölçekleme kurun. HPA’nın yetmediği yerde maliyeti düşürün.

Giriş (Introduction)

KEDA (Kubernetes Event-Driven Autoscaling), Kubernetes üzerinde uygulamalarınızı CPU/RAM yerine event kaynağına göre ölçeklemenizi sağlar. “Queue büyüdü, consumer sayısını artır”; “trafik sıfırlandı, pod sayısını 0’a indir” gibi senaryoları HPA ile tam ve doğru yapmak çoğu zaman zordur.

E-ticaret, ödeme, bildirim, arka plan işleyiciler (worker) ve entegrasyon servislerinde yük genellikle kuyruk mesaj sayısı, Kafka lag, HTTP istek sayısı veya cron tabanlı yoğunluk gibi sinyallerle gelir. CPU düşük görünürken kuyruk şişebilir; ya da tam tersi.

Bu yazıda KEDA nedir sorusunu netleştirip, gerçek hayatta neden işe yaradığını, nasıl kurulduğunu ve örnek bir ScaledObject ile adım adım nasıl çalıştığını öğreneceksiniz.


KEDA Nedir? (Temel Mantık)

KEDA, Kubernetes’e “event-driven” ölçekleme yeteneği ekleyen bir projedir. Temel yaklaşım:

  • Bir event kaynağı seçersiniz (RabbitMQ, Kafka, Azure Service Bus, AWS SQS, Prometheus, Redis Streams, HTTP, cron vb.).
  • KEDA, bu kaynağı sürekli izler.
  • Belirlediğiniz eşiklere göre deployment’ınızı 0’dan N’e kadar ölçekler.

Klasik HPA, çoğunlukla resource metric (CPU/RAM) veya custom metric ile çalışır. KEDA ise “iş var mı?” sorusunu işin kendisine (event kaynağına) sorar.

Bunu neden yapmalıyım? Çünkü worker’larda asıl problem CPU değil, “bekleyen iş miktarı”dır. KEDA, doğru sinyale göre ölçekleyerek hem gecikmeyi düşürür hem de boşta maliyeti azaltır.


HPA vs KEDA: Ne Zaman Hangisi?

Aşağıdaki tablo hızlı karar vermenize yardım eder:

Senaryo HPA KEDA
HTTP API (CPU yükü istekle paralel) ⚪ (olabilir)
Worker/Consumer (kuyruk bazlı iş)
Trafik sıfırken maliyeti “0 pod” yapmak ❌ (zor)
Kafka lag / queue depth ile ölçekleme ⚪ (custom metric şart) ✅ (hazır scaler)
Sadece CPU/RAM’e göre ölçek ✅ (ama gereksiz olabilir)

Kısa kural:

  • Request-driven servislerde HPA çoğu zaman yeterli.
  • Event/queue-driven işlerde KEDA genelde daha doğru.

KEDA’nın Mimari Parçaları (Kısaca)

KEDA kurulunca cluster’a birkaç temel bileşen eklenir:

  • keda-operator: ScaledObject/ScaledJob kaynaklarını okur, HPA ve ölçekleme mantığını yönetir.
  • metrics-apiserver: KEDA’nın ürettiği metrikleri Kubernetes’e sunar.
  • Scalers: Her event kaynağı için “ölçüm” yapan adaptörler (Kafka, RabbitMQ, Prometheus vb.).

Önemli nokta: KEDA çoğu senaryoda arka planda HPA oluşturur, fakat metrik kaynağı CPU değil event’tir.


Adım Adım Kurulum: KEDA’yı Cluster’a Ekleyin

Aşağıdaki örnek Helm ile kurulum içindir (en yaygın yol):

1) Helm repo ekleyin

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

2) KEDA’yı kurun

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

3) Kurulumu doğrulayın

kubectl get pods -n keda
kubectl get crd | grep keda

Beklenen: scaledobjects.keda.sh, scaledjobs.keda.sh gibi CRD’ler görünmeli.


Örnek: RabbitMQ Kuyruğuna Göre Worker Ölçekleme

Gerçek hayatta çok sık görülen bir senaryo: sipariş sonrası e-posta gönderimi, fatura üretimi, entegrasyon çağrıları gibi işler bir kuyruğa akar.

Varsayım:

  • email-worker adında bir Deployment’ınız var.
  • RabbitMQ’da email_queue kuyruğu var.
  • Kuyrukta mesaj sayısı arttıkça pod sayısı artsın.
  • Trafik sıfır olunca pod sayısı 0 olsun.

1) Deployment (örnek)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: email-worker
spec:
  replicas: 0
  selector:
    matchLabels:
      app: email-worker
  template:
    metadata:
      labels:
        app: email-worker
    spec:
      containers:
        - name: worker
          image: your-registry/email-worker:1.0.0
          env:
            - name: RABBITMQ_URL
              valueFrom:
                secretKeyRef:
                  name: rabbitmq-secret
                  key: url

Not: replicas: 0 başlatmak normal. KEDA iş geldikçe kaldırır.

2) TriggerAuthentication (secret yönetimi)

KEDA’nın RabbitMQ’ya bağlanması için secret’ı referanslayalım:

apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
  name: rabbitmq-auth
spec:
  secretTargetRef:
    - parameter: host
      name: rabbitmq-secret
      key: url

3) ScaledObject (asıl ölçekleme kuralı)

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: email-worker-scaledobject
spec:
  scaleTargetRef:
    name: email-worker
  minReplicaCount: 0
  maxReplicaCount: 20
  pollingInterval: 10

# saniye
  cooldownPeriod: 60

# saniye
  triggers:
    - type: rabbitmq
      metadata:
        queueName: email_queue
        queueLength: "50"

# 50 mesaj/pod gibi düşünün
      authenticationRef:
        name: rabbitmq-auth

Bu ne yapar?

  • KEDA her 10 saniyede bir kuyruğu kontrol eder.
  • Kuyrukta biriken iş arttıkça pod sayısını artırır.
  • Kuyruk boşalınca 60 saniye “cooldown” sonrası tekrar azaltır.
  • İş yoksa 0 pod ile maliyeti minimize eder.

4) Uygulama

kubectl apply -f deployment.yaml
kubectl apply -f triggerauth.yaml
kubectl apply -f scaledobject.yaml

5) Gözlemleme

kubectl get scaledobjects
kubectl describe scaledobject email-worker-scaledobject
kubectl get hpa
kubectl get pods -w


İnce Ayar: Doğru Eşik ve Stabil Ölçekleme

KEDA “kur ve unut” değil; doğru ayar çok fark ettirir.

queueLength nasıl seçilir?

  • Worker’ınız ortalama 1 mesajı kaç saniyede işliyor?
  • Kabul edilebilir maksimum gecikme kaç saniye/dakika?

Basit yaklaşım:

  • Mesaj işleme süresi: ~200ms
  • 1 pod saniyede ~5 mesaj
  • 10 pod saniyede ~50 mesaj

Bu durumda queueLength: "50" kaba bir başlangıç olabilir; sonra ölçüp ayarlarsınız.

pollingInterval ve cooldownPeriod

  • pollingInterval düşük olursa daha hızlı tepki, daha çok metrik sorgusu.
  • cooldownPeriod düşük olursa “zıplama” (flapping) artabilir.

Öneri:

  • Trafiğiniz dalgalıysa cooldown’u biraz yüksek tutun (60–180s).

Gerçek Hayat Örneği: Kampanya Günü Bildirim Kuyruğu

Kampanya gününde push/e-posta bildirimleri 5 dakikada 20 bin mesaja fırlıyor.

  • HPA sadece CPU’ya bakarsa worker CPU düşük kalabilir (I/O bekliyor olabilir), kuyruk büyür.
  • KEDA kuyruk derinliğini görür, worker’ları hızla artırır.
  • Kampanya biter, kuyruk boşalır, pod sayısı 0 olur.

Sonuç: Daha düşük maliyet + daha düşük gecikme + daha az operasyonel müdahale.


Sık Sorulan Sorular (FAQ)

1) KEDA nedir ve HPA’nın yerini mi alır?

KEDA, çoğu senaryoda HPA ile birlikte çalışır. Farkı, ölçekleme metriklerini event kaynaklarından üretmesidir.

2) KEDA ile “scale to zero” güvenli mi?

Evet, özellikle worker tarzı servislerde çok yaygındır. Ancak connection warm-up, cold start ve ilk mesaj gecikmesi etkisini ölçmelisiniz.

3) KEDA sadece kuyruklar için mi?

Hayır. Prometheus metrikleri, cron, HTTP, database bazı senaryolar ve birçok sistem için scaler vardır. En güçlü olduğu yer event/queue temelli iş yükleridir.

4) KEDA production’da kullanılabilir mi?

Evet, yaygın şekilde kullanılıyor. Yine de kaynak limitleri, maxReplicaCount, hata durumları ve gözlemlenebilirlik (log/metric) tarafını planlamak gerekir.


Sonuç

KEDA nedir? KEDA, Kubernetes’te uygulamalarınızı CPU yerine event sinyallerine göre ölçekleyen, özellikle worker ve kuyruk bazlı mimarilerde müthiş maliyet/performans avantajı sağlayan bir çözümdür.

Bu rehberde:

  • KEDA’nın mantığını,
  • HPA’dan farkını,
  • Helm ile kurulum adımlarını,
  • RabbitMQ kuyruğuna göre ölçeklenen gerçek bir örneği uçtan uca gördünüz.

Siz hangi event kaynağıyla ölçeklemek istiyorsunuz (Kafka lag, SQS, Prometheus, cron)? Yorum yazın; bir sonraki yazıda aynı senaryoya uygun ScaledObject örneğini paylaşayım.