The article on VPA explains that its Auto mode always restarts a pod to apply a new requests recommendation. That behavior, historically true, changes with in-place pod resize: a feature letting you modify a running container’s requests and limits without ever recreating it.

What in-place resize actually changes

Before this feature, modifying a pod’s requests or limits required its full recreation: Kubernetes simply didn’t allow changing these fields on a pod already scheduled and running. In-place resize introduces a resize subresource that accepts this change directly, without going through pod deletion and recreation.

# Modifies a running container's requests/limits,
# without ever recreating the pod
kubectl patch pod my-app --subresource resize --patch \
  '{"spec":{"containers":[{"name":"app","resources":{"requests":{"cpu":"200m"}}}]}}'

What can resize without interruption, and what can’t

A CPU increase or decrease generally applies with no container restart, CPU being a compressible resource the kernel can readjust on the fly via cgroups. Memory is more constrained: an increase often works without a restart, but a decrease may require restarting the container depending on the defined resize policy, since already-allocated memory can’t be forcibly reclaimed without risking killing the process.

# The resize policy decides, resource by resource,
# whether a restart is required or not
resizePolicy:
  - resourceName: cpu
    restartPolicy: NotRequired
  - resourceName: memory
    restartPolicy: RestartContainer

What this changes for VPA

VPA can now leverage this capability via an InPlaceOrRecreate mode (in addition to Off, Initial, Auto already covered), which first attempts an in-place resize and only recreates the pod if the resize policy requires it (typically a memory decrease) or if the node technically can’t accommodate the change in place.

spec:
  updatePolicy:
    updateMode: "InPlaceOrRecreate"

This mode significantly reduces interruptions compared to the classic Auto mode, without eliminating them entirely: there remains a category of changes (memory decreases in particular) that still trigger a restart, depending on the defined policy.

What this doesn’t change

In-place resize never modifies the container image, nor any pod field beyond CPU/memory resources: an application code change still requires a classic deployment with pod recreation, via a normal rolling update. This feature stays strictly limited to sizing adjustments, not version updates.

Takeaway

In-place pod resize lets you modify a running container’s requests and limits without ever recreating it, an evolution that fixes VPA’s historical Auto mode limitation (systematic restart). A CPU increase generally applies with no interruption, a memory decrease can still require a restart depending on the per-resource resize policy. VPA’s InPlaceOrRecreate mode leverages this capability to reduce interruptions, without eliminating them entirely, a recent evolution worth knowing before sizing a vertical autoscaling strategy for a recent Kubernetes migration.