Partager via


Erreurs de pool et de nœud Azure Batch

Certaines opérations de création et de gestion de pool Azure Batch se produisent immédiatement. La détection des échecs pour ces opérations est simple, car les erreurs sont généralement retournées immédiatement par l’API, la ligne de commande ou l’interface utilisateur. Toutefois, certaines opérations sont asynchrones et s’exécutent en arrière-plan, ce qui prend plusieurs minutes. Cet article explique comment détecter et éviter les échecs potentiels d’opérations en arrière-plan pour des pools et nœuds de pool.

Vérifiez que vous avez paramétré vos applications pour implémenter le contrôle complet des erreurs, en particulier pour les opérations asynchrones. Le contrôle complet des erreurs peut vous aider à identifier et diagnostiquer rapidement les problèmes.

Erreurs de pool

Les erreurs de pool peuvent être liées au délai d’attente ou à l’échec du redimensionnement, à l’échec de mise à l’échelle automatique ou à l’échec de la suppression du pool.

Dépassement du délai d’attente ou échec du redimensionnement

Lors de la création d’un pool ou du redimensionnement d’un pool existant, vous spécifiez le nombre de nœuds cible. L’opération de création ou de redimensionnement se termine immédiatement, mais l’allocation des nouveaux nœuds ou la suppression de nœuds existants peut prendre plusieurs minutes. Vous pouvez spécifier le délai de redimensionnement dans les API Pool – Ajouter ou Pool – Redimensionner . Si Batch ne peut pas allouer le nombre cible de nœuds pendant le délai d'attente du redimensionnement, le pool passe à l’état stable et signale des erreurs de redimensionnement.

La propriété resizeError répertorie les erreurs qui se sont produites pour l’évaluation la plus récente.

Les causes courantes des erreurs de redimensionnement sont notamment les suivantes :

  • Délai d'expiration du redimensionnement trop court. En règle générale, le délai d’expiration par défaut de 15 minutes est suffisamment long pour allouer ou supprimer des nœuds de pool. Si vous allouez un grand nombre de nœuds, comme plus de 1 000 nœuds à partir d’une image Place de marché Azure ou plus de 300 nœuds à partir d’une image de machine virtuelle personnalisée, vous pouvez définir le délai d’expiration du redimensionnement sur 30 minutes.

  • Quota de cœurs insuffisant. Un compte Batch est limité dans le nombre de cœurs qu’il peut allouer entre tous les pools et cesse d’allouer des nœuds une fois qu’il a atteint ce quota. Vous pouvez augmenter le quota de cœurs pour que Batch puisse allouer plus de nœuds. Pour plus d’informations, consultez Quotas et limites du service Batch.

  • Nombre insuffisant d’adresses IP du sous-réseau quand un pool est dans un réseau virtuel. Un sous-réseau de réseau virtuel doit avoir suffisamment d’adresses IP à allouer à chaque nœud du pool demandé. Sinon, les nœuds ne peuvent pas être créés. Pour plus d’informations, consultez l’article Créer un pool Azure Batch dans un réseau virtuel.

  • Ressources insuffisantes quand un pool est dans un réseau virtuel. Lorsque vous créez un pool dans un réseau virtuel, vous pouvez créer des ressources telles que des équilibreurs de charge, des adresses IP publiques et des groupes de sécurité réseau (NSG) dans le même abonnement que le compte Batch. Vérifiez que les quotas de l’abonnement sont suffisants pour ces ressources.

  • Vastes pools avec images de machines virtuelles personnalisées. L’allocation de vastes pools utilisant des images de machine virtuelle personnalisées peut prendre plus de temps et des dépassements du délai d’expiration peuvent se produire. Pour obtenir des recommandations sur les limites et la configuration, consultez Créer un pool avec Azure Compute Gallery.

Échecs de mise à l’échelle automatique

Vous pouvez définir Azure Batch pour mettre automatiquement à l’échelle le nombre de nœuds d’un pool et définir les paramètres de la formule de mise à l’échelle automatique pour le pool. Le service Batch utilise ensuite la formule pour évaluer régulièrement le nombre de nœuds dans le pool et définir un nouveau nombre de cibles. Pour plus d’informations, consultez Créer une formule automatique pour la mise à l’échelle des nœuds de calcul dans un pool Batch.

