如何控制 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.
您的 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
的其他资源:
- Kubernetes.io: Fine parallel processing work queue
- Kubernetes.io: Coarse parallel processing work queue
如果您对此有任何疑问,请告诉我。
如果我设置一个 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.
您的 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
的其他资源:
- Kubernetes.io: Fine parallel processing work queue
- Kubernetes.io: Coarse parallel processing work queue
如果您对此有任何疑问,请告诉我。