排解 KubernetesExecutor 工作疑問

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

本頁說明如何排解 由 KubernetesExecutor 執行的任務相關問題,並提供常見問題的解決方法。

一般 KubernetesExecutor 疑難排解方法

如要排解使用 KubernetesExecutor 執行的工作相關問題,請依照下列順序執行以下動作:

  1. DAG UIAirflow UI 中查看工作記錄。

  2. 在 Google Cloud 控制台中查看排程器記錄:

    1. 前往 Google Cloud 控制台的「Environments」頁面。

      前往「環境」

    2. 在環境清單中,按一下環境名稱。「環境詳細資料」頁面隨即開啟。

    3. 前往「記錄」分頁,然後查看「Airflow 記錄」>「排程器」部分。

    4. 針對特定時間範圍,檢查執行工作項的 KubernetesExecutor 工作站 Pod。如果 Pod 已不存在,請略過這個步驟。該 Pod 的名稱會包含 airflow-k8s-worker 前置字串,以及 DAG 或工作名稱。找出任何已回報的問題,例如失敗的工作或無法排程的工作。

KubernetesExecutor 的常見疑難排解情境

本節列出您在使用 KubernetesExecutor 時可能會遇到的常見疑難排解情境。

工作會進入 Running 狀態,然後在執行期間失敗。

問題:

  • Airflow UI 和「Workers」部分的「Logs」分頁中,都會顯示工作記錄。

解決方案:工作記錄會指出問題。

工作例項會進入 queued 狀態,一段時間後會標示為 UP_FOR_RETRYFAILED

問題:

  • Airflow UI 和「Workers」區段的「Logs」分頁中,都沒有工作記錄。
  • 在「Scheduler」部分的「Logs」分頁中,您會看到記錄,其中包含工作標示為 UP_FOR_RETRYFAILED 的訊息。

解決方法:

  • 檢查排程器記錄,瞭解問題的詳細情形。

可能的原因:

  • 如果排程器記錄檔包含 Adopted tasks were still pending after... 訊息,後面接著顯示工作例項,請確認 CeleryKubernetesExecutor 已在您的環境中啟用。

工作例項會進入 Queued 狀態,並立即標示為 UP_FOR_RETRYFAILED

問題:

  • Airflow UI 和「Workers」區段的「Logs」分頁中,都沒有工作記錄。
  • 「Scheduler」部分的「Logs」分頁標籤中,排程器記錄會顯示 Pod creation failed with reason ... Failing task 訊息,以及工作標示為 UP_FOR_RETRYFAILED 的訊息。

解決方法:

  • 查看排程器記錄,瞭解確切的回應和失敗原因。

可能的原因:

如果錯誤訊息是 quantities must match the regular expression ...,則問題很可能是由工作負載工作 Pod 的 k8s 資源 (要求/限制) 所設定的自訂值所造成。

執行大量工作時,KubernetesExecutor 工作會失敗,但不會產生記錄

當環境同時執行大量使用 KubernetesExecutorKubernetesPodOperator 的任務時,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 資源池中仍可能會出現大量工作佇列。

後續步驟