如何控制 kubernetes cronjobs 之间的间隔(即完成后的冷却时间)

How to control interval between kubernetes cronjobs (i.e. cooldown period after completion)

如果我设置一个 kubernetes cronjob,例如

spec:
  schedule: "*/5 * * * *"
  concurrencyPolicy: Forbid

然后它将每 5 分钟创建一个作业。

但是,如果工作需要例如4分钟,然后它会在上一个作业完成1分钟后创建另一个作业。

有没有办法让它在 上一个作业完成后每 5 分钟创建一个作业?

你可能会说;只需制定时间表 */9 * * * * 以考虑工作所需的 4 分钟,但工作可能无法像那样预测。

不幸的是,在 Kubernetes CronJob 中无法指定作业完成后计时器开始计时的情况(例如 5 分钟)。

关于cron的一句话:

The software utility cron is a time-based job scheduler in Unix-like computer operating systems. Users that set up and maintain software environments use cron to schedule jobs (commands or shell scripts) to run periodically at fixed times, dates, or intervals.

-- Wikipedia.org: Cron

您的 CronJob 在 Kubernetes 环境中的行为可以通过以下方式修改:

  • 正如spec定义中的Schedule
      schedule: "*/5 * * * *"
    
  • startingDeadline 字段是可选的,它描述了开始工作的截止日期(以秒为单位)。如果它没有在该时间段内启动,则将被视为失败。在错过 100 个时间表后,它将不再被安排。
  • Concurrency policy 将指定如何处理相同 Job 的并发执行:
    • 允许 - 允许并发
    • 禁止 - 如果之前的 Job 未完成,将跳过新的
    • 替换 - 当前 Job 将替换为新的
  • Suspend参数如果设置为true,后面的所有执行都会被暂停。此设置不适用于已经开始的执行。

可以参考官方文档:CronJobs

因为不知道你想要什么类型的 Job 运行 你可以尝试:

  • 编写一个 shell 类型的脚本:
    while true
    do
      HERE_RUN_YOUR_JOB_AND_WAIT_FOR_COMPLETION.sh
      sleep 300 # ( 5 * 60 seconds ) 
    done
  • 创建一个模仿上述脚本用法的图像,并将其用作 Kubernetes 中的 pod。
  • 如有必要,请尝试从该 pod 获取日志 here

另一种方法是创建一个可以 connect to Kubernetes API.

的 pod

查看有关 Jobs 的其他资源:

如果您对此有任何疑问,请告诉我。