系统中已经完成的 Job 通常是不在需要里的,长期在系统中保留这些对象,将给 apiserver 带来很大的压力。如果通过更高级别的控制器(例如 CronJobs)来管理 Job,则 CronJob 可以根据其中定义的基于容量的清理策略(capacity-based cleanup policy)自动清理Job。

TTL 机制


FEATURE STATE: Kubernetes v1.12 alpha
除了 CronJob 之外,TTL 机制是另外一种自动清理已结束Job(Completed 或 Finished)的方式:

  • TTL 机制由 TTL 控制器 提供
  • 在 Job 对象中指定 .spec.ttlSecondsAfterFinished 字段可激活该特性

当 TTL 控制器清理 Job 时,TTL 控制器将删除 Job 对象,以及由该 Job 创建的所有 Pod 对象。

删除Job 删除 Job 时,其生命周期函数将被触发,例如 finalizer

参考例子:

  1. apiVersion: batch/v1
  2. kind: Job
  3. metadata:
  4. name: pi-with-ttl
  5. spec:
  6. ttlSecondsAfterFinished: 100
  7. template:
  8. spec:
  9. containers:
  10. - name: pi
  11. image: perl
  12. command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
  13. restartPolicy: Never

字段解释 ttlSecondsAfterFinished:

  • Job pi-with-ttl 的 ttlSecondsAfterFinished 值为 100,则,在其结束 100 秒之后,将可以被自动删除
  • 如果 ttlSecondsAfterFinished 被设置为 0,则 TTL 控制器在 Job 执行结束后,立刻就可以清理该 Job 及其 Pod
  • 如果 ttlSecondsAfterFinished 值未设置,则 TTL 控制器不会清理该 Job

alpha TTL 机制目前还是 alpha 状态,FEATURE GATE 为 TTLAfterFinished。更多信息请参考 TTL 控制器