技术笔记分享

CronJob控制器介绍

CronJob控制器用于管理Job控制器资源的运行时间,Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但CronJob可以控制Job控制器的运行时间以及运行周期,类似与Linux中的Crontab。

  • 在未来某时间点内运行作业一次
  • 在指定的时间点重复运行作业

Crontab对象支持使用的时间格式类似与Crontab,略有不同的是,CronJob控制器在指定的时间点时, ? 和 * 的意义相同,都表示任何可用的有效值。

应用场景:数据备份、定时任务处理等。

创建CronJob对象

CronJob控制器的spec字段可以嵌套以下字段。

  • jobTemplate <Object>:Job控制器模版,用于为Crontab控制器生成Job对象,必选字段。
  • schedule:Cron格式的作业调度运行时间点,必选字段。
  • concurrencyPolicy<string>:并发执行策略,可用值Allow(允许)、Forbid(禁止)、Replace(替换),用于定义前一次作业运行尚未完成时是否以及如何运行后一次的作业。
  • failedJobHistoryLimit<integer>:为失败的任务执行保留的历史记录数,默认为1。
  • successfulJobsHistoryLimit<integer>:为成功的任务执行保留的历史记录数,默认为3.
  • startingDeadlineSeconds<integer>:因各种原因缺乏执行作业的时间点所导致的启动作业错误的超时时长,会被记入错误历史记录。
  • suspend<boolean>:是否挂起后续的任务执行,默认为false,对运行中的作业不会产生影响。

下面是一个定义资源清单文件中的CronJob资源对象示例:
每隔两分钟运行一次由jobTemplate定义的任务,每次并发处理任务的Pod是两个,如果容器异常退出,则重启容器,Job任务输出当前时间后再输出Hello from the Kubernetes cluster;,然后再沉睡60s后任务执行成功。

创建cronjob控制器

kubectl apply -f busybox-cronjob.yaml

查看Cronjob

两分钟后,cronjob控制器开始创建job控制器

undefined

查看jobs状态

Jobs控制器也开始创建Pod进行任务处理

undefined

查看Pod状态

查看Pod日志

每个两分钟运行一次任务,CronJob则根据JobTemplate创建一个Job控制器,然后Job控制器创建两个Pod去执行任务,几个周期后,就会创建多个Job控制器也N个执行任务的Pod。

如下,已经创建了4个Job控制器

创建了8个Pod,任务执行完成后的Pod则标记为Completed状态

CronJob的控制机制

CronJob控制器是一个更高级别的资源,它以Job控制器资源为管控对象,并借助它管理Pod资源对象。因此,要使用类似如下命令来查看某CronJob控制器创建的Job资源对象,其中的标签app=job是在创建资源配置清单中指定。

如下查看Job控制器的命令,最多只能列出5个成功的Job,这由我们清单中successfulJobsHistoryLimit属性控制,上面清单中我定义的属性值为5,所以下面显示了5个成功的Job和一个正在运行的Job。

假如我们还是每隔两分钟执行一次任务,但是我们每次执行任务的时间却需要三分钟,也就是任务执行时间超出了任务间隔时间,这个时候则需要两个Job对象同时存在的场景,那么就需要我们在清单中定义concurrencyPolicy属性为Allow来支持多个Job并存,来允许无论是先运行的Job或者是后运行的Job都能够在同时运行,值为Forbid则用于禁止前后两个Job同时运行,如果前一个Job尚未运行结束,后一个则跳过;Replace用于让后一个Job取代前一个Job,即终止前一个并启动后一个Job。

发表评论

邮箱地址不会被公开。 必填项已用*标注