共计 2253 个字符,预计需要花费 6 分钟才能阅读完成。
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