以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
基本介绍
CronJob 控制器是 Kubernetes 中用于周期性运行计划任务的 API 对象,它负责在指定时间执行一次性任务,相当于在 Job 之上增加了基于时间的调度配置。
CronJob 通常用于部署定时备份、定时检查、定时同步、定时报告等周期性任务。
工作原理
- 定义对象:用户创建一个 CronJob 对象,指定 Pod 模板和其他配置选项
- 监控 Job:Kubernetes 的调度器会监控 CronJob 对象的状态
- 生成 Job:根据 CronJob 定义的时间表,调度器在预定的时间创建 Job 对象
- 执行任务:Kubernetes 根据 Job 模板创建 Pod,并开始执行任务
- 监控 Pod:Kubernetes 监控 Pod 的状态,确保任务成功完成
- 记录历史:由 CronJob 创建的 Job 都会被记录,包括成功和失败的 Job
- 清理资源:完成的 Job 及对应的 Pod 会根据 CronJob 的配置进行清理
相关特性
- 定时调度:支持复杂的时间表,可以精确控制任务的执行时间
- 并发策略:可以设置并发策略,如允许多个 Job 并发执行,或在新 Job 开始前终止旧的 Job
- 失败重试:可以配置重试策略,当 Job 失败时,CronJob 可以重新创建 Job 来尝试完成任务
- 历史记录:CronJob 会保留成功和失败 Job 的历史记录,便于追踪和分析
- 暂停和恢复:可以暂停 CronJob,暂停后不会生成新的 Job,也可以恢复 CronJob 继续生成 Job
- 时区设置:可以设置 CronJob 的时区,以适应不同地区的时区需求
- Suspend:可以挂起 Job 的执行,直到再次被激活
- 死信队列:对于失败的 Job,可以配置死信队列来处理这些失败的任务
资源清单(示例)
代码语言:javascript复制# cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: demo-cronjob
spec:
schedule: 10 00 * * *
successfulJobsHistoryLimit: 3
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: demo-container
image: busybox
command:
- sh
- -c
- for i in 1 2 3 4 5 6;do echo $i;done