Ordnungsgemäßes Herunterfahren von Knoten in GKE in Azure

Ab Version 1.26 aktiviert GKE on Azure automatisch das ordnungsgemäße Herunterfahren von Knoten. Dieses Feature verwaltet die ordnungsgemäße Beendigung von Pods während des Herunterfahrens von Knoten. Durch 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 Datenverlusten. Es minimiert auch das Risiko von Unterbrechungen für andere Pods und Dienste, die von den heruntergefahrenen Pods abhängig sind oder mit ihnen interagieren. Dadurch wird die Ausfallsicherheit Ihrer Cluster verbessert.

Funktionsweise

Ein Ereignis wie eine geplante Wartung, die Knotenskalierung oder ein Hardwareproblem löst ein Herunterfahren des Knotens aus. Die Komponente kubelet erkennt das Ereignis und initiiert die ordnungsgemäße Beendigung von Knoten, indem sie systemd anweist, das Herunterfahren des Systems um eine bestimmte Zeit zu verzögern. Diese Verzögerung gibt dem Knoten Zeit, die auf ihm ausgeführten Pods per Drain zu beenden und zu entfernen.

Das Ziel der ordnungsgemäßen Beendigung von Knoten besteht darin, 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

Durch diese Einstellungen haben systemfremde Pods 15 Sekunden Zeit, um sie ordnungsgemäß zu beenden, bevor sie zwangsweise beendet werden. Kritische System-Pods haben nach dem Beenden der nicht systemeigenen Pods 15 Sekunden zum Herunterfahren. Da das Feature jedoch auf Best-Effort-Basis arbeitet, besteht die Möglichkeit, dass ein Knoten möglicherweise nicht innerhalb der angegebenen 30 Sekunden ordnungsgemäß heruntergefahren wird.

Trigger und Einschränkungen

Ereignisse, die das ordnungsgemäße Herunterfahren von Knoten auslösen, umfassen unter anderem folgende geplante Ereignisse:

  • Nutzergesteuertes Herunterfahren
  • Beendigung von Instanzen
  • Planmäßige Wartung
  • Cluster herunterskalieren

In diesen Szenarien erkennt der kubelet das Herunterfahren des Knotens und initiiert das ordnungsgemäße Herunterfahren von Knoten.

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

  • Netzwerkverbindungen
  • Hardwaredefekte
  • 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.