Middle
Τι συμβαίνει αν η δοκιμασία ζωτικότητας αποτύχει στο Kubernetes;
sobes.tech AI
Απάντηση από AI
Αν το pod δεν περνάει τη δοκιμασία liveness, το Kubernetes θα εκτελέσει τη δράση που ορίζεται στο manifest του pod. Από προεπιλογή, αυτό είναι η επανεκκίνηση του κοντέινερ.
Δυνατές ενέργειες σε περίπτωση αποτυχίας της δοκιμασίας liveness:
- Επανεκκίνηση: Επανεκκίνηση του κοντέινερ μέσα στο pod. Αυτή είναι η προεπιλεγμένη ενέργεια.
- Καμία: Το Kubernetes δεν θα προβεί σε καμία ενέργεια σε περίπτωση αποτυχίας της δοκιμασίας liveness. Το κοντέινερ θα παραμείνει στην τρέχουσα κατάσταση (
RunningήCrashing). - Εκτέλεση εντολής: Εκτέλεση μιας συγκεκριμένης εντολής μέσα στο κοντέινερ. Αν η εντολή τερματίσει με κωδικό επιστροφής διαφορετικό του μηδέν, η δοκιμασία liveness θεωρείται αποτυχημένη.
Σενάριο με την προεπιλεγμένη ενέργεια (Επανεκκίνηση):
- το kubelet στον κόμβο ελέγχει τακτικά το κοντέινερ με τη βοήθεια της δοκιμασίας liveness.
- η συνθήκη της δοκιμασίας liveness δεν εκπληρώνεται (π.χ., ο διακομιστής HTTP δεν απαντά, η εντολή τερματίζει με σφάλμα).
- το kubelet καταγράφει την αποτυχία της δοκιμασίας.
- Μετά από ορισμένες αποτυχημένες προσπάθειες (ρυθμισμένες από τις παραμέτρους
failureThreshold,initialDelaySeconds,periodSeconds,timeoutSeconds), το kubelet καθορίζει ότι το κοντέινερ είναι ελαττωματικό. - το kubelet στέλνει το σήμα
SIGKILLστο ελαττωματικό κοντέινερ. - το κοντέινερ τερματίζεται.
- το kubelet επανεκκινεί το κοντέινερ στο ίδιο pod.
- η διαδικασία της δοκιμασίας liveness συνεχίζεται.
Είναι σημαντικό να διακρίνουμε μεταξύ της δοκιμασίας liveness και της δοκιμασίας readiness. Η δοκιμασία readiness καθορίζει αν το κοντέινερ είναι έτοιμο να δεχθεί κυκλοφορία. Η αποτυχία της δοκιμασίας readiness έχει ως αποτέλεσμα το Service να μην κατευθύνει κυκλοφορία σε αυτό το αντίγραφο pod, αλλά το κοντέινερ δεν επανεκκινείται. Η αποτυχία της δοκιμασίας liveness υποδεικνύει ελαττωματικότητα και απαιτεί επανεκκίνηση.
# Παράδειγμα δοκιμασίας liveness στο spec.containers
containers:
- name: my-container
image: my-image:latest
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15 # Καθυστέρηση πριν από τον πρώτο έλεγχο
periodSeconds: 20 # Διάστημα μεταξύ ελέγχων
timeoutSeconds: 5 # Χρόνος αναμονής για απάντηση
failureThreshold: 3 # Αριθμός αποτυχημένων προσπαθειών πριν από επανεκκίνηση