job在处理完一个任务以后,状态会变成Completed,job在状态为Completed的时候默认不会自动清理的,还会继续占用系统资源。
TTL-after-finished控制器
kubernetes中有专门的控制器可以自动清理已完成的job,就是TTL-after-finished控制器。
TTL-after-finished控制器供了一种 TTL 机制来限制已完成执行的 Job 对象的生命期。
TTL-after-finished 控制器只支持 Job,可以通过指定job的.spec.ttlSecondsAfterFinished 字段来自动清理已结束的 Job(Complete 或 Failed)。可以设置指定的时间,在指定的时间完成后的TTL 秒内被清理。一旦 Job 的状态条件发生变化表明该 Job 是 Complete 或 Failed,计时器就会启动;一旦 TTL 已过期,该 Job 就能被级联删除。当 TTL 控制器清理作业时,它将做级联删除操作,即删除 Job 的同时也删除其依赖对象。
开启TTLAfterFinished
TTLAfterFinished默认是关闭的,需要手动开启,找到安装的kubernetes的kube-apiserver.yaml和kube-controller-manager.yaml,增加开启TTLAfterFinished的设置。多个feature-gates之间使用逗号分割。
kubernetes-apiserver开启TTLAfterFinished
kube-apiserver.yaml
kube-controller-manager开启TTLAfterFinished
kube-controller-manager.yaml
修改完kuber-apiserver和kube-controller-manager的yaml文件以后,需要重启kubelet服务,就可以生效了。
systemctl restart kubelet
我这边ttlSecondsAfterFinished配置的时间是60秒,60秒后这个job就被自动清理了。