KubernetesExecutor タスクのトラブルシューティング

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

このページでは、KubernetesExecutor によって実行されるタスクに関する問題のトラブルシューティング方法と、一般的な問題の解決策について説明します。

KubernetesExecutor のトラブルシューティングの一般的なアプローチ

KubernetesExecutor で実行されたタスクに関する問題のトラブルシューティングを行うには、次の操作を順番に行います。

  1. DAG UI または Airflow UI でタスクのログを確認します。

  2. Google Cloud コンソールでスケジューラ ログを確認します。

    1. Google Cloud Console で [環境] ページに移動します。

      [環境] に移動

    2. 環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。

    3. [ログ] タブに移動し、[Airflow ログ] > [スケジューラ] セクションを確認します。

    4. 特定の期間について、タスクを実行していた KubernetesExecutor ワーカー Pod を調べます。Pod が存在しなくなった場合は、この手順をスキップします。Pod の名前には airflow-k8s-worker 接頭辞と DAG またはタスク名が含まれています。タスクの失敗やタスクのスケジュール設定不可など、報告されている問題がないか確認します。

KubernetesExecutor の一般的なトラブルシューティング シナリオ

このセクションでは、KubernetesExecutor で発生する可能性のある一般的なトラブルシューティングのシナリオを示します。

タスクが Running 状態になり、実行中に失敗します。

症状:

  • タスクのログが、Airflow UI と [ワーカー] セクションの [ログ] タブにある。

解決策: タスクログに問題が示されます。

タスク インスタンスが queued 状態になり、しばらくすると UP_FOR_RETRY または FAILED としてマークされます。

症状:

  • Airflow UI と [ワーカー] セクションの [ログ] タブにタスクのログがない。
  • [スケジューラ] セクションの [ログ] タブに、タスクが UP_FOR_RETRY または FAILED とマークされているというログがある。

解決方法:

  • スケジューラ ログで問題の詳細を確認します。

考えられる原因:

  • スケジューラ ログに Adopted tasks were still pending after... メッセージの後にタスク インスタンスが出力されている場合は、環境で CeleryKubernetesExecutor が有効になっていることを確認します。

タスク インスタンスが Queued 状態になり、すぐに UP_FOR_RETRY または FAILED としてマークされます。

症状:

  • Airflow UI と [ワーカー] セクションの [ログ] タブにタスクのログがない。
  • [Scheduler] セクションの [Logs] タブにあるスケジューラ ログに、Pod creation failed with reason ... Failing task メッセージと、タスクが UP_FOR_RETRY または FAILED としてマークされているというメッセージが表示される。

解決方法:

  • スケジューラのログで、正確なレスポンスと失敗の理由を確認します。

考えられる原因:

エラー メッセージが quantities must match the regular expression ... の場合、タスクワーカー Pod の k8s リソース(リクエスト/上限)に設定されたカスタム値が原因である可能性が高いです。

大量のタスクが実行されると、KubernetesExecutor タスクがログなしで失敗する

環境で KubernetesExecutor または KubernetesPodOperator を使用して多数のタスクが同時に実行されている場合、Cloud Composer 3 は、一部の既存のタスクが完了するまで新しいタスクを受け入れません。余分なタスクは失敗としてマークされ、タスクの再試行を定義した場合は、後で Airflow によって再試行されます(デフォルトで Airflow が行います)。

症状: KubernetesExecutor または KubernetesPodOperator で実行されたタスクが、Airflow UI または DAG UI のタスクログなしで失敗します。スケジューラのロギングに、次のようなエラー メッセージが表示されます。

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

考えられる解決策:

  • タスクが時間の経過とともに均等に分散されるように、DAG 実行スケジュールを調整します。
  • 小さなタスクを統合してタスク数を減らす。

回避策:

環境がタスクを実行できるようになるまでタスクをスケジュール状態にしておきたい場合は、Airflow UI でスロット数の制限付きの Airflow プールを定義し、すべてのコンテナベースのタスクをこのプールに関連付けることができます。プールのスロット数は 50 以下に設定することをおすすめします。追加のタスクは、Airflow プールに実行用の空きスロットがあるまで、スケジュールされた状態のままになります。考えられる解決策を適用せずにこの回避策を使用すると、Airflow プール内のタスクのキューが大きくなる可能性があります。

次のステップ