TTLAfterFinished
TTLAfterFinished
是一种自动清理已完成的 Job
(包括 Complete
或 Failed
状态)的方法。其使用 TTL
机制,通过指定 Job
的 .spec.ttlSecondsAfterFinished
字段。
当 TTLAfterFinished-Controller
清理 Job
时,它将级联删除该 Job
,即连同 Job
依赖的对象(例如 Pods
)一起删除。请注意,当 Jo
b 被删除时,将遵守其生命周期保证,例如 finalizer
。
TTLAfterFinished-Controller
是负责监视 Job API
对象变化的组件。它通过监听 Job
的创建和更新事件,并将具有非空 .spec.ttlSecondsAfterFinished
字段的 Job
加入到队列中。TTLAfterFinished-Controller
从队列中获取 Job
,检查 Job
的 TTL
是否已过期。如果 Job
的 TTL
尚未过期,Worker
将在预计 TTL
过期后将 Job
再次加入队列;如果 TTL
已过期,Worker
将向 APIServer
发送请求以相应地删除这些 Job
。
这部分功能的实现与 Job
控制器分开,是为了分离关注点,并且可以扩展到处理其他可完成的资源类型。这种设计可以让 Job-Controller
只关注监视和管理 Job
的状态,而将具体的 TTL
过期处理逻辑交给独立的组件来实现。这样可以提高代码的可维护性和可扩展性,并使代码结构更清晰。
1 | apiVersion: batch/v1 |
源码分析
1 | // pkg/controller/ttlafterfinished/ttlafterfinished_controller.go |
REF:
1.https://kubernetes.io/docs/concepts/workloads/controllers/job/#clean-up-finished-jobs-automatically
2.pkg/controller/ttlafterfinished/ttlafterfinished_controller.go