Sobes.tech
Middle

Τι συμβαίνει αν η δοκιμασία ζωτικότητας αποτύχει στο Kubernetes;

sobes.tech AI

Απάντηση από AI

Αν το pod δεν περνάει τη δοκιμασία liveness, το Kubernetes θα εκτελέσει τη δράση που ορίζεται στο manifest του pod. Από προεπιλογή, αυτό είναι η επανεκκίνηση του κοντέινερ.

Δυνατές ενέργειες σε περίπτωση αποτυχίας της δοκιμασίας liveness:

  • Επανεκκίνηση: Επανεκκίνηση του κοντέινερ μέσα στο pod. Αυτή είναι η προεπιλεγμένη ενέργεια.
  • Καμία: Το Kubernetes δεν θα προβεί σε καμία ενέργεια σε περίπτωση αποτυχίας της δοκιμασίας liveness. Το κοντέινερ θα παραμείνει στην τρέχουσα κατάσταση (Running ή Crashing).
  • Εκτέλεση εντολής: Εκτέλεση μιας συγκεκριμένης εντολής μέσα στο κοντέινερ. Αν η εντολή τερματίσει με κωδικό επιστροφής διαφορετικό του μηδέν, η δοκιμασία liveness θεωρείται αποτυχημένη.

Σενάριο με την προεπιλεγμένη ενέργεια (Επανεκκίνηση):

  1. το kubelet στον κόμβο ελέγχει τακτικά το κοντέινερ με τη βοήθεια της δοκιμασίας liveness.
  2. η συνθήκη της δοκιμασίας liveness δεν εκπληρώνεται (π.χ., ο διακομιστής HTTP δεν απαντά, η εντολή τερματίζει με σφάλμα).
  3. το kubelet καταγράφει την αποτυχία της δοκιμασίας.
  4. Μετά από ορισμένες αποτυχημένες προσπάθειες (ρυθμισμένες από τις παραμέτρους failureThreshold, initialDelaySeconds, periodSeconds, timeoutSeconds), το kubelet καθορίζει ότι το κοντέινερ είναι ελαττωματικό.
  5. το kubelet στέλνει το σήμα SIGKILL στο ελαττωματικό κοντέινερ.
  6. το κοντέινερ τερματίζεται.
  7. το kubelet επανεκκινεί το κοντέινερ στο ίδιο pod.
  8. η διαδικασία της δοκιμασίας 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     # Αριθμός αποτυχημένων προσπαθειών πριν από επανεκκίνηση