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

Kubernetes 如何在一定次数的重试后使(cron)作业失败?,kubernetes,Kubernetes,我们建立了一个Kubernetes的网络抓取cron作业集群。在cron作业开始失败之前(例如,当站点结构发生变化,我们的scraper不再工作时),一切似乎都进展顺利。看起来偶尔会有一些失败的cron作业会继续重试,直到导致集群崩溃。运行kubectl get cronjobs(在群集故障之前)将显示针对故障作业运行的作业过多 我已经尝试遵循描述的关于pod退避失败策略的已知问题的注释;然而,这似乎不起作用 以下是我们的配置文件供参考: apiVersion: batch/v1beta1 ki

我们建立了一个Kubernetes的网络抓取cron作业集群。在cron作业开始失败之前(例如,当站点结构发生变化,我们的scraper不再工作时),一切似乎都进展顺利。看起来偶尔会有一些失败的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

理想情况下,我们希望在N次重试后终止cron作业(例如,类似于
kubectl delete cron job my cron job
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
您将3设置为作业的
backoffLimit
。这意味着当CronJob创建作业时,如果失败,它将重试3次。这控制作业,而不是CronJob

当作业失败时,将再次创建另一个作业作为您的计划周期

您需要: 如果我没有错,当计划的作业失败5次时,您希望停止计划新作业。对吧?

回答: 在这种情况下,这是不可能自动实现的

可能的解决方案: 您需要删除作业,以便它停止安排新作业

Suspend: true

您可以手动执行此操作。如果您不想手动执行此操作,则需要设置一个监视程序,该程序将监视您的CronJob状态,并在必要时更新CronJob以挂起。

我想我现在了解得更多了。你是说每次执行cron作业时,我都会达到回退限制,对吗?例如,如果作业失败,“运行1”将有3次失败的尝试,“运行2”将有另外3次失败的尝试,依此类推。是否有任何原因使终止的POD(来自这些作业)在仪表板中保持可见/
kubectl get pods
?非常感谢!是的,POD将在作业删除之前可见。当作业被删除时,POD也将消失。