Sobes.tech
Middle

Que se passe-t-il si la vérification de vivacité échoue dans Kubernetes?

sobes.tech IA

Réponse de l'IA

Si le pod ne passe pas le test de liveness, Kubernetes effectuera l'action spécifiée dans le manifeste du pod. Par défaut, cela redémarrera le conteneur.

Actions possibles en cas d'échec du test de liveness:

  • Redémarrer: Redémarrer le conteneur dans le pod. Cette action est la valeur par défaut.
  • Aucune: Kubernetes n'entreprendra aucune action en cas d'échec du test de liveness. Le conteneur restera dans son état actuel (Running ou Crashing).
  • Exécuter une commande: Exécuter une commande spécifique dans le conteneur. Si la commande se termine avec un code de retour non nul, le test de liveness est considéré comme échoué.

Scénario avec l'action par défaut (Redémarrer):

  1. kubelet sur le nœud vérifie régulièrement le conteneur à l'aide du test de liveness.
  2. La condition du test de liveness n'est pas remplie (par exemple, le serveur HTTP ne répond pas, la commande se termine avec une erreur).
  3. kubelet enregistre l'échec du test.
  4. Après un certain nombre d'échecs (configurés par les paramètres failureThreshold, initialDelaySeconds, periodSeconds, timeoutSeconds), kubelet détermine que le conteneur est défectueux.
  5. kubelet envoie le signal SIGKILL au conteneur défectueux.
  6. Le conteneur se termine.
  7. kubelet redémarre le conteneur dans le même pod.
  8. Le processus de test de liveness reprend.

Il est important de distinguer le test de liveness du test de readiness. Le test de readiness détermine si le conteneur est prêt à recevoir du trafic. Un échec du test de readiness entraîne que le Service ne dirige pas le trafic vers cette instance du pod, mais le conteneur ne se redémarre pas. Un échec du test de liveness indique une défaillance et nécessite un redémarrage.

# Exemple de test de liveness dans spec.containers
containers:
  - name: my-container
    image: my-image:latest
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15 # Délai avant la première vérification
      periodSeconds: 20      # Intervalle entre les vérifications
      timeoutSeconds: 5       # Temps d'attente pour la réponse
      failureThreshold: 3     # Nombre d'échecs avant le redémarrage