The HPA was pinning the deployment at maxReplicas (4) even though aggregate CPU usage was low.
Diagnosis
The service is event-driven: pods sit at ~0-1m idle but spike to 100-300m per supergraph query. With requests.cpu=20m those bursts read as 500-1500% utilization, so the HPA's 60% target was constantly exceeded on whichever pod handled the request.
HPA status confirmed: ScalingLimited TooManyReplicas + ScaleDownStabilized kept replicas pinned at 4.
Fix
Raise requests.cpu to 100m. Bursts now read as 100-300% instead of 500-1500%. Combined with the HPA's downscale stabilization window this lets replicas settle back to minReplicas (2) between bursts.
The HPA was pinning the deployment at maxReplicas (4) even though aggregate CPU usage was low.
## Diagnosis
The service is event-driven: pods sit at ~0-1m idle but spike to 100-300m per supergraph query. With `requests.cpu=20m` those bursts read as 500-1500% utilization, so the HPA's 60% target was constantly exceeded on whichever pod handled the request.
Observed per-pod samples (15s apart):
```
sample 1 : cckcp=110m, others ~0m
sample 2 : vznkq=181m, others ~0m
sample 3 : vznkq=304m, others ~0m
```
HPA status confirmed: `ScalingLimited TooManyReplicas` + `ScaleDownStabilized` kept replicas pinned at 4.
## Fix
Raise `requests.cpu` to `100m`. Bursts now read as 100-300% instead of 500-1500%. Combined with the HPA's downscale stabilization window this lets replicas settle back to `minReplicas` (2) between bursts.
HPA was pinning the deployment at maxReplicas (4) even though aggregate
CPU usage was low. The service is event-driven: pods sit at ~0-1m idle
but spike to 100-300m per supergraph query. With requests.cpu=20m those
bursts read as 500-1500% utilization, so the HPA's 60% target was
constantly exceeded on whichever pod handled the request.
Raise the request to 100m so bursts read as 100-300% instead. Combined
with the HPA's downscale stabilization window this lets replicas settle
back to minReplicas (2) between bursts.
argoyle
scheduled this pull request to auto merge when all checks succeed 2026-05-19 07:09:04 +00:00
argoyle
canceled auto merging this pull request when all checks succeed 2026-05-19 07:09:50 +00:00
argoyle
scheduled this pull request to auto merge when all checks succeed 2026-05-19 07:10:04 +00:00
argoyle
merged commit 9a4b05d897 into main2026-05-19 07:23:06 +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.
The HPA was pinning the deployment at maxReplicas (4) even though aggregate CPU usage was low.
Diagnosis
The service is event-driven: pods sit at ~0-1m idle but spike to 100-300m per supergraph query. With
requests.cpu=20mthose bursts read as 500-1500% utilization, so the HPA's 60% target was constantly exceeded on whichever pod handled the request.Observed per-pod samples (15s apart):
HPA status confirmed:
ScalingLimited TooManyReplicas+ScaleDownStabilizedkept replicas pinned at 4.Fix
Raise
requests.cputo100m. Bursts now read as 100-300% instead of 500-1500%. Combined with the HPA's downscale stabilization window this lets replicas settle back tominReplicas(2) between bursts.