kubernetes-handbook/concepts/job.md

41 lines
1.4 KiB
Markdown
Raw Normal View History

2017-05-14 19:39:33 +08:00
# Job
2017-05-14 19:08:56 +08:00
2021-12-25 21:42:34 +08:00
Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束。
2017-05-14 19:08:56 +08:00
2021-12-25 21:42:34 +08:00
## Job Spec 格式
2017-05-14 19:08:56 +08:00
2021-12-25 21:42:34 +08:00
- spec.template 格式同 Pod
- RestartPolicy 仅支持 Never 或 OnFailure
- 单个 Pod 时,默认 Pod 成功运行后 Job 即结束
- `.spec.completions` 标志 Job 结束需要成功运行的 Pod 个数,默认为 1
- `.spec.parallelism` 标志并行运行的 Pod 的个数,默认为 1
- `spec.activeDeadlineSeconds` 标志失败 Pod 的重试最大时间,超过这个时间不会继续重试
2017-05-14 19:08:56 +08:00
一个简单的例子:
```yaml
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
$ kubectl create -f ./job.yaml
job "pi" created
$ pods=$(kubectl get pods --selector=job-name=pi --output=jsonpath={.items..metadata.name})
2020-02-28 11:34:52 +08:00
$ kubectl logs $pods -c pi
2017-05-14 19:08:56 +08:00
3.141592653589793238462643383279502...
```
2021-12-25 21:42:34 +08:00
## Bare Pod
2017-05-14 19:08:56 +08:00
2021-12-25 21:42:34 +08:00
所谓 Bare Pod 是指直接用 PodSpec 来创建的 Pod即不在 ReplicaSet 或者 ReplicationController 的管理之下的 Pod。这些 Pod 在 Node 重启后不会自动重启,但 Job 则会创建新的 Pod 继续任务。所以,推荐使用 Job 来替代 Bare Pod即便是应用只需要一个 Pod。