7 min read
Treat Pod resizing as an operations tool, not a shortcut
A shorter loop, with conditions
Kubernetes 1.35 makes changing a running Pod’s CPU and memory requests and limits a stable API capability, rather than a feature to approach as an experiment. That can shorten the resource-tuning loop: adjust a workload’s allocation, observe how it behaves, and decide what to keep without automatically replacing the Pod. The Kubernetes project describes in-place Pod resize as generally avoiding a container restart, not as a guarantee that every resize is seamless or even immediately possible (Kubernetes 1.35 release, in-place resize overview).
That distinction matters operationally. Before this feature, changing a Pod’s resource requirements commonly meant changing its template and waiting for a replacement Pod. That is a reasonable rollout mechanism, but it mixes two questions: did the new resource allocation help, and did replacing the Pod affect the workload? In-place resize gives operators a way to change the allocation on a running Pod and inspect the result without making replacement the default step (Kubernetes resize documentation).
I would use that to make tuning more deliberate, not to turn production workloads into a stream of ad hoc edits. A resize is useful only if the application responds sensibly to the resource change, the node can accommodate it, and the operator can tell whether Kubernetes actually applied it. The capability changes the mechanics of an adjustment; it does not decide what the right allocation is.
First test the workload’s behavior
CPU and memory changes do not have identical operational consequences. CPU is a compressible resource: changing its limit can change how much CPU time the container may use, while changing its request affects the amount Kubernetes accounts for when placing workloads. Memory is different. A workload may already be holding memory that exceeds a proposed lower limit, and its behavior under memory pressure depends on the application as well as the container runtime. Kubernetes exposes a per-resource resizePolicy so that a team can specify whether changing CPU or memory may require the container to restart (resize documentation).
I would test the actual application with the same policy and resource changes intended for production. Check whether it adapts to a new CPU limit while running, whether it assumes memory availability will stay fixed, and whether a restart caused by the configured policy is acceptable. A process that reads its limits only at startup may not make use of a change just because the container’s allocation changed. Treat that as a workload question to verify, rather than assuming that an API update automatically changes application behavior.
A successful API request is also not proof that the resize completed. Kubernetes reports resize progress and pending conditions in Pod status, including reasons that can distinguish a deferred operation from an infeasible one. The kubelet can accept a request and still be applying it, so the operational procedure needs to wait for observed state and handle a resize that remains pending (resize status documentation).
This is why I would start with a controlled workload and a reversible change. Define in advance what counts as a good outcome: the application remains healthy, the requested resources are reflected in the running container, and the workload’s own signals move in the direction the team expected. If the resize policy permits a container restart, include that in the test. “In place” describes the capability, not a promise that no process will restart under any configuration.
Requests still meet a real node
The scheduler’s role is easy to misunderstand here. Resizing a Pod does not mean Kubernetes can move its existing process to a more suitable node. The Pod is already assigned to a node; a resource increase must be feasible for that placement, or the resize can remain pending or fail. The resize documentation describes pending states and node-side resource constraints, so I would treat the assigned node’s available capacity as part of the change plan, not as something solved automatically by editing the resource values (resize documentation).
A request increase can also change how much capacity is accounted for on that node once accepted. That has consequences for the next Pod that needs to be scheduled there. A request decrease may free accounted capacity after the new allocation takes effect, but it does not relocate the current Pod or guarantee that another workload can use the freed capacity immediately. The useful mental model is local: resizing changes the resource requirements of this Pod on its current node; ordinary scheduling and placement remain separate concerns.
That makes the surrounding workload policy important. A controller may keep the Pod around, while a human or automation changes its resources; later, a rollout or reconciliation can bring the Pod back in line with the template. I would decide which system owns the desired values before enabling operational resizing. If a deployment tool, autoscaler, or human operator can each write resource settings independently, the team needs a clear source of truth and a way to prevent one controller from undoing another’s change.
For both managed and self-hosted clusters, I would test a modest increase and decrease under realistic node pressure. Include a case where the node has room and one where it does not. Observe whether the resize is applied, deferred, or rejected; check what happens to subsequent scheduling; and verify that the workflow has a clear recovery path. In-place resize does not remove capacity planning. It makes resource changes more flexible while leaving the underlying capacity constraint intact.
Make the change observable and supported
A safe tuning loop needs to distinguish the requested configuration from what the node has actually applied. Kubernetes exposes resize conditions and status fields for this purpose; the documentation identifies status.containerStatuses[].resources as a useful view of resources reported for the running container, alongside allocation information and the Pod’s observed generation (resize status documentation). Kubernetes 1.35 also highlights new kubelet metrics and Pod events associated with resize, intended to help operators track and debug resource changes (Kubernetes 1.35 resize announcement).
I would put those signals in the same operational view as application health, restart counts, and resource-use trends. Alerting only on the desired spec can tell you that someone asked for a change; it cannot establish that the runtime applied it. A useful procedure records the change, watches its status through completion, and checks both the workload and the node afterward. If the request is deferred or infeasible, the next action should be clear: wait for capacity, choose a smaller change, or use a controlled replacement or rescheduling path instead.
Stable upstream support is not the same as immediate support in every cluster you operate. The Kubernetes project lists the currently maintained release branches on its release page, but managed services choose when to offer specific versions and may have their own lifecycle and upgrade policies. For example, AKS publishes its supported Kubernetes versions and lifecycle, and EKS documents version availability and support. In self-hosted clusters, I would check the versions and configuration of the control plane and nodes, as well as the runtime and observability setup. In managed clusters, I would confirm the provider’s version availability and any service-specific constraints rather than infer support from the upstream release alone.
My adoption bar is therefore practical: the cluster actually supports the feature, the workload has been tested with its resize policy, the node has a realistic path to satisfy the change, and the team can observe completion or failure. If those checks pass, in-place resize can make tuning less disruptive and faster to learn from. If they do not, a normal rollout remains the clearer operational tool.
Drafted with AI assistance, reviewed and edited by Ali.