Cloud Composer 3 | Cloud Composer 2 | Cloud Composer�
本頁說明如何排解 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」分頁中,都沒有工作記錄。
- 「排程器」部分的「記錄」分頁中,會顯示工作標示為
UP_FOR_RETRY
或FAILED
的訊息。
解決方法:
- 檢查排程器記錄,瞭解問題的詳細資料。
可能原因:
- 如果排程器記錄檔包含
Adopted tasks were still pending after...
訊息,後面接著列印的工作例項,請確認環境中是否已啟用 CeleryKubernetesExecutor。
工作例項會進入 Queued
狀態,並立即標示為 UP_FOR_RETRY
或 FAILED
問題:
- Airflow UI 和「Workers」(工作站) 區段的「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 集區中仍可能會出現大量工作佇列。