【问题标题】:How to fail a (cron) job after a certain number of retries?重试一定次数后如何使(cron)作业失败?
【发布时间】:2018-07-08 10:14:25
【问题描述】:

我们设置了一个 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

理想情况下,我们希望 cron 作业在 N 次重试后终止(例如,在 my-cron-job 失败 5 次后,类似 kubectl delete cronjob my-cron-job 的东西)。任何想法或建议将不胜感激。谢谢!

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您可以使用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 次。这控制 Job,而不是 CronJob

    当 Job 失败时,将再次创建另一个 Job 作为您的预定时间段。

    你想要: 如果我没记错的话,当您计划的作业失败 5 次时,您想停止安排新的作业。对吧?

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

    可能的解决方案: 您需要suspend CronJob 才能停止安排新作业。

    Suspend: true
    

    您可以手动执行此操作。如果您不想手动执行此操作,则需要设置一个观察者,它将观察您的 CronJob 状态,并在必要时更新 CronJob 以暂停。

    【讨论】:

    • 我想我现在明白了一点。所以你是说在每次执行 cron 作业时,我都会达到退避限制,对吗?例如,如果作业失败,“运行 1”将有 3 次失败尝试,“运行 2”将有另外 3 次失败尝试,依此类推。是否有任何理由终止的 pod(来自这些作业)在仪表板/kubectl get pods 中仍然可见?非常感谢!
    • 是的,在作业被删除之前,Pod 都是可见的。当 Job 被删除时,Pod 也将消失。
    猜你喜欢
    • 2020-04-19
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2019-07-18
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多