Mengamankan autoscaling dengan fallback saat scaler gagal, lalu menyetel pollingInterval, cooldownPeriod, restoreToOriginalReplicaCount, behavior HPA, dan scalingStrategy untuk perilaku scaling yang presisi.

Di episode 10 kalian sudah bisa membuat scaler apa pun — termasuk custom gRPC. Tapi satu pertanyaan penting belum terjawab: apa yang terjadi ketika scaler itu gagal? Broker mati, query error, kredensial kedaluwarsa. Di episode ini kita membahas fallback untuk menjaga ketersediaan minimum, lalu menyetel advanced config: pollingInterval, cooldownPeriod, restoreToOriginalReplicaCount, behavior HPA, dan scalingStrategy. Inilah knob yang membedakan autoscaling yang rawan flapping dari yang stabil di produksi.
Ketika scaler gagal membaca metrik, KEDA tidak boleh membiarkan workload menciut ke nol — justru saat itulah kita butuh konsumen untuk menguras sisa pekerjaan. Itu tugas blok fallback.
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: order-worker-scaler
spec:
scaleTargetRef:
name: order-worker
minReplicaCount: 0
maxReplicaCount: 30
fallback:
failureThreshold: 3
replicas: 2
pollingInterval: 30
triggers:
- type: aws-sqs-queue
metadata:
awsRegion: ap-southeast-3
queueURL: https://sqs.ap-southeast-3.amazonaws.com/123456789012/orders
queueLength: "10"failureThreshold: 3 berarti setelah 3 kali polling berturut-turut gagal, KEDA memaksa replika ke replicas: 2. Setelah scaler pulih, KEDA kembali ke logika scaling normal.
Warning
Fallback bukan minimum absolute — ia hanya aktif saat scaler benar-benar gagal, bukan saat metrik rendah. Jangan jadikan pengganti minReplicaCount. Verifikasi statusnya lewat condition Fallback di kubectl describe scaledobject order-worker-scaler -n production.
| Perintah | Fungsi |
|---|---|
kubectl get scaledobject | grep keda | Daftar ScaledObject milik KEDA |
kubectl describe scaledobject <nama> -n <ns> | Detail kondisi termasuk Fallback |
kubectl get hpa -n <ns> | Lihat HPA yang dibuat KEDA |
Dua parameter ini sering tertukar. pollingInterval adalah frekuensi KEDA mengecek metrik ke scaler (default 30 detik). cooldownPeriod adalah durasi KEDA menunggu sebelum mengizinkan HPA men-scaledown setelah metrik turun (default 300 detik).
| Parameter | Default | Fungsi |
|---|---|---|
pollingInterval | 30 detik | Seberapa sering metrik diambil dari scaler |
cooldownPeriod | 300 detik | Jeda sebelum scale-down dimulai |
activationThreshold | 0 | Ambang sebelum pod diaktifkan dari nol |
Tip
Turunkan pollingInterval bila ingin respons lebih cepat terhadap lonjakan, tapi sadari setiap polling memicu request ke sistem eksternal — terlalu agresif bisa kena rate limit provider. Naikkan cooldownPeriod untuk workload dengan cold start mahal agar tidak menaikkan-menurunkan replika secara sia-sia.
Saat ScaledObject dihapus, KEDA secara default menskalakan Deployment sesuai minReplicaCount — bisa jadi nol. Dengan restoreToOriginalReplicaCount: true, KEDA mengembalikan Deployment ke jumlah replika sebelum ScaledObject dibuat.
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: order-worker-scaler
spec:
scaleTargetRef:
name: order-worker
restoreToOriginalReplicaCount: true
minReplicaCount: 0
maxReplicaCount: 30
triggers:
- type: aws-sqs-queue
metadata:
awsRegion: ap-southeast-3
queueURL: https://sqs.ap-southeast-3.amazonaws.com/123456789012/orders
queueLength: "10"Note
Fitur ini hanya berlaku saat ScaledObject dihapus, bukan pada scaling normal. Kalau Deployment sudah punya replika 0 sebelum ScaledObject dibuat, nilainya akan kembali ke 0 juga.
KEDA meneruskan behavior langsung ke HPA yang dibuatnya. Di sinilah kalian mengontrol seberapa cepat replika dinaikkan dan diturunkan.
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: web-scaler
spec:
scaleTargetRef:
name: web
minReplicaCount: 0
maxReplicaCount: 20
advanced:
horizontalPodAutoscalerConfig:
behavior:
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 15
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 25
periodSeconds: 60
triggers:
- type: cpu
metricType: Utilization
metadata:
type: Utilization
value: "60"scaleUp dengan stabilizationWindowSeconds: 0 membuat scaling naik secepat mungkin — tambahan maksimal 100 persen tiap 15 detik. scaleDown dijaga lambat dengan window 300 detik agar tidak flapping di tengah beban yang turun-naik.
scalingStrategy.strategy mengontrol bagaimana KEDA menghitung nilai metrik yang dilaporkan ke HPA ketika ada banyak trigger.
| Strategi | Perilaku |
|---|---|
default | Menjumlahkan nilai semua trigger |
custom | Formula khusus dengan customScalingQueueLengthDeduction untuk mengurangi over-provisioning |
accurate | Tersedia untuk ScaledJob; menghitung queue yang benar-benar tersedia |
efficient | Tersedia untuk ScaledJob; mengurangi replika yang masih sibuk |
Untuk ScaledObject, opsi yang tersedia adalah default dan custom. Strategi accurate dan efficient digunakan pada ScaledJob.
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: worker-scaler
spec:
scaleTargetRef:
name: worker
minReplicaCount: 0
maxReplicaCount: 20
advanced:
scalingStrategy:
strategy: "custom"
customScalingQueueLengthDeduction: 2
triggers:
- type: rabbitmq
metadata:
queueName: jobs
queueLength: "5"Di sini setiap hitungan replika dikurangi 2 — berguna ketika setiap replika memproses beberapa pesan sekaligus dan kalian ingin menghindari over-provisioning.
Tip
Kombinasikan ketiga knob ini: scalingStrategy untuk mengurangi over-provisioning, scaleUp cepat untuk merespons lonjakan, dan scaleDown lambat untuk stabilitas. Inilah resep autoscaling yang tidak flapping.
failureThreshold + replicas menjaga ketersediaan minimum saat scaler gagal.restoreToOriginalReplicaCount mengembalikan replika asli saat ScaledObject dihapus.Semua config ini bekerja di balik HPA dan ScaledObject. Di episode 12 kita menyelam penuh ke satu add-on yang paling dinanti: KEDA HTTP Add-on — arsitektur interceptor dan operator, HTTPScaledObject, hosts, timeout, penanganan request saat scale-to-zero, hingga batasannya di Kubernetes 1.30. Sampai jumpa!