排解 KubernetesExecutor 工作疑問

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer„�

本頁說明如何排解 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」分頁中,都沒有工作記錄。
  • 「排程器」部分的「記錄」分頁中,會顯示工作標示為 UP_FOR_RETRYFAILED 的訊息。

解決方法:

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

可能原因:

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

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

問題:

  • Airflow UI 和「Workers」(工作站) 區段的「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 集區中仍可能會出現大量工作佇列。

後續步驟