job 描述
job是k8s提供的一种任务类型,负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束
job的三种使用场景
- 非并行任务:只启一个pod,pod成功,job正常结束
- 并行任务同时指定成功个数:.spec.completions为指定成功个数,可以指定也可以不指定.spec.parallelism(指定>1,会有多个任务并行运行)。当成功个数达到.spec.completions,任务结束。
- 有工作队列的并行任务:.spec.completions默认为1,.spec.parallelism为大于0的整数。此时并行启动多个pod,只要有一个成功,任务结束,所有pod结束
参数
completions
指定job启动的任务(如:pod)成功运行completions次,job才算成功结束
parallelism
指定job同时运行的任务(如:pod)个数,Parallelism默认为1,如果设置为0,则job会暂定
backoffLimit
job建议指定pod的重启策略为never,如:.spec.template.spec.restartPolicy = "Never",然后通过job的backoffLimit来指定失败重试次数
在达到backoffLimit指定的次数后,job状态设置为failed(默认为6次),重试时间采用指数规避(10s, 20s, 40s …),并限制在6分钟内
activeDeadlineSeconds
通过指定job存活时间,来结束一个job。当job运行时间达到activeDeadlineSeconds指定的时间后,job会停止由它启动的所有任务(如:pod),并设置job的状态为failed, reason: DeadlineExceeded
activeDeadlineSeconds的优先级高于backoffLimit
apiVersion: batch/v1
kind: Job
metadata:
name: pi-with-timeout
spec:
backoffLimit: 5
activeDeadlineSeconds: 100
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
ttlSecondsAfterFinished
默认情况下,job异常或者成功结束后,包括job启动的任务(pod),都不会被清理掉,因为你可以依据保存的job和pod,查看状态、日志,以及调试等。这些用户可以手动删除,用户手动删除job,job controller会级联删除对应的pod
除了手动删除,通过指定参数ttlSecondsAfterFinished也可以实现自动删除job,以及级联的资源,如:pod。如果设置为0,job会被立即删除。如果不指定,job则不会被删除
apiVersion: batch/v1
kind: Job
metadata:
name: pi-with-ttl
spec:
ttlSecondsAfterFinished: 100
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
域名访问
通过job的service或者pod域名来访问job的任务
yaml
需要指定hostname,以及subdomain,subdomain和svc name保持一致。
apiVersion: v1
kind: Service
metadata:
name: pi-sub
spec:
selector:
job-name: pi
ports:
- protocol: TCP
port: 80
targetPort: 9376
---
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
hostname: pi
subdomain: pi-sub
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(10000)"]
restartPolicy: Never
backoffLimit: 4
访问
[root@master01 job]# nslookup pi-sub.default.svc.cluster.local 10.96.0.10
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: pi-sub.default.svc.cluster.local
Address: 10.109.132.186
[root@master01 job]#
[root@master01 job]#
[root@master01 job]# nslookup pi.pi-sub.default.svc.cluster.local 10.96.0.10
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: pi.pi-sub.default.svc.cluster.local
Address: 100.64.0.80
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。