Sobes.tech
Middle

Wat gebeurt er als de liveness-test in Kubernetes niet slaagt?

sobes.tech AI

Antwoord van AI

Als de pod de liveness-proef niet doorstaat, voert Kubernetes de actie uit die in het manifest van de pod is gespecificeerd. Standaard wordt de container opnieuw gestart.

Mogelijke acties bij een falende liveness-proef:

  • Herstart: Herstart de container binnen de pod. Dit is de standaardactie.
  • Geen: Kubernetes onderneemt geen actie bij een falende liveness-proef. De container blijft in de huidige staat (Running of Crashing).
  • Uitvoeren commando: Voer een specifiek commando uit binnen de container. Als het commando eindigt met een niet-nul terugkeerwaarde, wordt de liveness-proef als mislukt beschouwd.

Scenario met de standaardactie (Herstart):

  1. kubelet op de node controleert regelmatig de container met behulp van de liveness-proef.
  2. De voorwaarde van de liveness-proef wordt niet voldaan (bijvoorbeeld, de HTTP-server reageert niet, het commando eindigt met een fout).
  3. kubelet registreert de fout van de proef.
  4. Na een aantal mislukte pogingen (geconfigureerd via de parameters failureThreshold, initialDelaySeconds, periodSeconds, timeoutSeconds) bepaalt kubelet dat de container defect is.
  5. kubelet stuurt het signaal SIGKILL naar de defecte container.
  6. De container wordt beëindigd.
  7. kubelet start de container opnieuw in dezelfde pod.
  8. Het liveness-proces wordt hervat.

Het is belangrijk om onderscheid te maken tussen de liveness-proef en de readiness-proef. De readiness-proef bepaalt of de container klaar is om verkeer te ontvangen. Een mislukking van de readiness-proef zorgt ervoor dat de Service geen verkeer naar deze pod-voorbeeld stuurt, maar de container wordt niet opnieuw gestart. Een mislukking van de liveness-proef duidt op een storing en vereist een herstart.

# Voorbeeld van een liveness-proef in spec.containers
containers:
  - name: my-container
    image: my-image:latest
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15 # Vertraging voor de eerste controle
      periodSeconds: 20      # Interval tussen controles
      timeoutSeconds: 5       # Wachtduur op antwoord
      failureThreshold: 3     # Aantal mislukte pogingen voor herstart