Sobes.tech
Middle

Čo sa stane, ak liveness test v Kubernetes zlyhá?

sobes.tech AI

Odpoveď od AI

Ak pod ne prejde liveness skúšku, Kubernetes vykoná akciu uvedenú v manifestu podu. Predvolene je to reštartovanie kontajnera.

Možné akcie pri zlyhaní liveness skúšky:

  • Reštart: Reštartovanie kontajnera v rámci podu. Toto je predvolená akcia.
  • Žiadna: Kubernetes nevykoná žiadnu akciu pri zlyhaní liveness skúšky. Kontajner zostane v aktuálnom stave (Running alebo Crashing).
  • Spusti príkaz: Spustenie špecifického príkazu v kontajneri. Ak príkaz skončí s nenulovým kódom, liveness skúška sa považuje za neúspešnú.

Scenár s predvolenou akciou (Reštart):

  1. kubelet na uzle pravidelne kontroluje kontajner pomocou liveness skúšky.
  2. Podmienka liveness skúšky nie je splnená (napríklad, HTTP server neodpovedá, príkaz končí chybou).
  3. kubelet zaznamená zlyhanie skúšky.
  4. Po niekoľkých neúspešných pokusoch (nastavených parametrami failureThreshold, initialDelaySeconds, periodSeconds, timeoutSeconds) kubelet určí, že kontajner je chybný.
  5. kubelet odošle signál SIGKILL chybnému kontajneru.
  6. Kontajner sa ukončí.
  7. kubelet ho reštartuje v rovnakom podu.
  8. Proces liveness skúšky sa obnoví.

Je dôležité rozlišovať medzi liveness skúškou a readiness skúškou. Readiness skúška určuje, či je kontajner pripravený prijímať prevádzku. Neúspech readiness skúšky spôsobí, že Service neadresuje prevádzku na tento exemplár podu, ale kontajner sa nepreštartuje. Neúspech liveness skúšky signalizuje poruchu a vyžaduje reštart.

# Príklad liveness skúšky v spec.containers
containers:
  - name: my-container
    image: my-image:latest
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15 # Zdržanie pred prvou kontrolou
      periodSeconds: 20      # Interval medzi kontrolami
      timeoutSeconds: 5       # Čas čakania na odpoveď
      failureThreshold: 3     # Počet neúspešných pokusov pred reštartom