Contrôles d'intégrité

CycleCloud propose deux mécanismes pour vérifier l’intégrité des machines virtuelles : Les vérifications d’intégrité des nœuds sont une fonctionnalité plus récente qui effectue les vérifications pendant l’étape d’approvisionnement et empêche la jonction des machines virtuelles non saines, tandis que HealthCheck les exécute régulièrement une fois que la machine virtuelle a rejoint le cluster en tant que nœud.

Vérifications d’intégrité des nœuds

Les contrôles d’intégrité des nœuds peuvent détecter le matériel défectueux avant qu’une machine virtuelle soit autorisée à rejoindre un cluster CycleCloud. La version actuelle de cette fonctionnalité exécute des scripts d’intégrité case activée intégrés aux images AzureHPC officielles qui se trouvent sous /opt/azurehpc/test/azurehpc-health-checks/. La source de ces scripts se trouve dans le référentiel AzureHPC Node Health Checks, mais notez que la version intégrée à la version de l’image AzureHPC de votre cluster n’est peut-être pas la dernière version disponible dans le référentiel.

Configuration requise

La version actuelle de Node Health Checks prend uniquement en charge les images AzureHPC publiées après le 7 novembre 2023 (contenant azurehpc-health-checks version v2.0.6 ou ultérieure) et les images personnalisées dérivées de celles-ci. Les contrôles d’intégrité des nœuds ne sont actuellement pas pris en charge dans Windows.

Activation des contrôles d’intégrité des nœuds pour les clusters Slurm

Le formulaire de création de cluster Slurm propose une case à cocher pour activer les vérifications d’intégrité des nœuds situées sous l’onglet Paramètres avancés . La case à cocher active les vérifications d’intégrité des nœuds sur le tableau de nœuds HPC du cluster. Si vous souhaitez activer les contrôles d’intégrité des nœuds sur d’autres tableaux de nœuds (ou pour d’autres types de cluster), vous devez utiliser un modèle de cluster personnalisé.

Les vérifications d’intégrité des nœuds peuvent être désactivées sur un cluster en cours d’exécution en décochant simplement la case . Il n’est pas nécessaire de mettre à l’échelle le tableau de nœuds pour que les modifications prennent effet.

Interface graphique graphique des contrôles d’intégrité du nœud

Présentation des résultats des vérifications d’intégrité des nœuds

Une fois qu’une machine virtuelle réussit les vérifications d’intégrité, elle passe à la phase de configuration logicielle.

Si une machine virtuelle échoue à l’un des scripts de case activée d’intégrité, un message d’erreur est envoyé à CycleCloud et la machine virtuelle est automatiquement empêchée de rejoindre le cluster.

Journaux d’erreurs des vérifications d’intégrité des nœuds

Si la machine virtuelle est démarrée dans un NodeArray avec le surprovisionnement activé (par exemple, Slurm hpc Node Array), la machine virtuelle doit être remplacée automatiquement dans le cadre du surprovisionnement. Dans ce cas, aucune action n’est requise et les machines virtuelles saines sont sélectionnées pour rejoindre le cluster (bien qu’un message d’erreur s’affiche sur la page de votre cluster indiquant qu’une ou plusieurs machines virtuelles ont échoué).

Si la machine virtuelle est démarrée pour un seul nœud, un tableau de nœuds avec surprovisionnement désactivé (par exemple, le Slurm htc Node Array), ou si plus de machines virtuelles échouent aux contrôles d’intégrité que sont pris en charge par le surprovisionnement, le nœud passe à l’état Échec et l’allocation échoue. CycleCloud peut tenter de re-imager la machine virtuelle pour corriger le problème, mais si la nouvelle image échoue, le nœud doit être arrêté et remplacé (manuellement par un administrateur ou automatiquement par le programme de mise à l’échelle automatique).

Notes