Les problèmes suivants peuvent se produire lors de l’utilisation d’une mise à l’échelle automatique :

  • L’évaluation de la mise à l’échelle automatique échoue.
  • L’opération de redimensionnement qui en résulte échoue et dépasse le délai d’expiration.
  • Un problème portant sur la formule de mise à l’échelle automatique produit des valeurs cibles de nœud incorrectes. Le redimensionnement peut fonctionner ou expirer.

Pour obtenir des informations sur la dernière évaluation de mise à l’échelle automatique, utilisez la propriété autoScaleRun. Cette propriété rapporte le temps d’évaluation, les valeurs et les résultats, ainsi que les éventuelles erreurs de performance.

Un événement de fin de redimensionnement de pool capture les informations sur toutes les évaluations.

Échecs de suppression de pool

Pour supprimer un pool qui contient des nœuds, Batch supprime d’abord les nœuds, ce qui peut prendre plusieurs minutes. Il supprime ensuite l’objet pool proprement dit.

Batch définit poolState sur deleting pendant le processus de suppression. L’application appelante peut détecter si la suppression du pool prend trop de temps en utilisant les propriétés state et stateTransitionTime.

Si la suppression du pool prend plus de temps que prévu, Batch réessaye régulièrement jusqu’à ce que le pool soit supprimé. Dans certains cas, le retard est dû à une interruption du service Azure ou à d’autres problèmes temporaires. D’autres facteurs qui empêchent la suppression réussie du pool peuvent vous obliger à prendre des mesures pour corriger le problème. Ces facteurs peuvent inclure les problèmes suivants :

  • Des verrous de ressources peuvent être placés sur des ressources créées par Batch ou sur des ressources réseau utilisées par Batch.

  • Les ressources que vous avez créées ont une dépendance vis-à-vis d’une ressource créée par Batch. Par exemple, si vous créez un pool dans un réseau virtuel, Batch crée un NSG, une IP publique et un équilibreur de charge. Si vous utilisez ces ressources en dehors du pool, vous ne pouvez pas supprimer le pool.

  • Le fournisseur de ressources Microsoft.Batch a peut-être été désinscrit de l’abonnement qui contient votre pool.

  • Pour les comptes Batch en mode abonnement utilisateur, il se peut que le rôle Contributeur ou Propriétaire ne soit plus attribué à Microsoft Azure Batch pour l’abonnement qui contient votre pool. Pour plus d’informations, consultez Autoriser Batch à accéder à l’abonnement.

Erreurs de nœud

Même lorsque Batch alloue des nœuds d’un pool, différents problèmes peuvent les endommager ou les rendre incapables d’exécuter des tâches. Ces nœuds entraînent toujours des frais. Il est donc important de détecter les problèmes afin d’éviter de payer pour des nœuds que vous ne pouvez pas utiliser. Connaître les erreurs courantes de nœud et connaître le jobState actuel est utile pour la résolution des problèmes.

Échecs de la tâche de démarrage

Vous pouvez spécifier un startTask facultatif pour un pool. Comme pour n’importe quelle tâche, la tâche de démarrage utilise une ligne de commande et peut télécharger des fichiers de ressources à partir du stockage. La tâche de démarrage s’exécute pour chaque nœud au démarrage du nœud. La propriété waitForSuccess indique si Batch attend que la tâche de démarrage se termine avec succès avant de planifier des tâches vers un nœud. Si vous configurez le nœud pour qu’il attende l’achèvement de la tâche de démarrage, mais que la tâche de démarrage échoue, le nœud n’est pas utilisable, mais entraîne toujours des frais.

Vous pouvez détecter les échecs des tâches de démarrage via les propriétés taskExecutionResult et taskFailureInformation de la propriété du nœud startTaskInformation du plus haut niveau.

Une tâche de démarrage qui a échoué fait également passer computeNodeState à starttaskfailed si waitForSuccess a été défini sur true.

Comme toute tâche, une tâche de démarrage peut échouer pour diverses raisons. Pour résoudre les problèmes, examinez les fichiers journaux stdout, stderr et tout autre fichier journal spécifique aux tâches.

