已完成作業的自動清理
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 的狀態條件變為 Complete
或 Failed
時開始;一旦 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 時請注意此風險。
下一步
閱讀自動清理 Job
請參閱Kubernetes 增強提案(KEP),以瞭解新增此機制的詳細資訊。