Job
https://www.kubernetes.org.cn/job
https://www.kubernetes.org.cn/cronjob
Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束.
Kubernetes支持以下几种Job:
1.非并行Job:通常创建一个Pod直至其成功结束
2.固定结束次数的Job:设置.spec.completions,创建多个Pod,直到.spec.completions个Pod成功结束
3.带有工作队列的并行Job:设置.spec.Parallelism但不设置.spec.completions,当所有Pod结束并且至少一个成功时,Job就认为是成功
根据.spec.completions和.spec.Parallelism的设置,可以将Job划分为以下几种pattern:
实验1:一次性Job
第一步:编写job的yml文件
apiVersion: batch/v1
kind: Job
metadata:
name: job
spec:
template:
spec:
restartPolicy: Never
containers:
- name: job
image: busybox
command: [“echooo”,“Hello World”]
第二步:执行yml文件
kubectl apply -f job.yml
job.batch/job created
第三步:查看pod
kubectl get pod
NAME READY STATUS RESTARTS AGE
job-jhlsf 0/1 ContainerCannotRun 0 53s
job-ldxnr 0/1 ContainerCannotRun 0 23s
job-m6cpf 0/1 ContainerCreating 0 3s
job-m8skh 0/1 ContainerCannotRun 0 64s
问题发现:创建了很多pod,为什么?
解答:Job Controller负责根据Job Spec创建Pod,并持续监控Pod的状态,直至其成功结束。如果失败,则根据restartPolicy(只支持OnFailure和Never,不支持Always)决定是否创建新的Pod再次重试任务。如果重启策略为OnFailure的话,pod会一直重启!
实验2:固定结束次数的并行Job
第一步:编写yml文件
apiVersion: batch/v1
kind: Job
metadata:
name: job
spec:
completions: 2 # 完成数
parallelism: 2 # 并行数
template:
spec:
restartPolicy: OnFailure
containers:
- name: job
image: busybox
command: ["/bin/sh","-c",“sleep 5;echo Hello World”]
第二步:运行
kubectl apply -f job.yml
job.batch/job created
第三步:查看
kubectl get pod
NAME READY STATUS RESTARTS AGE
job-x5tfw 1/1 Running 0 35s
job-zx8p2 0/1 Completed 0 35s
kubectl logs job-x5tfw
Hello World
kubectl logs job-zx8p2
Hello World
CronJob
CronJob即定时任务,就类似于Linux系统的crontab,在指定的时间周期运行指定的任务。
实验:
第一步:编写yml文件
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob1
spec:
schedule: “* * * * *”
jobTemplate:
metadata:
name: job
spec:
template:
metadata:
name: pod
spec:
restartPolicy: OnFailure
containers:
- name: busybox
image: busybox
command: [“echo”,“hello”]
imagePullPolicy: IfNotPresent
第二步:运行
kubectl apply -f cronjob.yml
cronjob.batch/cronjob1 created
第三步: 查看
kubectl get pod
NAME READY STATUS RESTARTS AGE
cronjob1-1567149060-vjqtp 0/1 Completed 0 43s
kubectl logs cronjob1-1567149060-vjqtp
hello