
Kubernetes v1.37 Adds Five Standardized Node Conditions for Drain and Maintenance Workflows
Enterprise Developer PlatformsDraining a node in Kubernetes produces signals in at least four different places: Node readiness, pod eviction state, custom taints, and whatever labels or annotations your automation has applied. None of these are standardized. Two platform teams implementing drain automation write two different systems, and neither is portable.
Kubernetes v1.37 replaces this with five new well-known Node conditions that Kubernetes itself manages.
The Five Conditions
| Condition | When it is True |
|---|---|
DrainInProgress | A drain is actively running per administrator-defined criteria |
Drained | The node has reached the drain completion criteria |
MaintenancePlanned | A future maintenance event is scheduled |
MaintenanceInProgress | Maintenance is actively occurring |
GracefulNodeShutdownInProgress | A graceful node shutdown is underway |
Each condition follows the standard Node condition format:
status:
conditions:
- type: MaintenancePlanned
status: "True"
reason: MaintenanceWindow
lastTransitionTime: "2026-09-10T09:00:00Z"
message: "Hardware maintenance scheduled"
status takes True, False, or Unknown — the same values used for Ready and other existing conditions. Third-party controllers and automation scripts can read these conditions through the same API surface they already use.
The Pattern
Stack Archive has been tracking the Kubernetes v1.37 release across five distinct feature areas: DRA extended resources graduating to GA, HPA scale-to-zero reaching beta, pod certificate trust bundles, workload-aware scheduling and gang scheduling, and now node lifecycle conditions. v1.37 is not a quiet maintenance release — it’s the most operationally-focused Kubernetes release in recent memory.
Why Scattered Signals Are a Maintenance Risk
The current state: a node undergoing maintenance might have a custom taint applied by your drain automation, a label set by your node provisioner, and a readiness state determined by the kubelet — none of which share a consistent schema or semantics. When your automation writes maintenance=true as a label, it’s a convention you invented, not a Kubernetes primitive. Any downstream system that wants to respect it needs to know your convention.
This creates two operational risks. First, tooling that doesn’t know your labeling convention ignores the signal — scheduling new workloads onto a node that’s about to be drained because the scheduler can’t read your custom label. Second, tooling that reads the wrong signal makes incorrect decisions — treating NotReady as equivalent to DrainInProgress when the node is actually healthy but in a rolling-update maintenance window.
What Changes Operationally
Workload scheduling during maintenance. With MaintenancePlanned: True as a well-known condition, the scheduler and admission webhooks can avoid placing new workloads on nodes that are scheduled for maintenance — without requiring custom taint logic or label conventions.
Drain coordination. DrainInProgress and Drained give operators and third-party controllers a reliable signal for where a node is in the drain lifecycle. Controllers that sequence operations around drain completion (certificate rotation, VM decommission, bare-metal reprovision) can use a single standardized check instead of polling pod counts.
Graceful shutdown visibility. GracefulNodeShutdownInProgress provides an observable state for node shutdown events — useful for distinguishing graceful shutdowns from unexpected node failures in observability pipelines.
The So What
Node lifecycle conditions are not a dramatic architectural change. They’re the standardization of signals that platform teams have been implementing manually for years. The value is portability: automation that reads DrainInProgress from the Node conditions API works the same on any compliant Kubernetes cluster, with any drain tool that sets the condition, without knowledge of your organization’s custom taint or label conventions. For platform teams building automation around node operations — particularly those running mixed workloads where some automation is vendor-supplied and some is home-built — this is the kind of boring, structural improvement that reduces the maintenance surface of the automation layer.
Source: Kubernetes Blog
Content created with AI assistance and reviewed for accuracy.
Join the conversation
Stack Insiders is our free community for readers who want to go deeper — share resources, ask questions, and connect with others across every vertical we cover.
Join Stack Insiders →