Les tâches de démarrage doivent être réentrantes, car il est possible que la tâche de démarrage soit exécutée plusieurs fois sur le même nœud, par exemple lors de la réinitialisation ou du redémarrage d’un nœud. Dans de rares cas, lorsqu’une tâche de démarrage s’exécute après qu’un événement provoque un redémarrage d’un nœud, un système d’exploitation (système d’exploitation) ou un disque éphémère se réinitialise alors que l’autre ne le fait pas. Étant donné que les tâches de démarrage Batch et toutes les tâches Batch s’exécutent à partir du disque éphémère, cette situation n’est généralement pas un problème. Toutefois, dans les cas où la tâche de démarrage installe une application sur le disque du système d’exploitation et conserve d’autres données sur le disque éphémère, il peut y avoir des problèmes de synchronisation. Protégez votre application en conséquence si vous utilisez les deux disques.

Échec du téléchargement des packages d’application

Vous pouvez spécifier un ou plusieurs packages d’application pour un pool. Batch télécharge les fichiers de package spécifiés vers chaque nœud et décompresse les fichiers après le démarrage du nœud, mais avant qu’il ne planifie les tâches. Il est courant d’utiliser une commande de tâche de démarrage avec des packages d’application, par exemple pour copier des fichiers à un autre emplacement ou exécuter l’installation.

Si un package d’application ne parvient pas à télécharger et à décompresser, la propriété computeNodeError signale l’échec et définit l’état du nœud sur unusable.

Échec du téléchargement du conteneur

Vous pouvez spécifier une ou plusieurs références de conteneur sur un pool. Batch télécharge les conteneurs spécifiés pour chaque nœud. Si le conteneur ne parvient pas à télécharger, la propriété computeNodeError signale l’échec et définit l’état du nœud sur unusable.

Mises à jour de système d’exploitation de nœud

Pour des pools Windows, enableAutomaticUpdates est défini sur true par défaut. S’il est recommandé d’autoriser les mises à jour automatiques, celles-ci peuvent interrompre la progression des tâches, en particulier celles de longue durée. Vous pouvez définir cette valeur sur false pour vous assurer qu’une mise à jour du système d’exploitation ne se produise pas de manière inattendue.

Nœud dans un état inutilisable

Batch peut définir computeNodeState sur unusable pour de nombreuses raisons. Vous ne pouvez pas planifier des tâches sur un nœud unusable, mais celui-ci entraîne toujours des frais.

Si Batch peut déterminer la cause de l’erreur, la propriété computeNodeError le signale. Si un nœud est à l’état unusable, mais qu’il n’a pas de computeNodeError, cela signifie que Batch ne peut pas communiquer avec la machine virtuelle. Dans ce cas, Batch tente toujours de récupérer la machine virtuelle. Toutefois, Batch ne tente pas automatiquement de récupérer les machines virtuelles qui n’ont pas réussi à installer les packages d’applications ou les conteneurs, même si leur état est unusable.

Les nœuds unusable peuvent s’expliquer par les raisons suivantes :

  • Une image de machine virtuelle personnalisée n’est pas valide. Par exemple, l’image n’est pas correctement préparée.
  • Une machine est déplacée en raison d’une défaillance de l’infrastructure ou d’une mise à niveau de bas niveau. Batch récupère le nœud.
  • Une image de machine virtuelle a été déployée sur un matériel qui ne la prend pas en charge.
  • Les machines virtuelles sont dans un réseau virtuel Azure, et le trafic a été bloqué pour les ports principaux.
  • Les machines virtuelles se trouvent dans un réseau virtuel, mais le trafic sortant vers le stockage Azure est bloqué.
  • Les machines virtuelles se trouvent dans un réseau virtuel avec une configuration DNS personnalisée et le serveur DNS ne peut pas résoudre le stockage Azure.

Fichiers de journaux de l’agent du nœud

Si vous devez contacter le support technique concernant un problème de nœud de pool, le processus de l’agent Batch qui s’exécute sur chaque nœud du pool fournit des fichiers journaux très utiles. Vous pouvez charger des fichiers journaux pour un nœud via le portail Azure, Batch Explorer ou l’API Nœud de calcul – Charger des journaux de service par lots. Après avoir chargé et enregistré les fichiers journaux, vous pouvez supprimer le nœud ou le pool pour réduire le coût d’exécution des nœuds.

