如果已经有作业正在运行,如何防止 Kubernetes 中的 Cronjob 执行?concurrencyPolicy:Forbid 完全停止 cron 作业执行

Sat*_*an 5 concurrency cron gcloud kubernetes

我需要一个 cron 作业每 5 分钟运行一次。如果较早的 cron 作业仍在运行,则不应启动另一个 cron 作业。我尝试将并发策略设置为“禁止”,但 cron 作业根本不运行。

  1. 作业按预期每 5 分钟启动一次,但即使较早的 cron 作业尚未完成,它也会启动
spec:
  concurrencyPolicy: Allow
  schedule: '*/5 * * * *'
Run Code Online (Sandbox Code Playgroud)
  1. 这应该可以解决问题,但是使用这种方法永远不会启动 cron 作业
spec:
  concurrencyPolicy: Forbid
  schedule: '*/5 * * * *'
Run Code Online (Sandbox Code Playgroud)
  1. 将startingDeadlineSeconds 设置为3600,甚至设置为10,并没有什么区别。
spec:
  concurrencyPolicy: Forbid
  schedule: '*/5 * * * *'
  startingDeadlineSeconds: 10
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

P E*_*ram 9

来自 kubernetes 文档

\n

并发策略指定如何处理由该 cron 作业创建的作业的并发执行。该规范可能仅指定以下并发策略之一:

\n

允许(默认):cron 作业允许同时运行作业

\n

Forbid: cron 作业不允许并发运行;如果到了运行新作业的时间,并且上一个作业运行尚未完成,则 cron 作业将跳过新作业运行

\n

Replace:如果到了运行新作业的时间,并且之前的作业运行尚未完成,则 cron 作业将用新的作业运行替换当前正在运行的作业运行

\n

在您的情况下,“concurrencyPolicy:禁止”应该有效。如果先前的作业仍在运行,则不允许运行新的作业。在您的情况下,问题不在于 concurrencyPolicy 。

\n

它可能与startingDeadlineSeconds有关。你可以删除它并尝试吗

\n