五、CronJob控制器
5.1CronJob可以拿来执行基于时间计划的定时任务,类似于Linux/Unix系统中的crontable(opensnewwindow)。
CronJob执行周期性的重复任务时特别有用,比如备份数据、发送短信等。CronJob也可以拿来指定将来某个时间点执行单个任务,比如将某项任务定时到系统负载比较低的时侯执行。
一个CronJob对象如同crontab(crontable)文件中的一行。它用Cron格式进行编撰,并周期性地在给定的调度时间执行Job。
注意:
所有CronJob的schedule:时间都是基于kube-controller-manager.的时区。
假如你的控制平面在Pod或是裸容器中运行了kube-controller-manager,这么为该容器所设置的时区将会决定CronJob的控制器所使用的时区。
为CronJob资源创建清单时,请确保所提供的名称是一个合法的DNS子域名.名称不能超过52个字符。这是由于CronJob控制器将手动在提供的Job名称后附加11个字符linux计划任务整点执行,而且存在一个限制,即Job名称的最大宽度不能超过63个字符。
CronJob用于执行周期性的动作,比如备份、报告生成等。这种任务中的每一个都应当配置为周期性重复的(比如:每晚/每周/每月一次);你可以定义任务开始执行的时间间隔。
5.2创建CronJob对象
CronJob控制器的spec数组可嵌套使用以下数组。
|jobTemplate|Object|Job控制器模板,用于为CronJob控制器生成Job对象;必选数组|
|—|—|—|
|schedule|string|Cron格式的作业调度运行时间点;必选数组。|
|concurrencyPolicy|string|并发执行策略,可用值有“Allow”(容许)、“Forbid”(严禁)和“Replace”(替换),用于定义前一次作业运行仍未完成时是否以及怎样运行后一次的作业|
|failedJobHistoryLimit|integer|为失败的任务执行保留的历史记录数linux怎么读,默认为1。|
|successfulJobsHistoryLimit|integer|为成功的任务执行保留的历史记录数,默认为3|
|startingDeadlineSeconds|integer|因各类缘由缺少执行作业的时间点所引起的启动作业错误的超时时长linux计划任务整点执行,会被计入错误历史记录|
|suspend|boolean|是否挂起后续的任务执行linux运维面试题,默认为false,对运行中的作业不会形成影响。|
下边是一个定义在资源清单文件中的CronJob资源对象示例,它每隔2分钟运行一次由jobTemplate定义的简单任务:
查看资源信息,命令结果中的SCHEDULE是指其调度时间点,SUSPEND表示后续任务是否处于挂起状态,即暂停任务的调度和运行,ACTIVE表示活动状态的Job对象的数目,而LASTSCHEDULE则表示先前调度运行至此刻的时长:
5.3CronJob的控制机制
CronJob控制器是一个更高级别的资源,它以Job控制器资源为其管控对象,并利用它管理Pod资源对象。
使用类似如下命令来查看某CronJob控制器创建的Job资源对象,其中的标签“mycronjob-jobs”是在创建cronjob-example时为其指定。不过,只有相关的Job对象被调度执行时,此命令能够将其正常列举。可列举的Job对象的数目取决于CronJob资源的.spec.successfulJobsHistoryLimit的属性值,默认为3。
假如作业重复执行时指定的时间点较近,而作业执行时长(普遍或时常)越过了其两次执行的时间宽度,则会出现两个Job对象同时存在的情形。有些Job对象可能会存在难以或不能同时运行的情况,这个时侯就要通过.spec.concurrencyPolicy属性控制作业并存的机制,其默认值为“Allow”,即容许前后Job,甚至属于同一个CronJob的更多Job同时运行。
其他两个可用值中,“Forbid”用于严禁前后两个Job同时运行,倘若前一个仍未结束,后一个则不予启动(跳过),“Replace”用于让后一个Job替代前一个,即中止前一个并启动后一个。