007-k8s资源控制器-Job、CronJob
一、概述
1.1、Job
Job负责批处理任务,即仅执行一次的任务,他保证批处理任务的一个或多个Pod成功结束
说明
spec.template格式同Pod
RestartPolicy仅支持Never或OnFailure
单个Pod时,默认Pod成功运行后Job即结束
spec.completion标志Job结束需要成功运行的Pod个数,默认为1
spec.parallelism标志并运行的Pod的个数,默认为1
spec.activeDeadlineSeconds标志失败Pod的重试最大时间,超过这个时间不会继续重试
示例:显示pi的2000千位
apiVersion: batch/v1 kind: Job metadata: name: pi spec: completions: 60 parallelism: 2 template: metadata: name: pi spec: containers: - name: pi image: perl command: ["perl","-Mbignum=bpi","-wle","print bpi(2000)"] restartPolicy: Never
1.2、CronJob
基于时间管理的Job
在给定时间点只运行一次
周期性地在给定时间点运行
使用条件:kubectl集群,版本》1.8,如,发送邮件,备份数据库
说明
spec.template格式同Pod
RestartPolicy仅支持Never或OnFailure
单个Pod时,默认Pod成功运行后Job即结束
spec.completion标志Job结束需要成功运行的Pod个数,默认为1
spec.parallelism标志并运行的Pod的个数,默认为1
spec.activeDeadlineSeconds标志失败Pod的重试最大时间,超过这个时间不会继续重试
spec.schedule:调度,必须字段,指定任务运行周期,格式cron
spec.jodTemplate:job模板,指定要运行的任务,格式同job
spec.startingDeadlineSeconds :启动 Job 的期限(秒级别),该字段是可选的。
如果因为任何原因而错过了被调度的时间,那么错过执行时间的 Job 将被认为是失败的。
如果没有指定,则没有期限。
spec.concurrencyPolicy:并发策略,该字段也是可选的。
它指定了如何处理被 Cron Job 创建的 Job 的并发执行。只允许指定下面策略中的一种。
Allow(默认):允许并发运行 Job。
Forbid:禁止并发运行,如果前一个还没有完成,则直接跳过下一个。
Replace:取消当前正在运行的 Job,用一个新的来替换。
注意,当前策略只能应用于同一个 Cron Job 创建的 Job。如果存在多个 Cron Job,它们创建的 Job 之间总是允许并发运行。
spec.suspend :挂起,该字段也是可选的。
如果设置为 true,后续所有执行都会被挂起。
它对已经开始执行的 Job 不起作用。默认值为 false。
spec.successfulJobsHistoryLimit 和 .spec.failedJobsHistoryLimit :历史限制,是可选的字段。
它们指定了可以保留多少完成和失败的 Job。
默认没有限制,所有成功和失败的 Job 都会被保留。
当运行一个 Cron Job 时,Job 可以很快就堆积很多,推荐设置这两个字段的值。
设置限制的值为 0,相关类型的 Job 完成后将不会被保留。
示例
apiVersion: batch/v1beta1 #batch/v2alpha1 kind: CronJob metadata: name: clean-job spec: schedule: "*/1 * * * *" # 分钟,小时,日,月,星期 startingDeadlineSeconds: 300 # 300秒没有启动成功,就不再启动 concurrencyPolicy: Forbid #Allow 允许job并发执行,Forbid只允许当前这个执行,Replace取消当前这个,而执行新的 suspend: false # 设置为true,后续所有执行被挂起 jobTemplate: spec: # ttlSecondsAfterFinished: 100 # 任务完成后的10s之后自动删除pod,k8s 1.12以后才有 backoffLimit: 4 # 最大允许失败的次数 template: spec: restartPolicy: OnFailure containers: - name: clean-job image: busybox args: ['/bin/sh','-c','date; echo hello']
可以通:kubectl create -f cronjob-demo.yaml创建
查看任务:kubectl get cronjob
kubectl get job
日志: kubectl logs pod名称