Node drain
Drainer un nœud (kubectl drain) évince proprement tous les pods qui y
tournent avant une opération de maintenance : mise à jour du système,
remplacement matériel, retrait planifié. Le nœud est d’abord marqué
unschedulable (aucun nouveau pod n’y est placé), puis chaque pod
existant reçoit l’ordre de partir, dans le respect des contraintes
définies pour lui.
Ce qui bloque un drain
Un drain qui semble bloqué indéfiniment n’est presque jamais un bug : un PodDisruptionBudget trop strict, un pod géré par aucun contrôleur (donc sans garantie de recréation ailleurs), ou un DaemonSet dont les pods sont volontairement ignorés par le drain (ils tournent sur chaque nœud par nature, les évincer n’a pas de sens) sont les trois causes les plus fréquentes. La commande refuse d’avancer plutôt que de violer silencieusement une garantie de disponibilité posée ailleurs dans le cluster.
La différence avec un simple arrêt de nœud
Un nœud qui tombe en panne sans drain préalable ne donne à ses pods
aucune chance de s’arrêter proprement : pas de SIGTERM, pas de délai de
grâce, juste une disparition brutale détectée après coup par le
contrôleur. Le drain existe précisément pour transformer une panne
potentielle en opération planifiée et réversible.