Kubernetes 不会删除 Cronjob 的已完成作业

问题描述

在使用较新版本的 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 (将#修改为@)