Build1 distinct publisher3 min readPublished
Vertical autoscaling decisions now persist as KCP_VPA control plane logs with a state and a reason on every entry. That's the record a platform team needs the morning after an overnight resize. It also bills per VPA object per minute.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Start from the restart and read backwards. The vpa-controller writes to `container.googleapis.com/vpa-controller` in Cloud Logging [4]. Filter to the target workload and the chain is there. Under `InPlaceOrRecreate`, an `APPLY_RECOMMENDATION_IN_PLACE` entry records the attempt to change a running container's requests and limits without a restart [9]. When that attempt does not land, the `EVICT_POD` entry that follows is the updater falling back to recreation [8]. `APPLY_RECOMMENDATION_ON_EVICTION` then shows what the replacement pod was actually admitted with [16]. Four operation types, one timeline [6].
That is the case Google's own writeup names as the hard one: a pod evicted during an overnight batch job, or an in-place resize that failed quietly because the node had no room, diagnosed the next morning [c3b]. The entries are stored as first-class control plane logs, so the trail outlives the incident [5].
The periodic entry is the one that ends up in dashboards. `UPDATE_RECOMMENDATION` carries the recommender's output: lower bound, upper bound, target, uncapped target, and a confidence value [7].
The cadence is also the cost model. One entry per minute per VPA object works out to 1,440 entries per object per day [1]. Two hundred VPA objects put 288,000 entries a day into Cloud Logging before anything is evicted at all [2]. Volume tracks how many VPA objects exist, not how much rightsizing happens. A recommendation log is a heartbeat. Heartbeats bill.
Google's post frames VPA logs alongside existing HPA logging as complete visibility across horizontal and vertical scaling [15]. The accurate version of that sentence is that visibility is now complete across two controllers. For the number to transfer to your postmortems, one thing has to be true that the announcement does not settle: the explanatory text on a failed in-place resize has to name what blocked it, not merely that the operation did not succeed. The documented example of a useful reason string is the success path, where it tells you the applied values were capped by a resource policy or an Autopilot compute ratio [11]. Failure reasons are where the morning-after value sits, and public preview [1] is where you find out how specific they are.
Test it deliberately. Set a VPA to `InPlaceOrRecreate`, schedule the pod onto a node with no headroom, force a recommendation increase, and read the resulting entries. If the failure reason resolves to something a human can act on, the objection that killed vertical autoscaling in a lot of production clusters is answered, and the argument moves to logging spend. If it does not, the payoff is still a durable record that something failed, an improvement over a Kubernetes event that already expired; the explanation itself is a separate problem still to be solved.
Ranked by verification strength, evidence, and original report placement.
The GKE team launched the Public Preview of VerticalPodAutoscaler (VPA) Logs, which streams structured VPA decision events directly into Cloud Logging.
VPA logs are available on GKE clusters running version 1.36.0-gke.1601000 or newer.
Until recently, inspecting VPA decisions meant relying on standard Kubernetes events or running kubectl describe vpa; these events are transient, often expiring after an hour.
Google's post cites two scenarios that were frustratingly difficult to diagnose the next morning: a Pod evicted unexpectedly during an overnight batch job, and an in-place resize that failed silently due to node capacity limits.
VPA logs are emitted by the vpa-controller control plane component and stored under the log destination container.googleapis.com/vpa-controller in Cloud Logging, as structured JSON payloads containing metadata about the target workload, the evaluation state, and calculated resource bounds.
By exporting VPA decision events to Cloud Logging as first-class control plane logs (KCP_VPA), GKE gives platform operators a permanent audit trail.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 29, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
GKE reclaims the JVM warm-up over-request once the readiness probe passes1 distinct publisher
build
Identical Helm charts, three clouds, one OOMKill loop: portability is a claim about YAML1 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 enough to check, checked by nobody
The specifics are unusually concrete for a feature announcement: a named log destination, four operation values, a state enum, a ten-sample confidence cutoff, working gcloud and Logs Explorer syntax. Anyone with a 1.36 cluster could falsify it in ten minutes. What our coverage lacks is a single voice outside Google — no release note, no doc page, no practitioner saying the logs actually explained their eviction.
Preview shipped, nobody running it on the record
The adoption record is the launch itself, fenced behind a minimum cluster version. Not one workload, cluster size or platform team appears anywhere in this reporting, and the post's own examples are hypothetical overnight batch jobs rather than incidents it resolved.
"Complete visibility" without the invoice
"Complete visibility across horizontal and vertical scaling dimensions" is heavy phrasing for a preview whose write-up never mentions what the logs cost. The post supplies the cadence — one recommendation entry per minute per VPA object — and then declines to multiply: 1,440 entries a day per object, 288,000 a day across 200 objects, before a single Pod is evicted. That number is the first question a platform lead asks and the one place the telling goes quiet.
The seller wrote the manual
This is Google Cloud, on its own dev.to channel, explaining a GKE feature whose output flows into Cloud Logging — a metered product. The same per-minute cadence that makes the logs diagnostically useful makes them billable. Self-publishing does not make the field reference wrong; it does explain why the cost paragraph was never going to exist, and why the framing runs to "demystify" rather than "here is what to expect on your bill".
Trust the fields, not the consequences
We would stand behind the mechanics — they are too specific to be loose, and the per-minute arithmetic follows from them without assumption. Retention, preview stability, behaviour on a large Autopilot fleet and the real cost of leaving KCP_VPA on all lean on the same single account, so the further this assessment gets from field names, the softer it becomes.