基本介绍

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 job demo-cronjob

3、删除 CronJob

# 方式一:命令行
kubectl delete job demo-cronjob

# 方式二:资源清单
kubectl delete -f cronjob.yaml