问题描述
在使用较新版本的 Kubernetes 客户端时,如果设置了 historylimit,Kubernetes 不会删除手动创建的已完成作业。
mycron.yaml:
apiVersion: batch/v1beta1
kind: CronJob
Metadata:
name: hello
namespace: myjob
spec:
schedule: "* * 10 * *"
successfulJobsHistoryLimit: 0
FailedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busyBox
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
创建定时任务:
kubectl create -f mycron.yaml
手动创建作业:
kubectl create job -n myjob --from=cronjob/hello hello-job
结果:
作业已完成但未删除
NAME COMPLETIONS DURATION AGE
hello-job 1/1 2s 6m
使用 1.19.3 和 1.20.0 的 kubernetes 服务器+客户端版本进行测试
但是,当我对服务器的 1.19/1.20 使用较旧的客户端版本 (1.15.5) 时,它运行良好。
比较使用不同客户端版本时的差异:
kubernetes-controller 日志:
使用客户端 v1.15.5 我在日志中有这一行(但在使用客户端 v1.19/1.20 时丢失):
1 event.go:291] "Event occurred" object="myjob/hello" kind="CronJob" apiVersion="batch/v1beta1" type="normal" reason="SuccessfulDelete" message="Deleted job hello-job"
工作 yaml:
完全一样,除了 ownerReference 部分:
对于客户端 v1.19/1.20
ownerReferences:
- apiVersion: batch/v1beta1
kind: CronJob
name: hello
uid: bb567067-3bd4-4e5f-9ca2-071010013727
对于客户端 v1.15
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: CronJob
name: hello
uid: bb567067-3bd4-4e5f-9ca2-071010013727
就是这样。日志中没有其他信息,没有错误,没有警告......没有(检查了 kube-system 中的所有 pods 日志)
总结:
这似乎是 kubectl 客户端本身的错误,但不是 kubernetes 服务器中的错误。但不知道如何进一步。
编辑: 当我让 cronjob 自己做作业时(即命中表达式中的时间),它会成功删除已完成的作业。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)