Sobes.tech
Middle

Kas nutiks, jei liveness-testas Kubernetes'e nepavyks?

sobes.tech AI

Atsakymas iš AI

Jei pod nepraeina liveness bandymą, Kubernetes vykdys nurodytą veiksmą pod'o manifest'e. Paprastai tai yra konteinerio perkrovimas:

Galimi veiksmai, kai liveness bandymas nepavyksta:

  • Perkrauti: konteinerio perkrovimas pod'o viduje. Šis veiksmas naudojamas kaip numatytasis.
  • Nieko: Kubernetes neims jokių veiksmų, kai nepavyksta liveness bandymas. Konteineris liks dabartinėje būklėje (Running arba Crashing).
  • Vykdyti komandą: vykdyti tam tikrą komandą konteineryje. Jei komanda baigiasi su neigiamu grąžos kodu, liveness bandymas laikomas nesėkmingu.

Scenarijus su numatytuoju veiksmu (Perkrauti):

  1. kubelet reguliariai tikrina konteinerį naudodamas liveness bandymą.
  2. Jei liveness bandymo sąlyga nėra įvykdyta (pavyzdžiui, HTTP serveris neatsako, komanda baigiasi klaida):
  3. kubelet užregistruoja gedimą.
  4. Po kelių nesėkmingų bandymų (failureThreshold, initialDelaySeconds, periodSeconds, timeoutSeconds parametrų nustatyta):
  5. kubelet siunčia SIGKILL signalą neveikiančiam konteineriui.
  6. Konteineris užbaigia darbą.
  7. kubelet perkrauna tą patį pod'ą.
  8. Liveness bandymo procesas atnaujinamas.

Svarbu atskirti liveness bandymą nuo readiness bandymo. Readiness bandymas nustato, ar konteineris yra pasiruošęs priimti srautą. Jei readiness bandymas nepavyksta, Service neperadresuos srauto į šį pod'ą, tačiau konteineris nebus perkrautas. Liveness bandymo nesėkmė rodo gedimą ir poreikį perkrauti.

# Pavyzdys liveness bandymo spec.containers dalyje
containers:
  - name: my-container
    image: my-image:latest
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15 # Uždelstas laikas prieš pirmą patikrinimą
      periodSeconds: 20      # Patikrinimų intervalas
      timeoutSeconds: 5       # Atsakymo laukimo laikas
      failureThreshold: 3     # Nesėkmių skaičius prieš perkrovimą