已完成任務的自動清理
Kubernetes v1.23 [穩定]
當您的任務完成時,將該任務保留在 API 中(而不是立即刪除任務)很有用,這樣您就可以判斷任務是成功還是失敗。
Kubernetes 的 TTL-after-finished 控制器提供 TTL(存活時間)機制,以限制已完成執行的任務物件的生命週期。
已完成任務的清理
TTL-after-finished 控制器僅支援任務。您可以使用此機制,透過指定任務的 .spec.ttlSecondsAfterFinished
欄位來自動清理已完成的任務(Complete
或 Failed
),如本範例所示。
TTL-after-finished 控制器假設任務在任務完成後經過 TTL 秒後即可清理。計時器會在任務的狀態條件變更以顯示任務為 Complete
或 Failed
時開始;一旦 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 時,請注意此風險。
下一步
閱讀自動清理任務
請參閱Kubernetes 增強提案 (KEP),以新增此機制。