Sobes.tech
Middle

Co się stanie, jeśli test liveness w Kubernetes nie przejdzie?

sobes.tech AI

Odpowiedź od AI

Jeśli pod nie przejdzie testu liveness, Kubernetes wykona akcję określoną w manifeście poda. Domyślnie jest to ponowne uruchomienie kontenera.

Możliwe działania w przypadku niepowodzenia testu liveness:

  • Restart: Ponowne uruchomienie kontenera w podzie. To działanie jest domyślne.
  • Brak: Kubernetes nie podejmie żadnych działań w przypadku niepowodzenia testu liveness. Kontener pozostanie w swoim obecnym stanie (Running lub Crashing).
  • Wykonaj polecenie: Wykonanie określonego polecenia wewnątrz kontenera. Jeśli polecenie zakończy się kodem zwrotnym innym niż zero, test liveness uznaje się za nieudany.

Scenariusz z domyślną akcją (Restart):

  1. kubelet na węźle regularnie sprawdza kontener za pomocą testu liveness.
  2. Warunek testu liveness nie jest spełniony (np. serwer HTTP nie odpowiada, polecenie kończy się błędem).
  3. kubelet rejestruje awarię testu.
  4. Po pewnej liczbie nieudanych prób (konfigurowanych przez parametry failureThreshold, initialDelaySeconds, periodSeconds, timeoutSeconds) kubelet uznaje, że kontener jest uszkodzony.
  5. kubelet wysyła sygnał SIGKILL do uszkodzonego kontenera.
  6. Kontener kończy działanie.
  7. kubelet ponownie uruchamia kontener w tym samym podzie.
  8. Proces testu liveness jest kontynuowany.

Ważne jest rozróżnienie testu liveness od testu readiness. Test readiness określa, czy kontener jest gotowy do przyjmowania ruchu. Niepowodzenie testu readiness powoduje, że Service nie kieruje ruchu do tego egzemplarza poda, ale kontener nie jest ponownie uruchamiany. Niepowodzenie testu liveness wskazuje na awarię i wymaga ponownego uruchomienia.

# Przykład testu liveness w spec.containers
containers:
  - name: my-container
    image: my-image:latest
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15 # Opóźnienie przed pierwszym sprawdzeniem
      periodSeconds: 20      # Interwał między sprawdzeniami
      timeoutSeconds: 5       # Czas oczekiwania na odpowiedź
      failureThreshold: 3     # Liczba nieudanych prób przed ponownym uruchomieniem