Even with the schema cache (#841) and startup warmup (#843), residual CPU bursts (metrics-server occasionally samples a request mid-flight) were enough to trip a brief scale-up, after which the default 5min scaleDown stabilization pinned the deployment at maxReplicas long after the spike had subsided.
Tune both directions
scaleUp.stabilizationWindowSeconds: 120 — a transient spike must persist for two consecutive minutes before any pod is added. Brief metric anomalies no longer move replicas.
scaleUp policy: add at most 1 pod per 60s. Smooths reaction.
scaleDown.stabilizationWindowSeconds: 120 (default 300) — once the workload calms, return to minReplicas faster.
scaleDown policy: remove at most 1 pod per 60s. Avoids thundering-herd scale-down.
Net effect: replicas now spend most of the time at minReplicas (2) and only grow under sustained load.
Even with the schema cache (#841) and startup warmup (#843), residual CPU bursts (metrics-server occasionally samples a request mid-flight) were enough to trip a brief scale-up, after which the default 5min scaleDown stabilization pinned the deployment at maxReplicas long after the spike had subsided.
## Tune both directions
- `scaleUp.stabilizationWindowSeconds: 120` — a transient spike must persist for two consecutive minutes before any pod is added. Brief metric anomalies no longer move replicas.
- `scaleUp` policy: add at most 1 pod per 60s. Smooths reaction.
- `scaleDown.stabilizationWindowSeconds: 120` (default 300) — once the workload calms, return to minReplicas faster.
- `scaleDown` policy: remove at most 1 pod per 60s. Avoids thundering-herd scale-down.
Net effect: replicas now spend most of the time at minReplicas (2) and only grow under sustained load.
Even with the schema cache and startup warmup, residual CPU bursts
(metrics-server occasionally samples a request mid-flight) were enough
to trip a brief scale-up, after which the default 5min scaleDown
stabilization pinned the deployment at maxReplicas long after the
spike had subsided.
Tune both directions:
- scaleUp.stabilizationWindowSeconds: 120 — a transient spike must
persist for two consecutive minutes before any pod is added.
Brief metric anomalies no longer move replicas.
- scaleUp policy: add at most 1 pod per 60s. Smooths reaction.
- scaleDown.stabilizationWindowSeconds: 120 (default 300) — once
the workload calms, return to minReplicas faster.
- scaleDown policy: remove at most 1 pod per 60s. Avoids
thundering-herd scale-down.
argoyle
scheduled this pull request to auto merge when all checks succeed 2026-05-21 16:56:38 +00:00
argoyle
merged commit 111c2e4b19 into main2026-05-21 17:10:19 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Even with the schema cache (#841) and startup warmup (#843), residual CPU bursts (metrics-server occasionally samples a request mid-flight) were enough to trip a brief scale-up, after which the default 5min scaleDown stabilization pinned the deployment at maxReplicas long after the spike had subsided.
Tune both directions
scaleUp.stabilizationWindowSeconds: 120— a transient spike must persist for two consecutive minutes before any pod is added. Brief metric anomalies no longer move replicas.scaleUppolicy: add at most 1 pod per 60s. Smooths reaction.scaleDown.stabilizationWindowSeconds: 120(default 300) — once the workload calms, return to minReplicas faster.scaleDownpolicy: remove at most 1 pod per 60s. Avoids thundering-herd scale-down.Net effect: replicas now spend most of the time at minReplicas (2) and only grow under sustained load.