1. 程式人生 > 其它 >k8s v1.16設定Job ttlSecondsAfterFinished不生效

k8s v1.16設定Job ttlSecondsAfterFinished不生效

Completed的job預設不會清理
Job在處於Completed後,預設是不會被清理的。

https://v1-16.docs.kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#job-termination-and-cleanup

When a Job completes, no more Pods are created, but the Pods are not deleted either. Keeping them around allows you to still view the logs of completed pods to check for errors, warnings, or other diagnostic output.

配置自動清理job
https://v1-16.docs.kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#clean-up-finished-jobs-automatically

ttl機制自動清理完成的job
https://v1-16.docs.kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#ttl-mechanism-for-finished-jobs

就是給Job的spec增加一個`ttlSecondsAfterFinished`欄位,這個欄位的意思是當job完成後的保留xx秒就自動清理這個job。

當ttl controller清理job的時候是級聯刪除的,會把這個job下的pod一併刪除。

官網的這個例子是當job完成後的100s就會自動清理了。

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-with-ttl
spec:
  ttlSecondsAfterFinished: 100
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "
print bpi(2000)"] restartPolicy: Never

如果ttlSecondsAfterFinished設定為0,當job完成後則會立即刪除。如果沒有設定這個欄位,那麼當job完成後ttl controller是不會自動清理這個job的。

ttl controller
https://v1-16.docs.kubernetes.io/docs/concepts/workloads/controllers/ttlafterfinished/

由於目前還是alpha版本,需要給kube-controller-manager 和 kube-apiserver 開啟TTLAfterFinished 才能生效。

Alpha Disclaimer: this feature is currently alpha, and can be enabled with both kube-apiserver and kube-controller-manager feature gate TTLAfterFinished.
開啟 TTLAfterFinished
https://v1-16.docs.kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features

預設是關閉的。

找到安裝kubernetes的kube-apiserver.yaml和kube-controller-manager.yaml,增加開啟TTLAfterFinished的設定。

多個feature-gates之間使用逗號分割。

kube-apiserver開啟TTLAfterFinished

kube-controller-manager開啟TTLAfterFinished

重啟kubelet
systemctl restart kubelet
修改成功後重啟kubelet即可生效了。

這個job完成時間是2020 08:47:12,我給job配置的ttlSecondsAfterFinished是120s,120s後這個job就被自動清理了。完成!