Build1 distinct publisher3 min readPublished
The CPU you used to pin permanently for class loading and JIT is now a boost a webhook injects at admission and the VPA updater takes back in place. Scheduling still sizes on the boosted number, so the packing math changes twice.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Start with the range in the Google Cloud writeup. If steady-state CPU sits 50% to 80% below what initialisation consumed [1], then boot wants somewhere between 2x and 5x the steady-state number [1]. The sample policy sets `factor: 2` [11]. That covers the bottom of the band and nothing above it. A framework-heavy service at the 80% end needs a factor near 5, or a `type: Quantity` addition sized by measurement [12], and the post's own range is the argument for measuring rather than copying the manifest [3].
The waste being removed is larger than the boost being added. The habit described is 2 to 4 vCPUs pinned for the life of the pod [2], against a steady-state example of 500m [3]. That is a standing over-request of 4x to 8x [2], and it is the packing density number, not the startup number.
The ordering is the part worth reading twice. The mutating webhook rewrites the CPU request and stamps a `vpaCpuStartupBoost/<container-name>` annotation before the scheduler places the pod [6], and Kubernetes uses that request for both placement and CFS bandwidth enforcement [7]. So a 500m container with factor 2 is scheduled as 1000m [4]. The throttle relief is real because the quota really is higher; you pay for it at placement, where the node must have the boosted room free. Reclaim happens later and live, through In-Place Pod Resize, with no container restart [9]. Density improves in the steady state, which is not the moment HPA is adding replicas to catch a traffic spike [14].
The boost window is defined by readiness, not by warm-up. The `durationSeconds` timer starts when the pod reports Ready [8]. If your readiness probe answers from a static health endpoint before JIT has compiled the hot paths, ten seconds after Ready is all the JVM gets [11]. That turns probe design into a resource-sizing decision, which is an odd place for one to live.
Treat "up to 2x faster startup latency" [5] as a claim about the workloads Google measured. It transfers only if your startup is CPU-bound and genuinely throttled at the baseline request. If boot time goes on waiting for a config server or a schema migration, a wider CFS quota buys nothing, and the boost shows up as scheduling pressure with no latency return.
Adoption cost is a channel decision. The preview runs only on 1.36.0-gke.4447000 or newer in the Rapid Channel [4]. Exclude sidecars with `containerPolicies` [13], because the boost is per container and the scheduler sums the pod.
If you already own your steady-state requests in the Deployment, `updateMode: "Off"` keeps VPA from touching them while still applying the boost [10]. That is where I would start: the Deployment stays the source of truth for the baseline, and the VPA object carries one multiplier and one timer.
Ranked by verification strength, evidence, and original report placement.
In the admission phase, the GKE VPA mutating admission webhook intercepts pod creation, calculates the boosted CPU request from the policy, and injects both the elevated CPU values and a vpaCpuStartupBoost/<container-name> tracking annotation before the scheduler places the pod.
The example manifest sets startupBoost.cpu with type: Factor, factor: 2 (doubling 1 vCPU to 2 vCPUs during startup) and durationSeconds: 10, keeping boosted CPU active for 10 seconds after the pod reaches Ready.
If a Java container is rightsized for its steady-state requirement, for example 500m CPU, the application may experience severe CPU throttling during boot, stretching startup times from seconds into minutes.
The GKE team launched the Public Preview of VerticalPodAutoscaler CPU Startup Boost, available on GKE clusters running version 1.36.0-gke.4447000 or newer in the Rapid Channel.
Kubernetes uses the container CPU request value for scheduling decisions and for CPU bandwidth enforcement through CFS quotas.
In the unboosting phase, once the pod satisfies its readiness checks and reaches Ready status, the configured durationSeconds timer begins; when the duration expires the VPA Updater initiates an in-place resize back to baseline.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 28, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
Identical Helm charts, three clouds, one OOMKill loop: portability is a claim about YAML1 distinct publisher
build
On GKE Autopilot, a NetworkPolicy blocks the API server and Postgres takes the blame1 distinct publisher
build
GKE's ClusterNetworkPolicy takes the metadata-server block out of developers' hands1 distinct publisher
product
One team swapped HPA thresholds for a demand forecast after a 45-minute GPU node wait1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Precise plumbing, one voice
The specifics that are hardest to fake are all here — the vpaCpuStartupBoost annotation, the 1.36.0-gke.4447000 gate, two manifests that parse, the ordering of webhook and scheduler. They all come from the team that shipped it, which makes them the best available account of how the mechanism behaves and no account at all of whether it behaves that way in someone else's cluster. The two numbers a reader would actually plan against, the 50%-to-80% drop and 'up to 2x', arrive without a workload, a benchmark or a footnote.
Preview shipped, nobody running it on the record
A Public Preview behind a specific Rapid Channel build is the entire adoption record. No named user, no cluster count, no reported startup time from anyone who is not Google, and by construction the feature is unavailable to the large majority of GKE fleets that sit on Regular or Stable. The code exists; the practice does not yet.
Outcomes oversold, mechanics honest
The headline says the waste is eliminated. What the mechanism does is hold the over-request until readiness plus durationSeconds, hand it back in place, and in the meantime ask the scheduler to book the boosted figure — so a boosted pod still occupies its inflated footprint at the moment placement is decided, and the post concedes a node without room simply gets a smaller boost than you asked for. Add 'up to 2x' with no benchmark and a sample factor of 2 that undershoots the post's own worst case, and the promise runs ahead of what is shown by a comfortable margin.
The vendor explaining its own preview
Author, venue and product all trace to Google Cloud: a post under its dev.to organisation, about a GKE preview, whose practical call to action is to move clusters onto the Rapid Channel and adopt a VPA resource. That alignment costs the mechanism section nothing — vendors are accurate about their own field names — but it fully explains which numbers got quantified (startup speedup) and which stayed adjectival (the waste being eliminated).
Trust the YAML, hold the numbers
Split the story and confidence splits with it. The lifecycle, the annotation and the manifest surface are checkable in ten minutes on a Rapid Channel cluster and are very likely right. The prevalence and performance figures rest on a single interested assertion, and preview-stage fields have a habit of being renamed before general availability, so anything a team hard-codes today may need editing later.