Kubernetes v1.16.3版本开启 Job ttlSecondsAfterFinished 自动清理机制
前言
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: 100
template:
spec:
containers:
- name: pi
image: perl:5.34.0
command: ["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/
配置开启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 即可生效,自动清除 Job。