排解 Dataflow 中的自訂容器問題

本文提供操作說明,協助排解使用 Dataflow 自訂容器時可能發生的問題。主要著重於容器或工作者無法啟動的問題。如果工作站可以啟動並運作,且工作正在進行中,請按照排解管道問題的一般指南操作。

聯絡支援團隊前,請先排除與容器映像檔相關的問題:

  • 按照步驟在本機測試容器映像檔
  • 工作記錄工作站記錄中搜尋錯誤,並將找到的錯誤與常見錯誤指南進行比較。
  • 請確認您用來啟動管道的 Apache Beam SDK 版本和語言版本,與自訂容器映像檔中的 SDK 版本相符。
  • 如果使用 Java,請確認您用來啟動管道的 Java 主要版本,與容器映像檔中安裝的版本相符。
  • 如果使用 Python,請確認您用來啟動管道的 Python 主要次要版本,與容器映像檔中安裝的版本相符,且映像檔沒有衝突的依附元件。您可以執行 pip check 來確認。

尋找與自訂容器相關的工作站記錄檔

如要找出與容器相關的錯誤訊息,可以使用「記錄檔探索工具」查看 Dataflow 工作站記錄:

  1. 選取記錄檔名稱。自訂容器啟動錯誤最有可能出現在下列其中一個位置:

    • dataflow.googleapis.com/kubelet
    • dataflow.googleapis.com/docker
    • dataflow.googleapis.com/worker-startup
    • dataflow.googleapis.com/harness-startup
  2. 選取 Dataflow Step 資源並指定 job_id

如果看到 Error Syncing pod... 記錄訊息,請按照常見錯誤指南操作。您可以使用記錄檔探索工具,透過下列查詢在 Dataflow 工作人員記錄中查詢這些記錄訊息:

resource.type="dataflow_step" AND jsonPayload.message:("IMAGE_URI") AND severity="ERROR"

一般問題

使用自訂容器時,可能會遇到下列常見問題。

工作發生錯誤或失敗,因為無法提取容器映像檔

Dataflow 工作站必須能夠存取自訂容器映像檔。 如果工作站因網址無效、憑證設定錯誤或缺少網路存取權而無法提取映像檔,工作站就會啟動失敗。

如果批次工作尚未開始,且有數個工作站無法依序啟動,Dataflow 就會導致工作失敗。否則,Dataflow 會記錄錯誤,但不會採取進一步行動,以免毀損長期執行的工作狀態。

如要瞭解如何修正這個問題,請參閱「排解 Dataflow 錯誤」頁面的「映像檔提取要求失敗並發生錯誤」。

工作人員未開始工作或工作沒有進展

有時,如果 SDK 容器因錯誤而無法啟動,Dataflow 就無法判斷錯誤是永久性還是嚴重錯誤。Dataflow 接著會持續嘗試重新啟動工作人員。

如果沒有明顯錯誤,但您在 dataflow.googleapis.com/kubelet 中看到 [topologymanager] RemoveContainer INFO 層級的記錄,表示自訂容器映像檔提早結束,且未啟動長時間執行的 Worker SDK 程序。

如果工作站已順利啟動,但沒有任何工作進行中,可能是因為發生錯誤,導致 SDK 容器無法啟動。在此情況下,診斷建議會顯示下列錯誤:

Failed to start container

此外,工作人員記錄也不會包含下列幾行:

Executing: python -m apache_beam.runners.worker.sdk_worker_main or Executing: java ... FnHarness

工作站記錄中找出特定錯誤,並查看常見錯誤指南

這些問題的常見原因包括:

  • 套件安裝問題,例如因依附元件問題導致 pip 安裝錯誤。請參閱「Error syncing pod ... failed to "StartContainer"」
  • 如果使用的容器與工作站 VM 的 CPU 架構不相容,可能會看到類似 exec format error 的錯誤。詳情請參閱「Error syncing pod ... failed to "StartContainer"」。
  • 自訂指令引數有誤,或 Dockerfile 中設定的 ENTRYPOINT 有誤。舉例來說,自訂 ENTRYPOINT 未啟動預設開機指令碼 /opt/apache/beam/boot,或未將引數適當傳遞至這個指令碼。詳情請參閱「修改容器進入點」。
  • 啟動環境和執行階段環境的 Apache Beam SDK 版本不符時發生錯誤。在其中一種失敗模式中,系統可能會無法辨識 Apache Beam SDK 管道選項中設定的預設值。舉例來說,您可能會在工作站記錄中看到 sdk_worker_main.py: error: argument --flink_version: invalid choice: '1.16' (choose from '1.12', '1.13', '1.14', '1.15') 等錯誤。如要修正問題,請在容器映像檔中安裝與啟動管道時使用的 Apache Beam SDK 版本。詳情請參閱「讓啟動環境與執行階段環境相容」。

容器無法設定為以自訂使用者身分執行

容器執行作業的使用者是由 Dataflow 服務選取。詳情請參閱「執行階段環境」。