Ordentliche Knotenabschaltung in GKE on AWS

Ab Version 1.26 wird in GKE on AWS automatisch der sanfte Knoten-Shutdown aktiviert. Mit dieser Funktion wird die ordnungsgemäße Beendigung von Pods beim Herunterfahren von Knoten verwaltet. Bei einer ordnungsgemäßen 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 bei anderen Pods und Diensten minimiert, die von den heruntergefahrenen Pods abhängen oder mit ihnen interagieren. So wird die Resilienz Ihrer Cluster erhöht.

Funktionsweise

Ein Ereignis wie eine geplante Wartung, die Knotenskalierung oder ein Hardwareproblem löst das Herunterfahren eines Knotens aus. Die kubelet-Komponente erkennt das Ereignis und initiiert die ordnungsgemäße Knotenbeendigung, indem sie systemd anweist, die Systemausführung für eine bestimmte Dauer zu verzögern. Diese Verzögerung gibt dem Knoten Zeit, die darauf ausgeführten Pods zu beenden und zu entfernen.

Ziel des ordnungsgemäßen Knoten-Herunterfahrens ist es, sowohl nicht systemeigene 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 erzwungen werden. Kritische System-Pods haben 15 Sekunden Zeit, um heruntergefahren zu werden, nachdem die nicht zum System gehörenden Pods beendet wurden. Da die Funktion jedoch nach dem Best-Effort-Prinzip funktioniert, kann es sein, dass ein Knoten nicht innerhalb des angegebenen Zeitraums von 30 Sekunden ordnungsgemäß heruntergefahren werden kann.

Trigger und Einschränkungen

Zu den Ereignissen, die eine ordnungsgemäße Knotenabschaltung auslösen, gehören geplante Ereignisse wie die folgenden:

  • Vom Nutzer angeforderte Herunterfahren
  • Beendigung von Instanzen
  • Planmäßige Wartung
  • Cluster verkleinern

In diesen Fällen erkennt kubelet das Knotenabschaltungsereignis und initiiert den ordnungsgemäßen Knotenabschaltungsprozess.

Im Gegensatz dazu kann die ordnungsgemäße Node-Abschaltung nicht aktiviert werden, wenn der Befehl zum Herunterfahren den systemd-Inhibitor-Sperremechanismus nicht auslöst, auf den die kubelet-Komponente angewiesen ist. Beispiele für solche Situationen:

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

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