已完成作業的自動清理

用於清理已完成執行的舊 Job 的存活時間機制。
特性狀態: Kubernetes v1.23 [stable]

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

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

清理已完成的 Job

TTL-after-finished 控制器僅支援 Job。你可以透過指定 Job 的 .spec.ttlSecondsAfterFinished 欄位來自動清理已完成的 Job(無論是 Complete 還是 Failed),如本示例所示。

TTL-after-finished 控制器假定 Job 在完成 TTL 秒後即可清理。計時器在 Job 的狀態條件變為 CompleteFailed 時開始;一旦 TTL 到期,該 Job 將有資格進行級聯移除。當 TTL-after-finished 控制器清理 Job 時,它將級聯刪除它,也就是說,它將同時刪除其依賴物件。

Kubernetes 遵守 Job 上的物件生命週期保證,例如等待終結器

你可以隨時設定 TTL 秒數。以下是一些設定 Job 的 .spec.ttlSecondsAfterFinished 欄位的示例:

  • 在 Job 清單中指定此欄位,以便 Job 在完成一段時間後可以自動清理。
  • 手動設定現有已完成 Job 的此欄位,以便它們有資格進行清理。
  • 使用可變准入 Webhook 在 Job 建立時動態設定此欄位。叢集管理員可以使用此功能為已完成的 Job 強制執行 TTL 策略。
  • 使用可變准入 Webhook 在 Job 完成後動態設定此欄位,並根據 Job 狀態、標籤選擇不同的 TTL 值。在這種情況下,Webhook 需要檢測 Job 的 .status 更改,並且只在 Job 被標記為完成時設定 TTL。
  • 編寫你自己的控制器來管理與特定選擇器匹配的 Job 的清理 TTL。

注意事項

更新已完成 Job 的 TTL

你可以在 Job 建立或完成之後修改 Job 的 TTL 週期,例如 .spec.ttlSecondsAfterFinished 欄位。如果你在現有 ttlSecondsAfterFinished 週期到期後延長 TTL 週期,Kubernetes 不保證保留該 Job,即使延長 TTL 的更新返回成功的 API 響應。

時間偏差

因為 TTL-after-finished 控制器使用儲存在 Kubernetes Job 中的時間戳來確定 TTL 是否已過期,所以此功能對叢集中的時間偏差很敏感,這可能導致控制平面在錯誤的時間清理 Job 物件。

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

下一步

上次修改時間為 2024 年 10 月 14 日下午 3:21 PST:修復選擇器-選擇器中的拼寫錯誤 (4d9b8d0c8c)