Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Konfigurieren Sie Container-Lebenszyklus-Hooks
Während eines ordnungsgemäßen Herunterfahrens des Containers sollte Ihre Anwendung auf ein SIGTERM
Signal reagieren und das Herunterfahren starten, damit es bei den Clients nicht zu Ausfallzeiten kommt. In Ihrer Anwendung sollten beispielsweise die folgenden Bereinigungsverfahren ausgeführt werden:
Daten werden gespeichert
Dateideskriptoren werden geschlossen
Datenbankverbindungen werden geschlossen
Anfragen während des Fluges ordnungsgemäß bearbeiten
Rechtzeitiges Beenden, um die Anfrage zur Kündigung des Pods zu erfüllen
Legen Sie eine Übergangsfrist fest, die lang genug ist, damit die Bereinigung abgeschlossen werden kann. Informationen dazu, wie Sie auf das SIGTERM
Signal reagieren, finden Sie in der Dokumentation der Programmiersprache, die Sie für Ihre Anwendung verwenden.
Container-Lifecycle-Hooksiptables
werden, sodass kein neuer Datenverkehr an den Pod gesendet wird.
Container Lifecycle und Endpoint EndpointSlice sind Teil verschiedener Systeme. APIs Es ist wichtig, diese APIs zu orchestrieren. Wenn ein Pod jedoch beendet wird, benachrichtigt die Kubernetes-API gleichzeitig sowohl das Kubelet (für Container Lifecycle) als auch den Controller. EndpointSlice
Weitere Informationen, einschließlich eines Diagramms, finden Sie in den EKS Best Practices Guides unter Sorgfältige Bearbeitung von Client-Anfragen
Beim kubelet
Senden SIGTERM
an den Pod beendet der EndpointSlice
Controller das Objekt. EndpointSlice
Durch diese Kündigung werden die Kubernetes-API-Server benachrichtigt, sie über jeden Knoten zu informieren, kube-proxy
der aktualisiert werden soll. iptables
Obwohl diese Aktionen gleichzeitig ausgeführt werden, gibt es keine Abhängigkeiten oder Sequenzen zwischen ihnen. Es besteht eine hohe Wahrscheinlichkeit, dass der Container das SIGKILL
Signal viel früher empfängt, als die lokalen iptables
Regeln kube-proxy
auf jedem Knoten aktualisiert werden. In diesem Fall sind unter anderem folgende Szenarien möglich:
-
Wenn Ihre Anwendung die laufenden Anfragen und Verbindungen nach Erhalt der Clients sofort und unverblümt verwirft, treten Fehler
SIGTERM,
auf.500
-
Wenn Ihre Anwendung sicherstellt, dass alle laufenden Anfragen und Verbindungen nach Erhalt vollständig bearbeitet werden
SIGTERM
, werden während der Übergangszeit neue Kundenanfragen trotzdem an den Anwendungscontainer gesendet, da dieiptables
Regeln möglicherweise noch nicht aktualisiert wurden. Solange das Bereinigungsverfahren den Server-Socket auf dem Container nicht schließt, führen diese neuen Anfragen zu neuen Verbindungen. Nach Ablauf der Karenzzeit werden die neuen Verbindungen, die nach demSIGTERM
Senden von hergestellt wurden, bedingungslos gelöscht.
Um die vorherigen Szenarien zu berücksichtigen, können Sie die In-App-Integration oder den PreStop Lifecycle-Hook implementieren. Weitere Informationen, einschließlich eines Diagramms, finden Sie unter Anwendungen ordnungsgemäß herunterfahren
Hinweis: Unabhängig davon, ob die Anwendung ordnungsgemäß heruntergefahren wird oder ob das Ergebnis des preStop
Hooks ist, werden die Anwendungscontainer am Ende der Übergangszeit bis zum Ende der Übergangszeit beendet. SIGKILL
Verwenden Sie den preStop
Hook mit einem sleep
Befehl, um das Senden zu verzögern. SIGTERM
Dies hilft dabei, die neuen Verbindungen weiterhin zu akzeptieren, während das Eingangsobjekt sie an den Pod weiterleitet. Testen Sie den Zeitwert des sleep
Befehls, um sicherzustellen, dass die Latenz von Kubernetes und anderen Anwendungsabhängigkeiten berücksichtigt werden, wie im folgenden Beispiel gezeigt:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: containers: - name: nginx lifecycle: # This "sleep" preStop hook delays the Pod shutdown until # after the Ingress Controller removes the matching Endpoint or EndpointSlice preStop: exec: command: - /bin/sleep - "20" # This period should be turned to Ingress/Service Mesh update latency
Weitere Informationen finden Sie unter Container-Hooks