前言
Kubernetes v1.23
之前,Job 在处于 Completed 后,默认是不会被清理的。
完成的 Job 通常不需要留存在系统中。在系统中一直保留它们会给 API 服务器带来额外的压力。
Kubernetes v1.23
之后, TTL 控制器所提供的 TTL 机制。
通过设置 Job 的 .spec.ttlSecondsAfterFinished
字段,可以让该控制器清理掉已结束的资源。
TTL-after-finished 控制器只支持 Job。
apiVersion: batch/v1
kind: Job
metadata:name: pi-with-ttl
spec:ttlSecondsAfterFinished: 100template:spec:containers:- name: piimage: perl:5.34.0command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]restartPolicy: Never
Job pi-with-ttl
在结束 100 秒之后,可以成为被自动删除的对象。
如果该字段设置为 0,Job 在结束之后立即成为可被自动删除的对象。 如果该字段没有设置,Job 不会在结束之后被 TTL 控制器自动清除。
https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/ttlafterfinished/
https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/job/#clean-up-finished-jobs-automatically
配置开启alpha版本,TTLAfterFinished特性
在安装 Kubernetes 的机器上,配置文件一般默认在 /etc/kubernetes
如果存在多个 feature-gates
开启特性,则用逗号分隔。
修改 /etc/kubernetes/manifests/kube-apiserver.yaml
文件,新增
- --feature-gates=TTLAfterFinished=true
修改 /etc/kubernetes/manifests/kube-controller-manager.yaml
文件,新增
- --feature-gates=TTLAfterFinished=true
重启 kubelet
systemctl restart kubelet
修改成功后,重启 kubelet 即可生效了。