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

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 dipakai untuk workload yang selalu hidup namun jumlah replikanya mengikuti event: Deployment, StatefulSet, atau ReplicaSet. Contoh paling sederhana:
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.
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 (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.kubectl get scaledobject order-worker-scaledobject -o yaml
kubectl get hpa order-worker-scaledobject
kubectl get --raw /apis/external.metrics.k8s.io/v1beta1 | head -20minReplicaCount: 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 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.
spec:
triggers:
- type: rabbitmq
metadata:
queueName: orders
queueLength: "20"
- type: cron
metadata:
timezone: Asia/Jakarta
start: "0 8 * * *"
end: "0 18 * * *"
desiredReplicas: "5"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.
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"| Aspek | ScaledObject | ScaledJob |
|---|---|---|
| Target | Deployment/StatefulSet/ReplicaSet | Kubernetes Job |
| Unit scaling | Jumlah replika pod | Jumlah Job aktif |
| Masa hidup pod | Berkelanjutan | Sampai Job selesai |
| Min/Max replika | minReplicaCount / maxReplicaCount | minReplicaCount / maxReplicaCount |
| Scale-to-zero | Ya (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.
Aturan praktisnya sederhana:
ScaledObject.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.
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.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.