DEVEX-1687: raise helm client QPS/burst to stop rate-limiter deploy failures#146
Conversation
helm upgrade --wait polls the status of every object in a release on a loop. Large releases (webstore prod: ~90+ pods plus deployments, services, ingress) exceed helm's low default client QPS, and client-go's rate limiter aborts status computation with "client rate limiter Wait returned an error: rate: Wait(n=1) would exceed context deadline", failing an otherwise-healthy deploy and triggering --atomic rollback. Set HELM_QPS=50 and HELM_BURST_LIMIT=300 on the deploy step. This only relaxes the client-side limiter; the API server's Priority & Fairness still protects it. Surfaced on webstore prod 2026-07-09 (DEVEX-1687).
PR SummaryLow Risk Overview The shared Reviewed by Cursor Bugbot for commit 5bd5a66. Bugbot is set up for automated code reviews on this repo. Configure here. |
Problem
helm upgrade --wait(used by every service deploying throughhelm-deploy-eks.yaml) polls the status of every object in the release on a loop. For large releases this exceeds helm's low default client-side QPS, andclient-go's rate limiter aborts status computation with:This fails an otherwise-healthy deploy and, with
atomic: true, triggers an auto-rollback of a good release. Observed on webstore prod on 2026-07-09 (~90+ pods + deployments/services/ingress in one release): the paced rollout reached full availability, but helm's--waitnever returned and a prior attempt's rollback failed outright with the error above (DEVEX-1687).Change
Set
HELM_QPS=50andHELM_BURST_LIMIT=300as env on thedeploystep. Helm exposes these exactly for this case (helm --help: "set the Queries Per Second in cases where a high number of calls exceed the operations…", "burst limit in the case the server contains many CRDs").This only relaxes the client-side limiter. The Kubernetes API server's own API Priority & Fairness still throttles/protects it, so there's no risk of overwhelming the control plane.
Scope / blast radius
Shared workflow — applies to all consumers. That's intended: it's a safe, uniform raise of a client-side limit that's too low for larger releases, and a no-op for small ones (they never approach the default ceiling).
Confidence
The rate-limiter error is a confirmed failure mode (recorded in the webstore rev-400 release record), not inferred. The related
--waithang on the same release is strongly consistent with the same cause (availability was stable at full replicas for minutes while helm never returned). If a future large deploy still hangs after this, it points to a second factor to investigate.Related