Résoudre les problèmes liés aux tâches KubernetesExecutor

Airflow géré (3e génération) | Airflow géré (2e génération) | Airflow géré (1re génération héritée)

Cette page explique comment résoudre les problèmes liés aux tâches exécutées par KubernetesExecutor et fournit des solutions aux problèmes courants.

Approche générale pour résoudre les problèmes liés à KubernetesExecutor

Pour résoudre les problèmes liés à une tâche exécutée avec KubernetesExecutor, procédez comme suit dans l'ordre indiqué :

  1. Consultez les journaux de la tâche dans l'interface utilisateur DAG ou interface utilisateur Airflow.

  2. Consultez les journaux du programmeur dans la console Google Cloud :

    1. Dans la Google Cloud console, accédez à la page Environnements.

      Accéder à la page Environnements

    2. Dans la liste des environnements, cliquez sur le nom de votre environnement. La page Détails de l'environnement s'ouvre.

    3. Accédez à l'onglet Journaux et cochez la section Journaux Airflow > Programmeur.

    4. Pour une plage de temps donnée, inspectez le pod de nœud de calcul KubernetesExecutor qui exécutait la tâche. Si le pod n'existe plus, ignorez cette étape. Le pod comporte le préfixe airflow-k8s-worker et un nom de DAG ou de tâche dans son nom. Recherchez les problèmes signalés, tels qu'une tâche ayant échoué ou une tâche non planifiable.

Scénarios de dépannage courants pour KubernetesExecutor

Cette section répertorie les scénarios de dépannage courants que vous pouvez rencontrer avec KubernetesExecutor.

La tâche passe à l'état Running, puis échoue lors de l'exécution.

Symptômes :

  • Des journaux sont disponibles pour la tâche dans l'interface utilisateur Airflow et dans l'onglet Journaux de la section Nœuds de calcul.

Solution : les journaux de la tâche indiquent le problème.

L'instance de tâche passe à l'état queued, puis est marquée comme UP_FOR_RETRY ou FAILED après un certain temps.

Symptômes :

  • Aucun journal n'est disponible pour la tâche dans l'interface utilisateur Airflow ni dans l'onglet Journaux de la section Nœuds de calcul.
  • Des journaux sont disponibles dans l'onglet Journaux de la section Programmeur avec un message indiquant que la tâche est marquée comme UP_FOR_RETRY ou FAILED.

Solution:

  • Inspectez les journaux du programmeur pour obtenir des détails sur le problème.

Causes possibles :

  • Si les journaux du programmeur contiennent le message Adopted tasks were still pending after... suivi de l'instance de tâche imprimée, vérifiez que CeleryKubernetesExecutor est activé dans votre environnement.

L'instance de tâche passe à l'état Queued et est immédiatement marquée comme UP_FOR_RETRY ou FAILED

Symptômes :

  • Aucun journal n'est disponible pour la tâche dans l'interface utilisateur Airflow ni dans l'onglet Journaux de la section Nœuds de calcul.
  • Les journaux du programmeur dans l'onglet Journaux de la section Programmeur contiennent le message Pod creation failed with reason ... Failing task, ainsi que le message indiquant que la tâche est marquée comme UP_FOR_RETRY ou FAILED.

Solution:

  • Consultez les journaux du programmeur pour obtenir la réponse exacte et la raison de l'échec.

Raison possible :

Si le message d'erreur est quantities must match the regular expression ..., le problème est très probablement dû à un ensemble de valeurs personnalisées défini pour les ressources k8s (requêtes/limites) des pods de nœud de calcul de la tâche.

Les tâches KubernetesExecutor échouent sans journaux lorsqu'un grand nombre de tâches est exécuté

Lorsque votre environnement exécute un grand nombre de tâches avec KubernetesExecutor ou KubernetesPodOperator en même temps, Airflow géré (3e génération) n'accepte pas de nouvelles tâches tant que certaines des tâches existantes ne sont pas terminées. Les tâches supplémentaires sont marquées comme ayant échoué, et Airflow les retente ultérieurement, si vous définissez des tentatives pour les tâches (Airflow le fait par défaut).

Symptôme : les tâches exécutées avec KubernetesExecutor ou KubernetesPodOperator échouent sans journaux de tâches dans l'interface utilisateur Airflow ou l'interface utilisateur DAG. Dans les journaux du programmeur, vous pouvez voir des messages d'erreur semblables à ceux-ci :

pods \"airflow-k8s-worker-*\" is forbidden: exceeded quota: k8s-resources-quota,
requested: pods=1, used: pods=*, limited: pods=*","reason":"Forbidden"

Solutions possibles :

  • Ajustez la planification d'exécution du DAG afin que les tâches soient réparties de manière plus uniforme au fil du temps.
  • Réduisez le nombre de tâches en consolidant les petites tâches.

Solution :

Si vous préférez que les tâches restent à l'état planifié jusqu'à ce que votre environnement puisse les exécuter, vous pouvez définir un pool Airflow avec un nombre limité d'emplacements dans l'interface utilisateur Airflow, puis associer toutes les tâches basées sur des conteneurs à ce pool. Nous vous recommandons de définir le nombre d'emplacements dans le pool sur 50 ou moins. Les tâches supplémentaires resteront à l'état planifié jusqu'à ce que le pool Airflow dispose d'un emplacement libre pour les exécuter. Si vous utilisez cette solution sans appliquer de solutions possibles, vous pouvez toujours rencontrer une longue file d'attente de tâches dans le pool Airflow.

Étape suivante