Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
本頁說明如何排解 由 KubernetesExecutor 執行的任務相關問題,並提供常見問題的解決方法。
一般 KubernetesExecutor 疑難排解方法
如要排解使用 KubernetesExecutor 執行的工作相關問題,請依照下列順序執行以下動作:
在 DAG UI 或 Airflow UI 中查看工作記錄。
在 Google Cloud 控制台中查看排程器記錄:
前往 Google Cloud 控制台的「Environments」頁面。
在環境清單中,按一下環境名稱。「環境詳細資料」頁面隨即開啟。
前往「記錄」分頁,然後查看「Airflow 記錄」>「排程器」部分。
針對特定時間範圍,檢查執行工作項的 KubernetesExecutor 工作站 Pod。如果 Pod 已不存在,請略過這個步驟。該 Pod 的名稱會包含
airflow-k8s-worker
前置字串,以及 DAG 或工作名稱。找出任何已回報的問題,例如失敗的工作或無法排程的工作。
KubernetesExecutor 的常見疑難排解情境
本節列出您在使用 KubernetesExecutor 時可能會遇到的常見疑難排解情境。
工作會進入 Running
狀態,然後在執行期間失敗。
問題:
- Airflow UI 和「Workers」部分的「Logs」分頁中,都會顯示工作記錄。
解決方案:工作記錄會指出問題。
工作例項會進入 queued
狀態,一段時間後會標示為 UP_FOR_RETRY
或 FAILED
。
問題:
- Airflow UI 和「Workers」區段的「Logs」分頁中,都沒有工作記錄。
- 在「Scheduler」部分的「Logs」分頁中,您會看到記錄,其中包含工作標示為
UP_FOR_RETRY
或FAILED
的訊息。
解決方法:
- 檢查排程器記錄,瞭解問題的詳細情形。
可能的原因:
- 如果排程器記錄檔包含
Adopted tasks were still pending after...
訊息,後面接著顯示工作例項,請確認 CeleryKubernetesExecutor 已在您的環境中啟用。
工作例項會進入 Queued
狀態,並立即標示為 UP_FOR_RETRY
或 FAILED
問題:
- Airflow UI 和「Workers」區段的「Logs」分頁中,都沒有工作記錄。
- 「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 資源池中仍可能會出現大量工作佇列。