Sobes.tech
Middle

Cosa succede se il test di vivacità fallisce in Kubernetes?

sobes.tech AI

Risposta dell'AI

Se il pod non supera il test di liveness, Kubernetes eseguirà l'azione specificata nel manifest del pod. Per impostazione predefinita, questo riavvia il contenitore.

Azioni possibili in caso di fallimento del test di liveness:

  • Riavvia: Riavvia il contenitore all'interno del pod. Questa azione è quella predefinita.
  • Nessuna: Kubernetes non intraprenderà alcuna azione in caso di fallimento del test di liveness. Il contenitore rimarrà nello stato attuale (Running o Crashing).
  • Esegui comando: Esegue un comando specifico all'interno del contenitore. Se il comando termina con un codice di ritorno diverso da zero, il test di liveness è considerato fallito.

Scenario con azione predefinita (Riavvia):

  1. kubelet sul nodo verifica regolarmente il contenitore tramite il test di liveness.
  2. La condizione del test di liveness non viene soddisfatta (ad esempio, il server HTTP non risponde, il comando termina con errore).
  3. kubelet registra il fallimento del test.
  4. Dopo alcuni tentativi falliti (configurati tramite i parametri failureThreshold, initialDelaySeconds, periodSeconds, timeoutSeconds), kubelet determina che il contenitore è difettoso.
  5. kubelet invia il segnale SIGKILL al contenitore difettoso.
  6. Il contenitore termina.
  7. kubelet riavvia il contenitore nello stesso pod.
  8. Il processo di test di liveness riprende.

È importante distinguere tra il test di liveness e il test di readiness. Il test di readiness determina se il contenitore è pronto a ricevere traffico. Il fallimento del test di readiness porta il Service a non indirizzare il traffico a questa istanza del pod, ma il contenitore non viene riavviato. Il fallimento del test di liveness indica un malfunzionamento e la necessità di un riavvio.

# Esempio di test di liveness in spec.containers
containers:
  - name: my-container
    image: my-image:latest
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15 # Ritardo prima del primo controllo
      periodSeconds: 20      # Intervallo tra i controlli
      timeoutSeconds: 5       # Tempo di attesa della risposta
      failureThreshold: 3     # Numero di fallimenti prima del riavvio