我们设置了一个Kubernetes网络抓取cron作业集群。所有这些似乎都很顺利,直到cron作业开始失败(例如,当站点结构发生变化而我们的刮板不再起作用时)。它看起来像是偶尔会有一些失败的cron作业将继续重试到它带来我们的集群的程度。运行kubectl get cronjobs
(在群集发生故障之前)将显示运行失败作业的作业太多。
我尝试按照here所述的说明关于pod退避失败政策的已知问题;但是,这似乎不起作用。
以下是我们的参考配置:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: scrape-al
spec:
schedule: '*/15 * * * *'
concurrencyPolicy: Allow
failedJobsHistoryLimit: 0
successfulJobsHistoryLimit: 0
jobTemplate:
metadata:
labels:
app: scrape
scrape: al
spec:
template:
spec:
containers:
- name: scrape-al
image: 'govhawk/openstates:1.3.1-beta'
command:
- /opt/openstates/openstates/pupa-scrape.sh
args:
- al bills --scrape
restartPolicy: Never
backoffLimit: 3
理想情况下,我们希望在N次重试后终止一个cron作业(例如kubectl delete cronjob my-cron-job
失败5次后my-cron-job
之类的事情。任何想法或建议将不胜感激。谢谢!
答案 0 :(得分:8)
您可以告诉您的工作停止使用backoffLimit
重试。
指定标记此作业失败前的重试次数。
在你的情况下
spec:
template:
spec:
containers:
- name: scrape-al
image: 'govhawk/openstates:1.3.1-beta'
command:
- /opt/openstates/openstates/pupa-scrape.sh
args:
- al bills --scrape
restartPolicy: Never
backoffLimit: 3
您将3设为作业的backoffLimit
。这意味着当CronJob创建一个Job时,如果失败,它将重试3次。这可以控制Job,而不是CronJob
当作业失败时,将再次创建另一个作业作为预定时间段。
你想要: 如果我没有错,您希望停止安排新作业,当您的预定作业失败5次时。正确?
<强>答案:强> 在这种情况下,这是不可能的。
可能的解决方案: 你需要suspend CronJob,而不是停止安排新的Job。
Suspend: true
您可以手动执行此操作。如果您不想手动执行此操作,则需要设置一个观察器,它将监视您的CronJob状态,并在必要时更新CronJob以暂停。