如何在一定次数的重试后失败(cron)工作?

dou*_*rve 9 kubernetes

我们建立了一个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-jobafter之类的事情my-cron-job已经失败了5次).任何想法或建议将不胜感激.谢谢!

aer*_*ite 9

您可以告诉您的作业停止使用重试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以暂停.