EN
en direct

Kubernetes 1.37 introduit cinq conditions de cycle de vie des nœuds pour signaler drain et maintenance

Le 9 septembre 2026, Kubernetes 1.37 réserve cinq conditions de nœud bien connues — DrainInProgress, Drained, MaintenancePlanned, MaintenanceInProgress et GracefulNodeShutdownInProgress — pour donner aux équipes une façon partagée de dire pourquoi un nœud est indisponible. Publiez-les dès maintenant dans votre automatisation de maintenance, sans attendre que les contrôleurs du cœur les consomment.

Une rangée de lames serveur identiques dans une baie, l’une d’elles légèrement extraite avec sa LED d’état allumée en ambre.

9 septembre 2026. Kubernetes 1.37 introduit cinq conditions de nœud bien connues — DrainInProgress, Drained, MaintenancePlanned, MaintenanceInProgress et GracefulNodeShutdownInProgress — derrière une feature gate Alpha nommée NodeLifecycleConditions. Le billet est signé Ryan Hallisey (NVIDIA), et il adresse un angle mort que toute équipe qui opère un cluster connaît. Pourquoi c’est important : aujourd’hui, aucun signal natif ne dit pourquoi un nœud est indisponible — et des contrôleurs indépendamment corrects prennent alors des décisions contradictoires.

Le problème : décrire l’indisponibilité sans dire pourquoi

Kubernetes possède déjà de nombreuses façons de décrire ce qui arrive à un nœud. La readiness, les taints, l’état des Pods, les labels, les annotations et les API spécifiques aux fournisseurs exposent chacun une partie du tableau. Ce qui manquait, c’est une façon appartenant à Kubernetes de dire qu’un nœud est en cours de drain, en maintenance, ou qu’il subit un arrêt gracieux (Graceful Node Shutdown).

Le résultat, c’est que chaque composant reconstruit sa propre compréhension à partir de signaux indirects. Un contrôleur peut regarder la readiness du nœud, un autre les taints, un troisième les Pods en terminaison ou manquants. Les fournisseurs d’infrastructure ajoutent leurs propres labels et annotations. Ces signaux restent utiles pour leur usage prévu, mais ils ne répondent pas à la même question.

La différence est subtile et structurante. Une taint peut influencer l’ordonnancement ou l’éviction, mais elle n’atteste pas qu’un drain est en cours, ni que les critères de drain choisis par l’administrateur ont été atteints. Un nœud NotReady n’explique pas si la cause est une panne imprévue, un arrêt gracieux ou une maintenance planifiée.

Cinq conditions pour combler l’angle mort

Kubernetes 1.37 réserve cinq noms comme constantes NodeConditionType bien connues et introduit la feature gate NodeLifecycleConditions, désactivée par défaut. Le tableau d’ensemble est le suivant :

ConditionCe qu’elle rapporte
DrainInProgressLe nœud est en cours de drain selon les critères choisis par l’administrateur.
DrainedLe nœud a atteint les critères de drain sélectionnés.
MaintenancePlannedUne modification est prévue sur le nœud dans le futur.
MaintenanceInProgressLe nœud subit activement une maintenance.
GracefulNodeShutdownInProgressUn arrêt gracieux est en cours sur le nœud.

Comme les autres conditions de nœud, chacune utilise status pour rapporter si l’état est actif — True, False ou Unknown — accompagné d’un reason stable, lisible par machine, et d’un message pour le détail humain. Un contrôleur de maintenance autorisé peut publier un état comme celui-ci :

yaml
# Extrait de .status d'un nœud
status:
  conditions:
  - type: MaintenancePlanned
    status: "True"
    reason: MaintenanceWindow
    lastTransitionTime: "2026-12-09T12:00:00Z"
    message: "Hardware maintenance is scheduled for this Node"

Un point de conception important : en 1.37, la gate est sans effet. Elle ne restreint pas qui peut poser ces conditions, et aucun composant du cœur ne les lit encore. Elle existe pour que le comportement natif prévu dans les versions futures — des contrôleurs qui consomment ces conditions — puisse être activé le moment venu. On n’a pas besoin de l’activer pour commencer à publier les conditions dès aujourd’hui.

Ce que change la maintenance et le drain

La maintenance recouvre le déploiement matériel ou logiciel, la remédiation, la mise hors service ou le débogage. La question de savoir si une maintenance exige un drain dépend de son impact : une mise à niveau Kubernetes passe en général par un drain, un live patch du noyau n’en a pas besoin. Les conditions de cycle de vie donnent un canal commun pour rendre cet état visible sans imposer un mode opératoire unique.

La valeur immédiate est la clarté opérationnelle. Une automatisation de maintenance peut poser MaintenancePlanned quand une fenêtre future est programmée, puis MaintenanceInProgress quand le travail commence. Une automatisation de drain peut poser DrainInProgress au début de l’éviction des Pods, puis Drained quand les critères sont atteints. GracefulNodeShutdownInProgress rapporte qu’un arrêt gracieux est en cours.

Le schéma recommandé sépare nettement les responsabilités : les conditions servent à rapporter l’état, tandis que les opérations de cycle de vie restent gérées par les mécanismes existants — kubectl cordon, kubectl drain, les taints et les contrôles spécifiques aux workloads. On n’utilise pas les conditions pour changer l’ordonnancement ou l’éviction, mais pour rendre l’état de ce travail visible aux personnes, aux tableaux de bord, aux alertes et aux automatisations qui choisissent de le consommer.

