Ordnungsgemäßes Herunterfahren von Knoten in GKE on Azure

Ab Version 1.26 ist das ordnungsgemäße Herunterfahren von Knoten in GKE on Azure automatisch aktiviert. Mit dieser Funktion wird die ordnungsgemäße Beendigung von Pods während des Herunterfahrens von Knoten verwaltet. Durch die ordnungsgemäße Beendigung können Pods ihren Status speichern und Ressourcen freigeben, bevor der Knoten heruntergefahren wird. Mit dieser Methode zum Beenden von Pods wird das Risiko von Datenverlusten minimiert. Außerdem wird das Risiko von Unterbrechungen für andere Pods und Dienste minimiert, die auf den heruntergefahrenen Pods basieren oder mit ihnen interagieren. So wird die Resilienz Ihrer Cluster verbessert.

Funktionsweise

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

Ziel des ordnungsgemäßen Herunterfahrens von Knoten ist es, sowohl Nicht-System- als auch kritische System-Pods ordnungsgemäß zu beenden, bevor der Knoten heruntergefahren wird. Es werden die folgenden Standardeinstellungen verwendet:

  • ShutdownGracePeriod: 30 Sekunden
  • ShutdownGracePeriodCriticalPods: 15 Sekunden

Mit diesen Einstellungen haben Nicht-System-Pods 15 Sekunden Zeit, um ordnungsgemäß beendet zu werden, bevor sie zwangsweise gestoppt 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 festgelegten Zeitraums von 30 Sekunden ordnungsgemäß heruntergefahren werden kann.

Auslöser und Einschränkungen

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

  • Vom Nutzer ausgelöste Herunterfahrvorgänge
  • Beendigung von Instanzen
  • Geplante Wartung
  • Herunterskalieren eines Clusters

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

Im Gegensatz dazu kann das ordnungsgemäße Herunterfahren von Knoten nicht aktiviert werden, wenn der Befehl zum Herunterfahren nicht den Sperrmechanismus des systemd-Inhibitors auslöst, auf den die Komponente kubelet angewiesen ist. Beispiele für solche Situationen sind:

  • Netzwerkunterbrechungen
  • Hardwarefehler
  • Unzureichende Ressourcen wie Arbeitsspeicher oder CPU
  • Unerwartete Stromausfälle

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