What Happened
Kubernetes v1.37 introduced an alpha feature, InPlacePodVerticalScalingSchedulerPreemption, that lets the kube‑scheduler preempt lower‑priority Pods to satisfy deferred in‑place Pod resize requests (dynamic CPU/memory increased without restart). Previously, when an in‑place resize exceeded a node’s allocatable headroom the Kubelet could mark the resize as Deferred and leave it parked indefinitely, forcing manual evictions or custom autoscaling workarounds. The scheduler now treats the requested resize resources as already consumed to avoid races, honors priority ordering between competing resizes, and centralizes preemption decisions instead of leaving them to the Kubelet [1].
The feature is gated (alpha) and requires Kubernetes v1.37 on control plane and workers, and enabling the feature gate on kube‑apiserver, kube‑scheduler and kubelet. Cluster operators can opt out per node using spec.podPreemptionPolicy.disableResizePreemption by listing node label keys. A kind (v1.37.0) example shows the event sequence ResizeDeferred → ResizeStarted → ResizeCompleted and verification using kubectl get pod <pod> -o jsonpath='{.status.containerStatuses[0].allocatedResources.cpu}' to confirm the resized CPU allocation [1].
Why It Matters to Businesses
This feature addresses a practical availability and capacity problem in production clusters that use in‑place Pod resizing for vertical scaling:
- Reduces risk of silent capacity starvation and OOMs for higher‑priority services by centralizing and automating preemption decisions when a resize is blocked by node headroom [1].
- Makes vertical resizing more operationally reliable, lowering manual intervention and custom eviction/autoscaler complexity.
- Gives platform teams control to opt out for sensitive nodes and to enforce priority logic centrally, improving predictability for multi‑tenant clusters.
Kimbodo Engineering Perspective
When to enable
Enable in non‑production first if your cluster uses in‑place resizing (introduced GA in v1.35) and you see frequent Deferred resizes or manual evictions. It benefits platforms running multi‑priority workloads where larger, high‑priority containers may need extra headroom without restart [1].
Trade‑offs
- Alpha stability: behavior can change. Expect iterations and participate with SIG Scheduling / SIG Node if you reach edge cases [1].
- Preemption causes disruption: evicted lower‑priority Pods may restart elsewhere or be rescheduled; this can increase churn and transient latency for those workloads.
- Coordination required with autoscalers, PodDisruptionBudgets (PDBs) and stateful workloads to avoid unintended availability impact.
Operational judgment
Use PriorityClasses to ensure evictions align with business impact. Reserve opt‑out node labels for stateful or latency‑sensitive hosts. Treat the feature as an operational lever to reduce emergency manual evictions, not as a replacement for capacity planning or autoscaling strategies.
How We Would Implement It
Concrete rollout and implementation steps Kimbodo recommends:
- Prepare an upgrade plan: upgrade control plane and worker nodes to v1.37 simultaneously in a staged manner (canary → staging → production).
- Enable the feature gate on kube‑apiserver, kube‑scheduler and kubelet: turn on
InPlacePodVerticalScalingSchedulerPreemptionin component startup flags or feature gate config for the versioned components [1]. - Canary and test: create a kind or dedicated test cluster with v1.37 and reproduce a Deferred resize scenario. Confirm ResizeDeferred → ResizeStarted → ResizeCompleted event flow and validate with:
kubectl get pod <pod> -o jsonpath='{.status.containerStatuses[0].allocatedResources.cpu}'to confirm allocation [1]. - Policy and labels: define PriorityClasses for workloads; label nodes that must opt out and configure
spec.podPreemptionPolicy.disableResizePreemptionwith those node label keys to protect critical hosts [1]. - Integrate with automation: update autoscalers and vertical scaling controllers to be aware of centralized preemption behavior—avoid duplicate eviction logic.
- Monitoring and alerts: add alerts for
ResizeDeferredevents, preemption events, elevated eviction rates, and increased pod restarts. Collect kube‑scheduler and kubelet events and surface them in your platform dashboards. - Rollout: enable in production for a subset of nodes/services, monitor for increased churn, then expand cluster‑wide if behavior matches expectations.
Risks, Costs and Security
Risks
- Alpha instability: API/behavior changes are possible. Plan for regression testing and quick rollback paths.
- Increased evictions: lower‑priority workloads may be evicted more frequently, causing reduced throughput or higher latency for those tenants.
- Interaction complexity: conflicts with autoscalers, PDBs, or custom eviction logic can create scheduling surprises.
Costs
- Operational work to upgrade and test clusters and to define PriorityClasses and node labeling conventions.
- Potential need for additional capacity to absorb evicted pods or to reduce eviction frequency.
Security and control
- Feature gate enabling is an admin operation—keep RBAC and control plane access limited to operators. Misconfiguration can cause availability impacts.
- Preemption respects priority semantics—ensure PriorityClass assignments reflect security and business priorities to avoid privilege escalation via resource priority misuse.
Bottom line: this v1.37 alpha feature directly addresses a real operational gap in in‑place vertical scaling by centralizing preemption. Treat it as a controlled operational improvement: test in staged environments, use node opt‑outs for critical hosts, and tune priorities and monitoring before broad production rollout [1].
Where Kimbodo Comes In
Kimbodo builds and operates this in production for businesses — see our AI Application Development practice, or Estimate My AI Application.