我们建立了一个Kubernetes网络抓取cron作业集群.所有这些似乎都很顺利,直到cron作业开始失败(例如,当站点结构发生变化并且我们的刮板不再起作用时).它看起来像是偶尔会有一些失败的cron作业将继续重试到它带来我们的集群的程度.运行kubectl get cronjobs
(在群集故障之前)将显示运行失败的作业的太多作业.
我已尝试按照此处描述的说明关于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
Run Code Online (Sandbox Code Playgroud)
理想情况下,我们宁愿在N次重试后终止一个cron作业(例如,像kubectl delete cronjob my-cron-job
after之类的事情my-cron-job
已经失败了5次).任何想法或建议将不胜感激.谢谢!
您可以告诉您的作业停止使用重试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
Run Code Online (Sandbox Code Playgroud)
你backoffLimit
在工作中设置3 .这意味着当CronJob创建一个Job时,如果失败,它将重试3次.这可以控制Job,而不是CronJob
作业失败时,将按计划的时间段再次创建另一个作业.
您想要: 如果我没有错,您希望在计划的作业失败5次后停止安排新作业.对?
答: 在这种情况下,这是不可能的.
可能的解决方案: 您需要暂停 CronJob,而不是停止调度新Job.
Suspend: true
Run Code Online (Sandbox Code Playgroud)
您可以手动执行此操作.如果您不想手动执行此操作,则需要设置一个观察器,它将监视您的CronJob状态,并在必要时更新CronJob以暂停.
归档时间: |
|
查看次数: |
3204 次 |
最近记录: |