1. CronJob 定时表达式
CronJob 用于创建每隔一段时间定期运行的批处理任务,比如数据备份、生成报告、清理文件、发送邮件等需要定时执行的任务。CronJob 会周期性地创建 Job (进而创建Pod) 来完成具体的工作任务。CronJob 也支持根据历史数量限制自动清理过期的 Job,以减少过多的残留 Job 占用资源。
CronJob 的定时表达式基本沿用了 LinuxCron 的语法,由5个时间域组成,分别表示分钟、小时、日、月、星期。详细介绍如下:
- Minutes:表示每小时的哪一分钟执行任务。范围是 0 到 59。
- Hours:表示每天的哪个小时执行任务。范围是 0 到 23。
- DayofMonth:表示每月的哪一天执行任务。范围是 1 到 31。
- Month:表示每年的哪个月执行任务。范围是 1 到 12。
- DayofWeek:表示每周的哪一天执行任务。范围是 0 到 7,其中 0 和 7 都表示星期日。
- 特殊字符:
*
:表示匹配所有可能的值。例如,*
在分钟字段中表示每分钟执行任务。,
:用于指定多个值。例如,1,15,30
表示在分钟字段中匹配 1、15 和 30 分钟。-
:用于指定范围。例如,1-5
表示匹配 1 到 5。/
:用于指定步长。例如,*/15
表示每隔 15。?
:用于指定不关心的值。通常用于日期字段和星期字段中。
2. CronJob 配置示例
# cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
YAML字段含义:
- metadata.name:CronJob 的名称,将作为 Job 名称的前缀。
- schedule:定时表达式。
- jobTemplate: Job 的配置模板,内容与 Job 需要配置的字段相同,只是不再需要 apiVersion 和 kind 这两个元数据。
- startingDeadlineSeconds:设置由于某种原因错过调度后允许启动 Job 的最长等待时间,这是可选配置。超过最长等待时间后,CronJob 将不再启动这个 Job ,Job也会被系统判定为失败(Failed)状态。若不设置这个参数,则表示没有最长等待时间。
- concurrencyPolicy:设置 CronJob 创建的多个 Job 并发运行时的处理策略,这是可选配置。可选的策略介绍如下:
- Allow:允许并发运行,是 concurrencyPolicy 的默认值。
- Forbid:禁止并发运行,如果已经达到了新的运行时间,但前一个 Job 还未运行完毕,则忽略新的 Job 的运行。
- Replace:如果已经达到了新的运行时间,但前一个 Job 还未运行完毕,则启动新的 Job 来替换当前运行的 Job。
- suspend:如果将其设置为 true,表示挂起 CronJob 的运行,同时不影响已创建的 Job 的运行;如果将其设置为 false,表示恢复 CronJob 的运行。
- successfulJobsHistoryLimit:设置允许保留的成功结束的 Job 数量,默认值为3,如果将其设置为0,则表示不保留 Job 历史。
- failedJobsHistoryLimit:设置允许保留的运行失败的 Job 数量,默认值为1,如果将其设置为0,则表示不保留 Job 历史。
- timeZone:用于为 CronJob 设置时区及计算由 schedule 定义的时间表。