【K8s】专题十四:Kubernetes 控制器之 CronJob

2024-09-02 12:39:12 浏览数 (2)

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~

基本介绍

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
 



	

0 人点赞