Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
このページでは、KubernetesExecutor によって実行されるタスクに関する問題のトラブルシューティング方法と、一般的な問題の解決策について説明します。
KubernetesExecutor のトラブルシューティングの一般的なアプローチ
KubernetesExecutor で実行されたタスクに関する問題のトラブルシューティングを行うには、次の操作を記載されている順序で行います。
DAG UI または Airflow UI でタスクのログを確認します。
Google Cloud コンソールでスケジューラ ログを確認します。
Google Cloud コンソールで、[環境] ページに移動します。
環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。
[ログ] タブに移動し、[Airflow ログ] > [スケジューラ] セクションを確認します。
特定の期間について、タスクを実行していた 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 プールでタスクのキューが大きくなる可能性があります。