Skip to content

Pod resources do not resize as expected

When requests or limits do not change as intended, separate controller selection from Kubernetes resize feasibility.

Set NS to the workload namespace and AUTOSCALER to the PRA name:

Terminal window
NS=my-app
AUTOSCALER=my-app
kubectl get podresourceautoscalers -n "$NS"
kubectl describe podresourceautoscaler "$AUTOSCALER" -n "$NS"
kubectl get podresourceprofiles -n "$NS" -o yaml

Use the command for your selected controller. An unknown resource type means its CRD is not installed. For PRA, Ready=True with reason Paused is not active scaling: inspect spec.paused and the Active condition. For PRP, compare selectors, container names, annotations and trigger with the target Pod.

Inspect the resource and events; use PRP fields or PRA fields to correct the selected target.

Set POD to the affected Pod:

Terminal window
POD=my-app-pod
kubectl get pod "$POD" -n "$NS" -o json | \
jq '{desired: [.spec.containers[] | {name, resources, resizePolicy}], actual: .status.containerStatuses, resize: .status.resize, conditions: .status.conditions}'
kubectl describe pod "$POD" -n "$NS"
kubectl get events -n "$NS" --field-selector "involvedObject.name=$POD" --sort-by=.metadata.creationTimestamp

Compare desired resources with the container status, resize conditions and events; the status representation varies by Kubernetes version. PRA events PodResourceAutoscalerResizePending or PodResourceAutoscalerQoSInvariantBlocked distinguish incomplete resizing from a blocked QoS change. Use the node name from describe pod with kubectl describe node <node> to inspect allocatable and allocated resources.

Free or provision feasible capacity, or follow the workload owner’s rollout procedure when a restart is required; recheck actual container resources.

Check PRA, PRP, another vertical controller, dashboard actions and GitOps for overlapping writes.

Assign one writer per container resource field. Staggering timers does not resolve ownership. Restore the intended source value before retesting.

Read the PRA events from kubectl describe podresourceautoscaler "$AUTOSCALER" -n "$NS". PodResourceAutoscalerMetricsUnavailable indicates a metric failure; PodResourceAutoscalerScaleFailed indicates an attempted resize failed. If metrics are available, compare the policy’s bounds, step, consecutive samples, delay and cooldown with observed load.

Compare observed samples with the configured policy; use the PRA load tutorial on a test workload.

Resources changed but OOM/throttling or latency worsened

Section titled “Resources changed but OOM/throttling or latency worsened”

Check workload pressure, restart count and current versus previous resource values.

Restore the prior PRA policy or PRP profile through its configuration owner. For a manual recommendation applied through Helm/GitOps, revert the source change. Verify resources, restarts and latency after reconciliation.

Check actual container resources and Pod resize events after restoring the policy. A changed desired value is insufficient if the Pod still reports a deferred or infeasible resize.

For unresolved failures, Collect diagnostics for support with versions, namespace/target, timestamps, relevant conditions and a redacted configuration.

Related: Vertical scaling: PRA and PRP · PodResourceProfile API reference · PodResourceAutoscaler API reference · Validate and undo a rightsizing change.