Disque de nœud plein

Batch utilise le lecteur temporaire sur une machine virtuelle de pool de nœuds pour stocker des fichiers tels que les fichiers de travail, les fichiers de tâches et les fichiers partagés suivants :

  • Fichiers de package d’application
  • Fichiers de ressources de tâche
  • Fichiers spécifiques à l’application téléchargés vers l’un des dossiers Batch
  • Fichiers stdout et stderr pour chaque exécution d’application de tâche
  • Fichiers de sortie spécifiques à l’application

Les fichiers tels que les packages d’application ou les fichiers de ressources de démarrage de tâche n’écrivent qu’une seule fois lorsque Batch crée le nœud du pool. Même s’ils sont écrits une seule fois, si ces fichiers sont trop volumineux, ils peuvent remplir le lecteur temporaire.

D’autres fichiers, tels que stdout et stderr, sont écrits pour chaque tâche exécutée par un nœud. Si un grand nombre de tâches s’exécutent sur le même nœud ou que les fichiers de tâches sont trop volumineux, ils peuvent remplir le lecteur temporaire.

Le nœud a également besoin d’une petite quantité d’espace sur le disque du système d’exploitation pour créer des utilisateurs après son démarrage.

La taille du lecteur temporaire dépend de la taille de la machine virtuelle. L’un des aspects à prendre en compte lors de la sélection d’une taille de machine virtuelle est de veiller à ce que le lecteur temporaire dispose d’un espace suffisant pour la charge de travail planifiée.

Lorsque vous ajoutez un pool dans le portail Azure, vous pouvez afficher la liste complète des tailles de machine virtuelle, y compris une colonne Taille du disque de ressources. Les articles qui décrivent les tailles de machine virtuelle ont des tables avec une colonne Stockage temporaire. Pour plus d’informations, voir Tailles de machine virtuelle à calcul optimisé. Pour obtenir un exemple de table de taille, consultez Série Fsv2.

Vous pouvez spécifier une durée de rétention pour les fichiers écrits par chaque tâche. Le temps de rétention détermine la durée de conservation des fichiers de tâches avant de les nettoyer automatiquement. Vous pouvez réduire le temps de rétention pour réduire les exigences de stockage.

Si le disque temporaire ou du système d’exploitation manque d’espace, ou s’il est près de manquer d’espace, le nœud passe à l’état unusable computeNoteState et l’erreur de nœud indique que le disque est plein.

Si vous n’êtes pas certain de ce qui occupe de l’espace sur le nœud, essayez d’y accéder à distance et de réaliser un examiner manuel. Vous pouvez également utiliser l’API Fichier – Répertorier à partir du nœud de calcul pour examiner les fichiers, par exemple les sorties de tâches, dans les dossiers managés Batch. Cette API répertorie uniquement les fichiers figurant dans les répertoires gérés par Batch. Si vos tâches ont créé des fichiers ailleurs, cette API ne les affiche pas.

Après avoir pris soin de récupérer toutes les données dont vous avez besoin à partir du nœud ou de les avoir chargées dans un magasin durable, vous pouvez supprimer les données si nécessaire pour libérer de l’espace.

Vous pouvez supprimer d’anciens travaux ou tâches accomplis dont les données se trouvent toujours sur les nœuds. Recherchez la collection recentTasks dans la taskInformation sur le nœud, ou utilisez l’API Fichier – Répertorier à partir du nœud de calcul. La suppression d’un travail supprime toutes les tâches du travail. La suppression des tâches dans le travail déclenche la suppression des données dans les répertoires de tâches sur les nœuds et libère de l’espace. Une fois que vous avez libéré suffisamment d’espace, redémarrez le nœud. Le nœud doit sortir de l’état unusable et être à nouveau à l’état idle.

Pour récupérer un nœud inutilisable dans des pools VirtualMachineConfiguration, vous pouvez supprimer un nœud du pool à l’aide de l’API Pool – Suppression de nœuds. Ensuite, vous pouvez agrandir le pool une nouvelle fois pour remplacer le mauvais nœud par un nouveau.

Important

La réinitialisation n’est actuellement pas prise en charge pour les pools VirtualMachineConfiguration.

Étapes suivantes