k8s学习(12):Job、CronJob控制器
Job负责批处理任务,即仅执行一次的任务,他保证批处理任务的一个或多个Pod成功结束
特殊说明
- spec.templage格式同Pod
- RestartPolicy仅支持Never或OnFailure
- 单个Pod时,默认Pod成功运行后Job即结束
.spec.completions
标志Job结束需要成功运行的Pod个数,默认为1.spec.parallelism
标志并行运行的Pod的个数,默认为1.spec.activeDeadlineSeconds
标志失败Pod的重试最大时间,超过这个时间不会继续重试
举个栗子
1 | apiVersion: batch/v1 |
1 | 查看job |
CronJob
cronJob管理基于时间的Job,即:
- 在给定时间点只运行一次
- 周期性地在给定时间点运行
使用条件:k8s集群版本>=1.8
典型用法:
- 在给定的时间点调度Job运行
- 创建周期性运行的Job,例如:数据库备份、发送邮件
CronJob Spec
spec.template格式同Pod
RestartPolicy仅支持Never或OnFailure
单个Pod时,默认Pod成功后Job即结束
.spec.completions
标志Job结束需要成功运行的Pod个数,默认为1
.spec.parallelism
标志并行运行的Pod的个数,默认为1
.spec.activeDeadlineSeconds
标志失败Pod的重试最大时间,超过这个时间不会继续重试
CronJob Spec
**.spec.schedule
:调度,必须字段,指定任务运行周期,格式同Cron**.spec.jobTemplate
:Job模板,必须字段,指定需要运行的任务,格式同Job.spec.startingDeadlineSeconds
:启动Job的期限(秒级别),该字段可选。如果因为任何原因而错过了呗调度的时间,name错过执行时间的Job将被认为是失败的。如果没有指定,则没有期限.spec.concurrencyPolicy
:并发策略,该字段可选。它指定了如何处理CronJob创建的Job的并发执行方式。只允许指定下面策略中的一种
Allow
(默认):允许并发运行Job
Forbid
:禁止并发运行,如果前一个还没有完成,则直接跳过下一个*
Replace
:取消当前正在运行的Job,用一个新的来替换**
.spec.suspend
:挂起,该字段可选。如果设置为true,后续所有执行都会被挂起。它对已经开始执行的Job不起作用。默认值为false
。
.spec.successfulJobsHistoryLimit
和.spec.failedJobsHistoryLimit
:历史限制。可选字段。他们制定了可以保存多少完成和失败的Job。默认情况下,它们分别设置为3
和1
。设置为0
时,相关类型的job完成后将不会被保留。
举个栗子
1 | apiVersion: batch/v1beta1 |
CronJob本身的一些限制
创建Job操作应该是幂等的
CronJob不会判断job是否成功,只会定期的去创建job
其他
提高Job执行效率
1 设置restartPolicy=OnFailure
2 completions和
parallelism,默认值均为
1,每次运行parallelism
个pod,直到总共有completions
个Pod完成