簡體   English   中英

Kubernetes 作業中的 Pod 時間限制 — 每個 pod 的.spec.activeDeadlineSeconds

[英]Pod time-limit in Kubernetes job — .spec.activeDeadlineSeconds per pod

正如關於工作主題的Kuberenetes 文檔中所解釋的:

無論創建了多少 Pod, activeDeadlineSeconds適用於作業的持續時間。 一旦 Job 達到activeDeadlineSeconds ,其所有正在運行的 Pod 都將終止,並且 Job 狀態將變為type: Failed with reason: DeadlineExceeded

但是,我想做的是限制每個pod的時間。 如果一個 pod 花費的時間太長,我希望它失敗,但我希望其他 pod 繼續運行,並在必要時創建更多 pod。

我將解釋一下我的任務,只是為了讓問題變得清晰。 該作業包括從 Redis 數據庫中獲取項目,其中數據庫用作一種隊列。 每個 pod 處理一個項目(嗯,數量可能會有所不同)。 如果一個 pod 處理一個項目的時間太長,我希望它失敗。 但是,其他 pod 應該繼續,並且作業應該繼續創建 pod 並從數據庫中檢索更多項目。

您的用例似乎與 kubernetes 文檔中的此示例相同。
正如你所說, activeDeadlineSeconds不是你應該在這里使用的參數。

我不確定如果 pod 無法在給定的時間范圍內處理項目,你為什么希望它失敗。 我看到您可以在此處采用幾種不同的方法,但需要更多有關您問題性質的信息才能知道采用哪種方法。 解決問題的一種方法是將作業並行度設置為您希望同時運行的 pod 數量,並在代碼本身中設置此行為 -

  • 如果延遲處理的問題是暫時的,您可能希望終止當前事務,將項目保留在隊列中並重新開始處理相同的項目
  • 如果同一項目失敗 x 次,則應將其從隊列中移除並推送到某種死信隊列以等待稍后的故障排除

另一種方法是以扇出隊列中的消息的方式,為每條消息生成一個工作 pod,與此示例描述的相同。
選擇此解決方案確實會導致每個 pod 處理該項目的時間過長而失敗,如果您將創建的 pod 的restartPolicy設置為never ,您應該擁有與失敗處理的數量相對應的失敗 pod 列表項目。

說了這么多,我不讓 pod 失敗是正確的方法,應該使用檢測來跟蹤失敗的處理事件,無論是通過容器日志還是指標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM