除了使用cronjob清理已完成的作业外,还有办法自动删除已完成的作业吗?
K8s Job Documentation表示已完成作业的预期行为是他们在手动删除之前保持已完成状态。因为我每天通过k8s cronjobs运行成千上万的工作,而且我不想保留完成的工作。
答案 0 :(得分:23)
答案 1 :(得分:7)
从带有ttlSecondsAfterFinished
的1.12 Alpha版本开始,这是可能的。来自Clean Up Finished Jobs Automatically的示例:
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
答案 2 :(得分:5)
如文档中所述"用户需要删除旧作业",请参阅http://kubernetes.io/docs/user-guide/jobs/#job-termination-and-cleanup
我会运行一个pod来根据作业名称和某些条件进行清理,因此让kubernetes至少在这里处理你的进程的可用性。你可以为此运行一个定期工作(假设你运行kubernetes 1.5)。
答案 3 :(得分:5)
我最近建立了一个kubernetes-operator来完成这项任务。
部署后,它将监视选定的命名空间并删除已完成的作业/ pod,如果它们完成且没有错误/重新启动。
答案 4 :(得分:5)
我发现以下方法可以工作
要删除失败的作业,请执行以下操作:
kubectl delete job $(kubectl get jobs | awk '$3 ~ 0' | awk '{print $1}')
要删除已完成的作业,请执行以下操作:
kubectl delete job $(kubectl get jobs | awk '$3 ~ 1' | awk '{print $1}')
答案 5 :(得分:5)
kubectl delete jobs --field-selector status.successful=1
在cronjob中运行该脚本的另一种方式是:
使用批处理/职位列表创建服务帐户并删除权限;
它使用bitnami kubectl,因为建议的kubectl图像没有field-selector
选项
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: jobs-cleanup
spec:
schedule: "*/30 * * * *"
jobTemplate:
spec:
template:
spec:
serviceAccountName: my-sa-name
containers:
- name: kubectl-container
image: bitnami/kubectl:latest
command: ["sh", "-c", "kubectl delete jobs --field-selector status.successful=1"]
restartPolicy: Never
答案 6 :(得分:2)
使用jsonpath:
kubectl delete job $(kubectl get job -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
答案 7 :(得分:2)
我正在使用wernight/kubectl的kubectl图片
计划安排cron删除
completed
2 - 9 days old
(所以我有2天的时间来审查所有失败的工作)它每30分钟运行一次,所以我不负责10天以上的工作
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cleanup
spec:
schedule: "*/30 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: kubectl-runner
image: wernight/kubectl
command: ["sh", "-c", "kubectl get jobs | awk '$4 ~ /[2-9]d$/ || $3 ~ 1' | awk '{print $1}' | xargs kubectl delete job"]
restartPolicy: Never