Ordnungsgemäßes Herunterfahren von Knoten in GKE on AWS

Ab Version 1.26 wird Graceful Node Shutdown in GKE on AWS automatisch aktiviert. Diese Funktion verwaltet die ordnungsgemäße Beendigung von Pods während des Herunterfahrens von Knoten. Durch die ordnungsgemäße Beendigung können Pods ihren Status speichern und Ressourcen freigeben, bevor der Knoten heruntergefahren wird. Diese Methode zum Beenden von Pods minimiert das Risiko von Datenverlust. Außerdem wird das Risiko von Unterbrechungen für andere Pods und Dienste minimiert, die auf die heruntergefahrenen Pods angewiesen sind oder mit ihnen interagieren. So wird die Resilienz Ihrer Cluster erhöht.

Funktionsweise

Ein Ereignis wie eine geplante Wartung, das Skalieren von Knoten oder ein Hardwareproblem löst das Herunterfahren eines Knotens aus. Die kubelet-Komponente erkennt das Ereignis und leitet den Prozess zur ordnungsgemäßen Knotenbeendigung ein, indem sie systemd anweist, das Herunterfahren des Systems für einen bestimmten Zeitraum zu verzögern. Diese Verzögerung gibt dem Knoten Zeit, die darauf ausgeführten Pods zu leeren und zu entfernen.

Das Ziel der ordnungsgemäßen Knotenbeendigung ist es, sowohl Nicht-System- als auch kritische System-Pods ordnungsgemäß zu beenden, bevor der Knoten heruntergefahren wird. Die folgenden Standardeinstellungen werden verwendet:

  • ShutdownGracePeriod: 30 Sekunden
  • ShutdownGracePeriodCriticalPods: 15 Sekunden

Diese Einstellungen geben Nicht-System-Pods 15 Sekunden Zeit für eine ordnungsgemäße Beendigung, bevor sie zwangsweise beendet werden. Kritische System-Pods haben 15 Sekunden Zeit, um herunterzufahren, nachdem die Nicht-System-Pods beendet wurden. Da die Funktion jedoch nach dem Best-Effort-Prinzip arbeitet, kann es vorkommen, dass ein Knoten nicht innerhalb des vorgesehenen Zeitraums von 30 Sekunden ordnungsgemäß heruntergefahren werden kann.

Trigger und Einschränkungen

Zu den Ereignissen, die ein ordnungsgemäßes Herunterfahren von Knoten auslösen, gehören geplante Ereignisse wie die folgenden:

  • Vom Nutzer angeforderte Herunterfahrvorgänge
  • Beenden von Instanzen
  • Planmäßige Wartung
  • Cluster herunterskalieren

In diesen Szenarien erkennt kubelet das Ereignis zum Herunterfahren des Knotens und leitet den Prozess zum ordnungsgemäßen Herunterfahren des Knotens ein.

Im Gegensatz dazu kann das ordnungsgemäße Herunterfahren von Knoten nicht aktiviert werden, wenn der Herunterfahrbefehl nicht den systemd-Inhibitor-Sperrmechanismus auslöst, auf den sich die kubelet-Komponente stützt. Beispiele für solche Situationen:

  • Netzwerkverbindungen trennen
  • Hardwarefehler
  • Unzureichende Ressourcen wie Arbeitsspeicher oder CPU
  • Unerwartete Stromausfälle.

In diesen Fällen kann der Knoten abrupt heruntergefahren werden, was möglicherweise zu Störungen oder Datenverlust führt.