Belajar KEDA - ScaledObject & ScaledJob
Episode 4 of 23

Belajar KEDA - ScaledObject & ScaledJob

Dua objek inti KEDA: ScaledObject untuk workload berkelanjutan dan ScaledJob untuk workload batch, lengkap dengan field kunci seperti pollingInterval, cooldownPeriod, minReplicaCount, dan triggers.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Kita sudah menginstall KEDA (episode 3) dan memahami arsitekturnya (episode 2). Sekarang saatnya menyentuh objek yang akan kalian tulis sepanjang karier event-driven: ScaledObject untuk workload yang hidup terus-menerus, dan ScaledJob untuk workload batch yang hidup lalu mati.

Episode 4 membedah seluruh field kunci yang akan kalian temui, lalu menjelaskan kenapa kedua objek ini berperilaku sangat berbeda meski namanya mirip.

ScaledObject untuk Workload Berkelanjutan

ScaledObject dipakai untuk workload yang selalu hidup namun jumlah replikanya mengikuti event: Deployment, StatefulSet, atau ReplicaSet. Contoh paling sederhana:

KedaScaledObject dengan RabbitMQ
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: order-worker-scaledobject
spec:
  scaleTargetRef:
    name: order-worker
  pollingInterval: 30
  cooldownPeriod: 300
  minReplicaCount: 0
  maxReplicaCount: 10
  triggers:
    - type: rabbitmq
      metadata:
        queueName: orders
        queueLength: "20"

Mari bedah field-nya satu per satu.

scaleTargetRef

Menunjuk workload yang akan diskalakan, persis nama Deployment (atau StatefulSet/ReplicaSet). KEDA lalu membuat HPA yang menargetkan deployment ini. Jika deployment tidak ditemukan, objek KEDA akan berstatus tidak aktif.

pollingInterval dan cooldownPeriod

  • pollingInterval (detik): seberapa sering KEDA memeriksa metrik dari scaler. Nilai terlalu kecil membuat KEDA menekan API sumber event; terlalu besar membuat respons lambat. 30 detik adalah titik awal yang wajar.
  • cooldownPeriod (detik): waktu yang harus dilewati setelah event terakhir berkurang sebelum replika diturunkan. Ini mencegah replika naik-turun karena fluktuasi sesaat. Nilai default 300 detik.
KubernetesMelihat status dan metrik aktual ScaledObject
kubectl get scaledobject order-worker-scaledobject -o yaml
kubectl get hpa order-worker-scaledobject
kubectl get --raw /apis/external.metrics.k8s.io/v1beta1 | head -20

minReplicaCount, maxReplicaCount, dan idleReplicaCount

  • minReplicaCount: batas bawah replika saat event aktif. Nilai 0 memungkinkan scale-to-zero (dibahas tuntas di episode 5).
  • maxReplicaCount: batas atas replika. Selalu set nilai ini dengan pertimbangan kapasitas cluster dan downstream.
  • idleReplicaCount: jika diisi, KEDA menurunkan replika ke nilai idle ini saat tidak ada event — semacam "mode standby" yang lebih murah daripada tetap jalan penuh.

triggers

triggers adalah daftar sumber metrik. Jika lebih dari satu trigger diberikan, HPA menggunakan nilai tertinggi di antara semuanya. Setiap trigger punya type (nama scaler) dan metadata (parameter spesifik scaler). Beberapa scaler juga butuh authenticationRef yang menunjuk ke TriggerAuthentication — episode 6.

KedaMulti-trigger: rabbitmq dan cron
spec:
  triggers:
    - type: rabbitmq
      metadata:
        queueName: orders
        queueLength: "20"
    - type: cron
      metadata:
        timezone: Asia/Jakarta
        start: "0 8 * * *"
        end: "0 18 * * *"
        desiredReplicas: "5"

ScaledJob untuk Workload Batch

ScaledJob bekerja untuk Kubernetes Jobs: pekerjaan sekali jalan yang punya awal dan akhir. Alih-alih mengubah jumlah replika pod yang terus hidup, KEDA membuat Job baru setiap kali metrik menunjukkan ada pekerjaan.

KedaScaledJob berbasis SQS
apiVersion: keda.sh/v1alpha1
kind: ScaledJob
metadata:
  name: report-generator-job
spec:
  jobTargetRef:
    template:
      spec:
        template:
          spec:
            containers:
              - name: worker
                image: my-registry/report-worker:latest
            restartPolicy: Never
  pollingInterval: 30
  maxReplicaCount: 10
  triggers:
    - type: aws-sqs-queue
      authenticationRef:
        name: keda-trigger-auth-sqs
      metadata:
        queueURL: https://sqs.ap-southeast-1.amazonaws.com/1234/orders
        queueLength: "5"

Perbedaan Perilaku vs Deployment

AspekScaledObjectScaledJob
TargetDeployment/StatefulSet/ReplicaSetKubernetes Job
Unit scalingJumlah replika podJumlah Job aktif
Masa hidup podBerkelanjutanSampai Job selesai
Min/Max replikaminReplicaCount / maxReplicaCountminReplicaCount / maxReplicaCount
Scale-to-zeroYa (biasanya)Konsep alami (tidak ada Job = tidak ada kerja)

Perbedaan krusial: karena tiap Job berjalan sampai selesai, cooldownPeriod di ScaledJob mengontrol seberapa lama KEDA berhenti membuat Job baru setelah event mereda — bukan menunggu pod selesai. Pikirkan ScaledJob sebagai "antrian kerja yang membangun pekerja sendiri".

Warning

Hati-hati dengan jobTargetRef: strukturnya dua tingkat spec.template.spec.template.spec. Banyak yang salah menulisnya seperti manifest Job biasa dan akhirnya KEDA menolak karena struktur template tidak valid. Periksa dengan kubectl describe scaledjob.

Memilih yang Tepat

Aturan praktisnya sederhana:

  • Workload yang selalu hidup dan memproses event saat ada — pakai ScaledObject.
  • Workload yang hanya ada saat ada kerja (batch, ETL, report) — pakai ScaledJob.

Tip

Jika worker kalian bisa ditekan menjadi pod idle yang murah, ScaledObject lebih sederhana. Tapi jika tiap pekerjaan butuh konteks bersih (misal untuk keamanan atau isolation), ScaledJob memberi model yang lebih alami.

Penutup

Episode 4 memberi dua senjata utama KEDA. Berikut yang wajib kalian bawa:

  • scaleTargetRef menunjuk workload; pollingInterval, cooldownPeriod, dan maxReplicaCount mengontrol sensitivitas.
  • minReplicaCount: 0 dan idleReplicaCount membuka jalan menuju scale-to-zero.
  • triggers bisa lebih dari satu; HPA memakai nilai tertinggi.
  • ScaledJob membuat Job baru per event, bukan menambah replika pod.

Di episode 5 kita membahas konsekuensi terpenting dari minReplicaCount: 0: kapan scale-to-zero aman, kapan berbahaya, dan bagaimana activationThreshold mencegah flapping yang tidak perlu.

Belajar KEDA - ScaledObject & ScaledJob | Belajar KEDA