Si vous avez activé les contrôles d’intégrité des nœuds, mais que l’image de machine virtuelle ne répond pas aux exigences ci-dessus, toutes les machines virtuelles sont autorisées à rejoindre le cluster, mais le status contient un avertissement indiquant que les vérifications ne sont pas prises en charge. Détails de l’erreur des vérifications d’intégrité du nœud

Référence d’attribut

Attribut Type Définition
EnableNodeHealthChecks Boolean (Facultatif) Activer les vérifications d’intégrité des nœuds au démarrage pour ce nœud ou ce tableau de nœuds

Healthcheck

Azure CycleCloud fournit un mécanisme pour mettre fin aux machines virtuelles qui se trouvent dans un état non sain appelé HealthCheck. Les scripts définis par le système et l’utilisateur (Python et Bash) sont exécutés régulièrement (5 minutes sur Windows, 10 minutes sur Linux) pour déterminer l’intégrité globale d’une machine virtuelle. HealthCheck permet aux administrateurs de définir des conditions dans lesquelles les machines virtuelles doivent être arrêtées sans avoir à surveiller et corriger manuellement.

Scripts HealthCheck intégrés

Les machines virtuelles compatibles CycleCloud sont fournies avec deux scripts HealthCheck par défaut :

  • Le script converge_timeout met fin à une instance qui n’a pas terminé la configuration logicielle dans les quatre heures suivant le lancement. Ce délai d’expiration peut être contrôlé avec le cyclecloud.keepalive.timeout paramètre (défini en secondes).
  • Le script scheduled_shutdown recherche les fichiers maker dans $JETPACK_HOME/run/scheduled_shutdown qui contiennent une seule ligne donnant un temps d’arrêt en secondes d’horodatage Unix et une deuxième ligne facultative avec une explication. Lorsque l’heure actuelle est postérieure à l’horodatage le plus ancien dans les fichiers, la machine virtuelle est considérée comme non saine.

Fonctionnement

Les scripts HealthCheck se trouvent dans le répertoire $JETPACK_HOME/config/healthcheck.d . Linux prend en charge les scripts Python et Bash, tandis que Windows prend uniquement en charge les scripts Python. Le script doit déterminer l’intégrité de la machine virtuelle. Si la machine virtuelle est jugée non saine, le script doit se fermer avec un status de 254, ce qui indique à CycleCloud que la machine virtuelle n’est pas saine et doit être arrêtée.

Lorsque vous êtes connecté à une machine virtuelle qui exécute HealthCheck, vous pouvez empêcher l’arrêt de la machine virtuelle en exécutant la commande jetpack keepalive. Sur les instances Linux, vous pouvez spécifier une période en heures ou forever alors que sur Windows forever est la seule option.

Notes

Lorsqu’une machine virtuelle est jugée non saine, l’agent HealthCheck demande à CycleCloud d’arrêter la machine virtuelle, la machine virtuelle ne sera jamais arrêtée localement via shutdown la commande. Dans le cas où la machine virtuelle ne peut pas communiquer avec CycleCloud, la machine virtuelle reste en place même si elle n’est pas saine jusqu’à ce que CycleCloud soit atteint.

Exemple

Par exemple, nous allons écrire un script HealthCheck qui garantit qu’une machine virtuelle Linux n’est pas active pendant plus de 24 heures. Ce script peut être utilisé pour simuler des évictions de faible priorité afin de tester la façon dont un workflow réagit à une machine virtuelle supprimée. Ce script est placé dans /opt/cycle/jetpack/config/healthcheck.d/healthcheck_example.sh

#!/bin/bash

# Get the uptime of the system (in seconds) and check to see if it is
# greater than 86,400 (24 hours in seconds). If it is, exit 254 to
# signal that the VM is unhealthy.
if (( $(cat /proc/uptime | awk '{print ($1 > 86400)}'))); then
  exit 254
fi

Notes

Ce script peut être placé sur une machine virtuelle via CycleCloud Project ou en l’ajoutant directement lors de la création d’une image personnalisée.