Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束
特殊说明
- spec.template 格式同Pod
- RestartPolicy仅支持Never或OnFailure
- 单个Pod时,默认Pod成功运行后Job即结束
.spec.completions
标志Job结束需要成功运行的Pod个数,默认为1.spec.parallelism
标志并行运行的Pod的个数,默认为1spec.activeDeadlineSeconds
标志这失败Pod的重试最大时间,超过这个时间不会继续重试
Example
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
name:pi
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
CronJob Spec
- spec.template格式同Pod
- RestartPolicy仅支持Nerver或OnFailure
- 单个Pod时,默认Pod成功运行后Job即结束
.spec.completions
标志Job结束需要成功运行的Pod的个数,默认为1.spec.parallelism
标志并运行的Pod的个数,默认为1spec.activeDeadlineSeconds
标志失败Pod的重试最大时间,超过这个时间不会继续重试
CronJob
Cron Job管理基于时间的Job,即:
- 在给定时间点只运行一次
- 周期性地在给定时间点运行
使用条件: 当前使用的 Kubernetes 集群(>=1.8版本)(对CronJob)
典型的用法如下所示:
- 在给定的时间点调度Job运行
- 周期性运行的Job,例如:数据库备份、发送邮件
CronJob Spec
.spec.schedule
:调度,必须字段,指定任务运行周期,格式同Cron.spec.jobTemplate
:Job模板,必须自动,指定需要运行的任务,格式同Job.spec.startingDeadlineSeconds
: 启动Job的期限(秒级别),该字段是可选的。如果因为任何原因而错过了被调度的时间,那么错过执行时间的Job将被认为是失败的。如果没有指定,则没有期限.spec.concurrencyPolicy
:并发策略,该字段也是可选的。它制定了如果处理被 Cron Job创建的JOb的并发执行,只允许下面策略中的一种:Allow
(默认):允许并发运行JobForbid
: 禁止并发运行,如果前一个还没有完成,则直接跳过个Replace
:取消当前正在运行的 Job,用一个新的来替换
注意,当前策略只能应用于同一个Cron Job创建的Job。如果存在多个Cron Job,它们创建的Job之间总是允许并发运行。
.spec.suspend
:挂起,该字段也是可选的。如果设置为true
,后续所有执行都会被挂起。它对已经开始执行的Job不起作用。默认值为false
。.spec.successfulJobsHistoryLimit
和.spec.failedJobsHistoryLimit
:历史限制,是可以选的字段。它们制定了可以保留多少完成和失败的Job。默认情况下,他们分别设置为3
和1
.设置限制的值为0
,相关类型的Job完成后将不会被保留。Example
apiVersion: batch/v1beta1 kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox args: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster restartPolicy: OnFailure
[root@k8s-master ceshi]# kubectl get cronjob NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE hello */1 * * * * False 0 34s 74s [root@k8s-master ceshi]# kubectl get job NAME COMPLETIONS DURATION AGE hello-1574992740 1/1 7s 74s hello-1574992800 1/1 6s 14s [root@k8s-master ceshi]# kubectl get pod NAME READY STATUS RESTARTS AGE daemonset-example-dkw6c 1/1 Running 0 12h daemonset-example-zhqwq 1/1 Running 0 12h hello-1574992740-b6hhs 0/1 Completed 0 117s hello-1574992800-7tcnv 0/1 Completed 0 57s [root@k8s-master ceshi]# kubectl logs hello-1574992740-b6hhs Fri Nov 29 01:59:12 UTC 2019 Hello from the Kubernetes cluster [root@k8s-master ceshi]# kubectl delete cronjob hello cronjob.batch "hello" deleted [root@k8s-master ceshi]# kubectl get cronjob No resources found. [root@k8s-master ceshi]# kubectl get pod NAME READY STATUS RESTARTS AGE daemonset-example-dkw6c 1/1 Running 0 12h daemonset-example-zhqwq 1/1 Running 0 12h # 注意,删除 cronjob 的时候不会自动删除job,这些 job 可以用 kubectl delete job来删除 $ kubectl delete cronjob hello
CrondJob本身的一些限制
创建Job操作应该是幂等的