0

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

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

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

但是,如果作业需要例如 4 分钟,那么它将在前一个作业完成后 1 分钟创建另一个作业。

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

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

4

1 回答 1

1

不幸的是,Kubernetes 内不可能CronJob指定在作业完成后计时器何时启动(例如 5 分钟)的情况。

关于cron

软件实用程序cron类 Unix计算机操作系统中基于时间的作业调度程序。设置和维护软件环境的用户使用 cron 来安排作业(命令或shell 脚本)以固定时间、日期或间隔定期运行。

-- Wikipedia.org:Cron

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

  • 正如定义 Schedule中所说spec
      schedule: "*/5 * * * *"
    
  • startDeadline字段是可选的,它以秒为单位描述开始工作的截止日期。如果它没有在那个时间段内启动,它将被视为失败。错过 100 次后,将不再安排。
  • 并发策略将指定如何Job处理相同的并发执行:
    • Allow - 允许并发
    • Forbid - 如果前一个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 获取日志,如此处所述

另一种方法是创建一个可以连接到 Kubernetes API的 pod 。

查看有关以下内容的其他资源Jobs

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

于 2020-02-25T07:59:09.347 回答