kubernetes 无法确定是否需要启动作业:错过的开始时间太多(>100),请设置或减少.spec.startingDeadlineSeconds或检查时钟偏差

uqjltbpv  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(3)|浏览(146)

我已经创建了一个cron作业并将其推送到部署,但当我看到它在OpenShift中运行时,我得到了以下错误消息:
无法确定是否需要启动作业:错过的开始时间太多(〉100)。请设置或减少.spec.startingDeadlineSeconds或检查时钟偏差。
据我所知,这是一个作业无法运行。但我不明白为什么它会失败。为什么没有记录在某个地方?-或者如果它是,我在哪里可以找到它?
CronJob控制器将根据最近的调度不断尝试启动作业,但不断失败,显然它已经这样做了〉100次。
我已经检查了cron作业的语法,它没有给予任何错误。而且如果有任何语法消息,我甚至不允许推送。
有人知道出什么事了吗?
我的Cron工作:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: my-cjob
  labels:
    job-name: my-cjob
spec:
  schedule: "*/5 * * * *" 
  # activeDeadlineSeconds: 180 # 3 min <<- should this help and why?      
  jobTemplate:
      spec:
        template:         
          metadata:
            name: my-cjob
            labels:
              job-name: my-cjob
          spec:
            containers:
            - name: my-cjob
              image: my-image-name
            restartPolicy: OnFailure

或者我应该使用startingDeadlineSeconds吗?任何人谁击中了这个错误消息,并找到了解决方案?

根据评论更新

当运行kubectl get cronjob时,我得到以下结果:

NAME           SCHEDULE      SUSPEND   ACTIVE    LAST SCHEDULE   AGE
my-cjob        */5 * * * *   False     0         <none>          2d

当运行kubectl logs my-cjob时,我得到以下内容:

Error from server (NotFound): pods "my-cjob" not found

当运行kubectl describe cronjob my-cjob时,我得到以下内容:

Error from server (NotFound): the server could not find the requested resource

当运行kubectl logs <cronjob-pod-name>时,我得到了很多行代码...对我来说非常难以理解和整理。
当运行kubectl describe pod <cronjob-pod-name>时,我也得到了很多,但这更容易排序。
运行kubectl get events我得到了很多,但我认为这是相关的一个:

LAST SEEN   FIRST SEEN   COUNT     NAME                                            KIND                    SUBOBJECT                                 TYPE      REASON              SOURCE                                      MESSAGE
1h          1h           2         xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx             Pod                     spec.containers{apiproxy}                 Warning   Unhealthy           kubelet, xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   Liveness probe failed: Get http://xxxx/xxxx: dial tcp xxxx:8080: connect: connection refused
vlurs2pr

vlurs2pr1#

将startingDeadlineSeconds设置为180修复了问题并删除了spec.template.metadata.labels。

km0tfn4u

km0tfn4u2#

我暂停了我的工作负载,然后恢复了一段时间后,看到了同样的错误。这是不是一个错误,因为我故意触发了暂停操作暂停和恢复之间的任何时候都不应该算作错过启动。

rryofs0p

rryofs0p3#

此问题的根本原因:

对于每个CronJob,CronJob控制器都会检查从上次计划时间到现在的持续时间内错过了多少计划。如果错过的计划超过100个,则不会启动该作业并记录错误。^1
如果未能在计划的时间创建CronJob,则将其计为未命中。例如,如果concurrencyPolicy设置为“禁止”,并且在上一个计划仍在运行时尝试计划CronJob,则将其计为未命中。^1
我能想到的最简单的解决方案是重新创建cronjob以清 debugging 过的计划。

相关问题