已完成任務的自動清理

一種清理已完成執行的舊任務的存活時間機制。
功能狀態: Kubernetes v1.23 [穩定]

當您的任務完成時,將該任務保留在 API 中(而不是立即刪除任務)很有用,這樣您就可以判斷任務是成功還是失敗。

Kubernetes 的 TTL-after-finished 控制器提供 TTL(存活時間)機制,以限制已完成執行的任務物件的生命週期。

已完成任務的清理

TTL-after-finished 控制器僅支援任務。您可以使用此機制,透過指定任務的 .spec.ttlSecondsAfterFinished 欄位來自動清理已完成的任務(CompleteFailed),如本範例所示。

TTL-after-finished 控制器假設任務在任務完成後經過 TTL 秒後即可清理。計時器會在任務的狀態條件變更以顯示任務為 CompleteFailed 時開始;一旦 TTL 過期,該任務即符合串聯移除的資格。當 TTL-after-finished 控制器清理任務時,它將以串聯方式刪除它,也就是說,它將與其一起刪除其依賴物件。

Kubernetes 遵守任務上的物件生命週期保證,例如等待 finalizers

您可以隨時設定 TTL 秒數。以下是一些設定任務的 .spec.ttlSecondsAfterFinished 欄位的範例

  • 在任務資訊清單中指定此欄位,以便任務在完成後一段時間自動清理。
  • 手動設定現有、已完成任務的此欄位,使其符合清理資格。
  • 使用 mutating admission webhook 在任務建立時動態設定此欄位。叢集管理員可以使用此功能來強制執行已完成任務的 TTL 策略。
  • 使用 mutating admission webhook 在任務完成後動態設定此欄位,並根據任務狀態、標籤選擇不同的 TTL 值。對於這種情況,webhook 需要偵測任務 .status 的變更,並且僅在任務標記為完成時設定 TTL。
  • 編寫您自己的控制器來管理符合特定選擇器的任務的清理 TTL。

注意事項

更新已完成任務的 TTL

您可以在任務建立或完成後修改 TTL 期間,例如任務的 .spec.ttlSecondsAfterFinished 欄位。如果您在現有的 ttlSecondsAfterFinished 期間過期後延長 TTL 期間,即使延長 TTL 的更新傳回成功的 API 回應,Kubernetes 也不保證保留該任務。

時間偏差

由於 TTL-after-finished 控制器使用儲存在 Kubernetes 任務中的時間戳記來判斷 TTL 是否已過期,因此此功能對叢集中的時間偏差很敏感,這可能會導致控制平面在錯誤的時間清理任務物件。

時鐘並不總是正確的,但差異應該非常小。在設定非零 TTL 時,請注意此風險。

下一步

上次修改時間:2024 年 10 月 14 日下午 3:21 PST:修正 selector-selector 的錯字 (4d9b8d0c8c)