Comment (et pourquoi) ajouter des contrôles de santé à vos conteneurs Docker

0
185

Vous avez créé votre image Docker, l'avez transférée dans votre registre et démarré un nouveau conteneur en production . Tout fonctionne pendant que vous rentrez chez vous pour la journée, mais vous recevez des rapports de panne à votre retour le lendemain matin. Votre conteneur est toujours en cours d'exécution, mais il ne répond pas aux demandes.

Ce scénario peut être inconfortablement familier aux équipes d'exploitation qui travaillent avec Docker. Voici comment utiliser la fonction de bilan de santé de Docker pour obtenir des données précises sur la disponibilité de vos services.

Comment fonctionnent les bilans de santé< /h2>

Les vérifications d'état permettent à un conteneur d'exposer la disponibilité de sa charge de travail. Cela se distingue du fait que le conteneur soit en cours d'exécution. Si votre base de données tombe en panne, votre serveur API ne sera pas en mesure de gérer les demandes, même si son conteneur Docker est toujours en cours d'exécution.

Cela rend les expériences inutiles lors du dépannage. Un simple docker ps signalerait le conteneur comme disponible. L'ajout d'une vérification de l'état étend la sortie de docker ps pour inclure le véritable état du conteneur.

Vous configurez les vérifications de l'état des conteneurs dans votre Dockerfile. Cela accepte une commande que le démon Docker exécutera toutes les 30 secondes. Docker utilise le code de sortie de la commande pour déterminer l'état de santé de votre conteneur :

  • 0 – Le conteneur est sain et fonctionne normalement.
  • 1 – Le conteneur est malsain ; la charge de travail peut ne pas fonctionner.
  • 2 – Ce code d'état est réservé par Docker et ne doit pas être utilisé.

Publicité

Lorsque HEALTHCHECK est présent dans un Dockerfile, vous verrez l'état de santé du conteneur dans la colonne STATUS lorsque vous exécutez docker ps.

L'intégrité n'est pas vérifiée immédiatement lors de la création des conteneurs. L'état s'affichera comme commençant avant la première exécution de la vérification. Cela donne au conteneur le temps d'exécuter toutes les tâches de démarrage. Un conteneur avec un contrôle d'état réussi s'affichera comme sain ; un conteneur défectueux affiche un état défectueux.

Écriture de commandes de vérification de l'état

Les vérifications de l'état des conteneurs sont configurées avec l'instruction HEALTHCHECK dans votre Dockerfile. Vous devez utiliser une commande de vérification de l'état appropriée à votre conteneur. Pour les serveurs Web, curl vous offre un moyen simple d'effectuer un contrôle de préparation de base. Envoyez un ping à un point de terminaison connu qui devrait être disponible chaque fois que votre service est opérationnel.

FROM nginx:latest HEALTHCHECK CMD curl –fail http://localhost/api/healthcheck || sortie 1

Cet exemple marquerait le conteneur comme non sain si le point de terminaison /api/healthcheck de votre serveur émettait un état d'erreur.

Vous pouvez utiliser docker inspect pour voir la sortie des commandes de contrôle de santé. Ceci est utile lorsque vous déboguez votre instruction HEALTHCHECK.

docker inspect –format='{{json .State.Health}}' my-container

Remplacez my-container par l'ID ou le nom du conteneur que vous souhaitez inspecter. Ces détails sont affichés dans la sortie docker ps.

Personnalisation des bilans de santé

Publicité

Docker vous permet de personnaliser la fréquence des contrôles de santé. Vous pouvez également modifier les critères qui marquent un conteneur comme non sain.

Quatre options sont disponibles :

  • –interval – Définissez l'intervalle entre les vérifications de l'état. Cela vous permet de remplacer la valeur par défaut de 30 secondes. Utilisez un intervalle plus élevé pour augmenter le temps entre les vérifications. Cela est utile si vous disposez d'un service de faible priorité où des vérifications d'état régulières peuvent avoir un impact sur les performances. Utilisez une fréquence plus régulière pour les services critiques.
  • –start-period – Définissez la durée après le démarrage d'un conteneur lorsque les vérifications de l'état doivent être ignorées. La commande sera toujours exécutée, mais un état défectueux ne sera pas comptabilisé. Cela donne aux conteneurs le temps de terminer les procédures de démarrage.
  • –retries– Cela vous permet d'exiger plusieurs échecs successifs avant qu'un conteneur ne soit marqué comme non sain. La valeur par défaut est 3. Si une vérification de l'état échoue mais que la suivante réussit, le conteneur ne passera pas à l'état défectueux. Il deviendra défectueux après trois échecs consécutifs de vérification.
  • –timeout – Définissez le délai d'expiration des commandes de vérification de l'état. Docker considérera la vérification comme un échec si la commande ne se termine pas dans ce laps de temps.

Les options sont transmises sous forme d'indicateurs à l'instruction HEALTHCHECK. Fournissez-les avant la commande de vérification de l'état :

HEALTHCHECK –interval=60s –retries=5 CMD curl –fail http://localhost || sortie 1

Cette configuration demande à Docker d'exécuter curl toutes les 60 secondes. Le conteneur sera marqué comme non sain si cinq tests consécutifs ont un code de sortie différent de zéro.

Format de commande

La syntaxe de la commande HEALTHCHECK prend en charge un CMD ou un tableau d'exécution de style point d'entrée. Vous pouvez également passer NONE au lieu de CMD pour désactiver les vérifications de l'état :

HEALTHCHECK NONE

Cela vous permet d'inhiber les vérifications de l'état de votre image de base. Chaque instruction HEALTHCHECK remplace toutes les instructions précédentes dans les calques de votre image.

Qu'en est-il de Docker Compose ?

Docker Compose prend également en charge les définitions de vérification de l'état. Ajoutez une section de bilan de santé à votre service :.

version : "3" services : app : image : nginx : derniers ports : – 80:80 healthcheck : test : curl –fail http://localhost || intervalle de sortie 1 : 10s tentatives : 5 start_period : 5s timeout : 10s Advertisement

La clé de test définit la commande à exécuter. Les autres clés correspondent aux paramètres acceptés par l'instruction Dockerfile HEALTHCHECK.

Résumé

La définition d'une instruction HEALTHCHECK facilite le diagnostic d'un conteneur qui se comporte mal. Vous pouvez suivre l'état de préparation de votre charge de travail indépendamment de l'exécution du conteneur. état.

Les contrôles de santé sont compatibles avec toute commande qui émet un code de sortie 0 ou 1. Vous pouvez utiliser des commandes courantes telles que curl et ping pour inspecter les services Web et les bases de données. Pour un contrôle plus avancé, écrivez un script dédié et incluez-le dans vos images.