我已经创建了一个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
3条答案
按热度按时间vlurs2pr1#
将startingDeadlineSeconds设置为180修复了问题并删除了spec.template.metadata.labels。
km0tfn4u2#
我暂停了我的工作负载,然后恢复了一段时间后,看到了同样的错误。这是不是一个错误,因为我故意触发了暂停操作暂停和恢复之间的任何时候都不应该算作错过启动。
rryofs0p3#
此问题的根本原因:
对于每个CronJob,CronJob控制器都会检查从上次计划时间到现在的持续时间内错过了多少计划。如果错过的计划超过100个,则不会启动该作业并记录错误。^1
如果未能在计划的时间创建CronJob,则将其计为未命中。例如,如果concurrencyPolicy设置为“禁止”,并且在上一个计划仍在运行时尝试计划CronJob,则将其计为未命中。^1
我能想到的最简单的解决方案是重新创建
cronjob
以清 debugging 过的计划。