CronJob
在 Kubernetes 中,CronJob 是用于周期性调度任务的资源,类似于 Linux 系统中的 cron。CronJob 通过定义一个特定的时间表自动创建和运行 Job,通常用于执行周期性的批处理任务,例如定期备份数据、发送报告或清理过期数据等。
CronJob 的核心概念
Job
CronJob 的核心是 Job,Job 是 Kubernetes 中的一种资源,用于在集群中运行一个或多个 Pod,并确保 Pod 成功完成。如果 Pod 失败,Job 会重新启动直到成功,或者达到失败重试的限制。
调度时间表
CronJob 使用 Cron 表达式来定义任务何时执行。Cron 表达式的格式为 minute hour day-of-month month day-of-week,
Cron表达式
minute: 表示任务在每小时的第几分钟执行,范围 0-59。
hour: 表示任务在一天中的第几小时执行,范围 0-23。
day-of-month: 表示任务在一个月中的哪一天执行,范围 1-31。
month: 表示任务在一年中的哪一个月执行,范围 1-12。
day-of-week: 表示任务在一周中的哪一天执行,范围 0-6(0 表示星期日)。
并发策略
并发策略:
Allow: 默认值,允许多个 CronJob 实例并行运行。
Forbid: 禁止并发运行,如果前一个任务尚未完成,新的任务不会启动。
Replace: 如果新的任务到达时旧任务还在运行,会终止旧任务并启动新任务。
启动历史保留
启动历史保留:
successfulJobsHistoryLimit: 保留的成功任务的历史记录数,默认为 3。
failedJobsHistoryLimit: 保留的失败任务的历史记录数,默认为 1。
CronJob YAML 配置示例
以下是一个基本的 CronJob 配置示例,该 CronJob 每分钟运行一次,打印当前时间并显示 “Hello from the Kubernetes cluster!” 消息。
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-cronjob
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
successfulJobsHistoryLimit: 3 # 成功任务历史保留 3 条
failedJobsHistoryLimit: 1 # 失败任务历史保留 1 条
解释:
schedule:*/1 * * * *
表示每分钟执行一次该 CronJob。Cron 表达式中每个字段的含义是:每 1 分钟执行一次。
jobTemplate:
定义了创建的 Job 模板。
containers:
定义了容器的配置,这里使用 busybox 镜像来执行任务。
args:
定义容器启动时运行的命令,即打印当前时间并显示一条消息。
restartPolicy:
指定 Pod 的重启策略为 OnFailure,即仅当任务失败时重新启动容器。
successfulJobsHistoryLimit 和 failedJobsHistoryLimit:
限制保留的成功和失败任务历史记录的数量。
Cron 表达式
* * * * *
| | | | |
| | | | +----- 一周中的星期几 (0 - 6) (0 代表星期天)
| | | +------- 一年中的月份 (1 - 12)
| | +--------- 一个月中的天 (1 - 31)
| +----------- 一天中的小时 (0 - 23)
+------------- 每小时的分钟 (0 - 59)