已完成 Job 的自动清理
特性状态:
当你的 Job 已结束时,将 Job 保留在 API 中(而不是立即删除 Job)很有用, 这样你就可以判断 Job 是成功还是失败。
Kubernetes TTL-after-finished 控制器提供了一种 TTL 机制来限制已完成执行的 Job 对象的生命期。
TTL-after-finished 控制器只支持 Job。你可以通过指定 Job 的 .spec.ttlSecondsAfterFinished
字段来自动清理已结束的 Job(Complete
或 ), 如示例所示。
Kubernetes 尊重 Job 对象的生命周期保证,例如等待 。
你可以随时设置 TTL 秒。以下是设置 Job 的 字段的一些示例:
- 在 Job 清单(manifest)中指定此字段,以便 Job 在完成后的某个时间被自动清理。
- 手动设置现有的、已完成的 Job 的此字段,以便这些 Job 可被清理。
使用修改性质的准入 Webhook 在 Job 完成后动态设置该字段,并根据 Job 状态、标签等选择不同的 TTL 值。 对于这种情况,Webhook 需要检测 Job 的
.status
变化,并且仅在 Job 被标记为已完成时设置 TTL。- 编写你自己的控制器来管理与特定匹配的 Job 的清理 TTL。
时间偏差
由于 TTL-after-finished 控制器使用存储在 Kubernetes Job 中的时间戳来确定 TTL 是否已过期, 因此该功能对集群中的时间偏差很敏感,这可能导致控制平面在错误的时间清理 Job 对象。
时钟并不总是如此正确,但差异应该很小。 设置非零 TTL 时请注意避免这种风险。
阅读自动清理 Job