Pourquoi un signal partagé change la donne

Le cycle de vie d’un nœud touche des composants partout dans le cluster. Le kubelet, le node lifecycle controller, les workload controllers, le scheduler, les autoscalers, les opérateurs de stockage et les systèmes de maintenance externes ont tous besoin de comprendre ce qui arrive à un nœud. Sans contexte partagé, des composants individuellement corrects prennent des décisions contradictoires.

Un exemple concret suffit à montrer l’enjeu. Un DaemonSet peut remplacer un Pod que le kubelet a volontairement terminé pendant un arrêt gracieux. Un contrôleur de Job peut attendre indéfiniment une phase terminale sur un nœud qu’un administrateur est en train de retirer. Un opérateur de stockage peut n’apprendre la maintenance qu’une fois le drain déjà commencé. Chacun a raison selon ses propres signaux — et tous se contredisent.

Le cas le plus frappant est celui du DaemonSet en déploiement continu. Un nœud cassé ou en maintenance peut rester indisponible pour des raisons sans rapport avec la nouvelle révision du DaemonSet. Il consomme pourtant le budget de disponibilité du rollout, ce qui peut ralentir ou bloquer la progression sur les nœuds sains. Le contrôleur sait que le Pod est indisponible, mais il ne peut pas distinguer un échec de la nouvelle révision d’une mise hors service intentionnelle. La condition MaintenanceInProgress crée l’endroit, détenu par Kubernetes, pour publier ce contexte — et le travail futur pourra définir comment le contrôleur s’en sert pour l’ordre, la comptabilité de disponibilité et le reporting d’état.

Ce que doivent faire les équipes plateforme

Les conditions sont publiables dès aujourd’hui, sans risquer de casser quoi que ce soit — la gate est sans effet et rien ne les lit encore. C’est précisément ce qui en fait une bonne pratique à adopter tôt.

  • Décidez quel composant possède chaque condition — un propriétaire unique par condition évite les écritures conflictuelles entre automatisations ;
  • Instrumentez vos fenêtres de maintenance — posez MaintenancePlanned à la planification, MaintenanceInProgress au démarrage, puis repassez à False (ou retirez la condition) à la fin ;
  • Instrumentez vos drains — posez DrainInProgress au début de l’éviction et Drained quand vos critères sont atteints ;
  • Utilisez des reason stables et des message clairs — les humains comme les automatisations doivent comprendre pourquoi la condition a changé ;
  • Ne changez pas vos mécanismes de contrôle — continuez à utiliser kubectl cordon, kubectl drain et les taints pour l’action, et les conditions pour la visibilité.

Le travail est suivi via KEP-5683, et les groupes Node Lifecycle Working Group, SIG Node et SIG Apps sollicitent explicitement les retours des mainteneurs d’outils de maintenance, de remédiation, de drain, d’autoscaling et de gestion de flotte.

Verdict

Kubernetes 1.37 ne résout pas encore le problème de fond — les contrôleurs du cœur ne consomment pas ces conditions — mais il pose la fondation qui manquait : un vocabulaire partagé et détenu par Kubernetes pour dire pourquoi un nœud est indisponible. C’est un changement d’une discrétion trompeuse, dont la valeur se révèle à l’échelle du cluster, quand les composants cessent de se contredire.

Si vous opérez un cluster en production, commencez à publier ces cinq conditions dans votre automatisation de maintenance et de drain dès aujourd’hui. Le coût est quasi nul — la gate est sans effet — et vous préparez votre outillage au comportement natif qui arrivera dans les versions suivantes, au lieu d’avoir à le rattraper.

Si vous maintenez un opérateur ou un contrôleur de cycle de vie, intégrez ces conditions maintenant et remontez vos cas d’usage aux groupes de travail. C’est le moment où l’API se fige, et votre retour pèse directement sur la forme que prendra la coordination à long terme.

Références

Le brief cyber, chaque mardi

Les failles qui comptent, les correctifs à appliquer, en dix minutes de lecture.

Pas de spam. Désinscription en un clic.
à lire ensuite

Sur le même sujet

OpenTofu franchit le point de bascule comme moteur par défaut des nouveaux workspaces d’infrastructure

Sur la plateforme Scalr, OpenTofu exécute désormais 63 % des runs Terraform-compatibles et 72 % des workspaces nouvellement créés, un signal qui ne décrit pas le marché mondial mais le sens de l’histoire. La version 1.12 ajoute le prevent_destroy dynamique et des checksums de fournisseurs complets. Pour les équipes qui provisionnent de l’infrastructure, les nouveaux projets devraient défaut sur OpenTofu.

Kubernetes 1.37 fait passer le gang scheduling en bêta et ajoute CompositePodGroup

La version 1.37 de Kubernetes (Garhwal) fait passer en bêta les API Workload et PodGroup, le gang scheduling et la préemption workload-aware, et introduit l’API CompositePodGroup pour planifier des groupes hiérarchiques de Pods destinés à l’IA/ML et au calcul distribué. Les équipes qui font tourner des charges par lots peuvent commencer à évaluer cette base native.

← Retour au fil

Tapez au moins deux caractères.

naviguer ouvrir esc fermer