Sobes.tech
Middle

Ce se întâmplă dacă testul de liveness nu trece în Kubernetes?

sobes.tech AI

Răspuns de la AI

Dacă podul nu trece testul de liveness, Kubernetes va executa acțiunea specificată în manifestul podului. În mod implicit, acest lucru repornește containerul.

Acțiuni posibile în cazul eșecului testului de liveness:

  • Repornire: Repornirea containerului din interiorul podului. Această acțiune este implicită.
  • Niciuna: Kubernetes nu va întreprinde nicio acțiune în cazul eșecului testului de liveness. Containerul va rămâne în starea sa actuală (Running sau Crashing).
  • Execută comandă: Executarea unei comenzi specifice în interiorul containerului. Dacă comanda se încheie cu un cod de ieșire diferit de zero, testul de liveness este considerat eșuat.

Scenariul cu acțiunea implicită (Repornire):

  1. kubelet pe nod verifică regulat containerul folosind testul de liveness.
  2. Condiția testului de liveness nu este îndeplinită (de exemplu, serverul HTTP nu răspunde, comanda se încheie cu eroare).
  3. kubelet înregistrează eșecul testului.
  4. După un anumit număr de încercări nereușite (configurate prin parametrii failureThreshold, initialDelaySeconds, periodSeconds, timeoutSeconds), kubelet determină că containerul este defect.
  5. kubelet trimite semnalul SIGKILL către containerul defect.
  6. Containerul se termină.
  7. kubelet repornește containerul în același pod.
  8. Procesul testului de liveness se reia.

Este important să diferențiem între testul de liveness și cel de readiness. Testul de readiness determină dacă containerul este gata să primească trafic. Eșecul testului de readiness face ca Service să nu direcționeze trafic către această instanță a podului, dar containerul nu se repornește. Eșecul testului de liveness indică o defecțiune și necesită o repornire.

# Exemplu de test de liveness în spec.containers
containers:
  - name: my-container
    image: my-image:latest
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15 # Întârziere înainte de prima verificare
      periodSeconds: 20      # Interval între verificări
      timeoutSeconds: 5       # Timp de așteptare pentru răspuns
      failureThreshold: 3     # Număr de eșecuri înainte de repornire