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/

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 即可生效,自动清除 Job。

posted @ 2024-11-18 09:22  牛奔  阅读(3)  评论(0编辑  收藏  举报