TTLAfterFinished
TTLAfterFinished是一种自动清理已完成的 Job(包括 Complete 或 Failed 状态)的方法。其使用 TTL 机制,通过指定 Job的 .spec.ttlSecondsAfterFinished 字段。
当 TTLAfterFinished-Controller清理 Job 时,它将级联删除该 Job,即连同 Job 依赖的对象(例如 Pods)一起删除。请注意,当 Job 被删除时,将遵守其生命周期保证,例如 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