本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发、订阅专栏!
专栏订阅入口
Linux 专栏 | Docker 专栏 | Kubernetes 专栏
往期精彩文章
【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法
目录
一、基本介绍
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,可以配置死信队列来处理这些失败的任务
四、资源清单(示例)
# 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
🔔 schedule:指定计划任务执行时间,格式为:分 时 日 月 周几
🔔 successfulJobsHistoryLimit:指定 Completed 状态的 Pod 保留数量
上述 cronjob.yaml 文件定义了一个名为 demo-cronjob 的 CronJob 对象,每天 00:10 新建一个 Pod,Pod 包含一个名为 demo-container 的容器,该容器使用 busybox 镜像,启动后执行一次性任务(打印数字 1 ~ 6)。
说明:可以通过以下命令查看 CronJob 资源清单支持定义的内容
kubectl explain cronjob --recursive
五、常用操作
1、创建 CronJob
kubectl create -f cronjob.yaml
或
kubectl apply -f cronjob.yaml
2、查看 CronJob
# 查看实例列表
kubetcl get cronjob
# 查看详细信息
kubectl describe cronjob demo-cronjob
3、删除 CronJob
# 方式一:命令行
kubectl delete cronjob demo-cronjob
# 方式二:资源清单
kubectl delete -f cronjob.yaml