Middle
Was passiert, wenn die Liveness-Prüfung in Kubernetes fehlschlägt?
sobes.tech KI
Antwort von AI
Wenn der Pod den Liveness-Test nicht besteht, führt Kubernetes die im Manifest des Pods angegebene Aktion aus. Standardmäßig wird der Container neu gestartet.
Mögliche Aktionen bei einem Fehler im Liveness-Test:
- Neustart: Neustart des Containers im Pod. Diese Aktion ist die Standardeinstellung.
- Keine: Kubernetes ergreift keine Maßnahmen bei einem Fehler im Liveness-Test. Der Container bleibt in seinem aktuellen Zustand (
RunningoderCrashing). - Befehl ausführen: Ausführen eines bestimmten Befehls im Container. Wenn der Befehl mit einem Rückgabewert ungleich Null endet, gilt der Liveness-Test als fehlgeschlagen.
Szenario mit der Standardaktion (Neustart):
- kubelet auf dem Knoten überprüft regelmäßig den Container mittels des Liveness-Tests.
- Die Bedingung des Liveness-Tests ist nicht erfüllt (z.B. HTTP-Server antwortet nicht, Befehl endet mit Fehler).
- kubelet registriert den Fehler des Tests.
- Nach einer bestimmten Anzahl von Fehlschlägen (konfiguriert durch die Parameter
failureThreshold,initialDelaySeconds,periodSeconds,timeoutSeconds) erkennt kubelet, dass der Container defekt ist. - kubelet sendet das Signal
SIGKILLan den defekten Container. - Der Container wird beendet.
- kubelet startet den Container im selben Pod neu.
- Der Liveness-Test wird fortgesetzt.
Es ist wichtig, den Liveness-Test vom Readiness-Test zu unterscheiden. Der Readiness-Test bestimmt, ob der Container bereit ist, Traffic zu empfangen. Ein Fehler im Readiness-Test führt dazu, dass der Service keinen Traffic an diese Pod-Instanz sendet, aber der Container wird nicht neu gestartet. Ein Fehler im Liveness-Test zeigt eine Fehlfunktion an und erfordert einen Neustart.
# Beispiel für einen Liveness-Test in spec.containers
containers:
- name: my-container
image: my-image:latest
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15 # Verzögerung vor dem ersten Test
periodSeconds: 20 # Intervall zwischen den Tests
timeoutSeconds: 5 # Wartezeit auf Antwort
failureThreshold: 3 # Anzahl der Fehlschläge vor Neustart