111 lines
4.2 KiB
Markdown
111 lines
4.2 KiB
Markdown
![]() |
<h1><center>kubernetes工作负载资源Job</center></h1>
|
|||
|
|
|||
|
著作:行癫 <盗版必究>
|
|||
|
|
|||
|
------
|
|||
|
|
|||
|
## 一:Job
|
|||
|
|
|||
|
Job 会创建一个或者多个 Pods,并将继续重试 Pods 的执行,直到指定数量的 Pods 成功终止。 随着 Pods 成功结束,Job 跟踪记录成功完成的 Pods 个数。 当数量达到指定的成功个数阈值时,任务(即 Job)结束。 删除 Job 的操作会清除所创建的全部 Pods。 挂起 Job 的操作会删除 Job 的所有活跃 Pod,直到 Job 被再次恢复执行。一种简单的使用场景下,你会创建一个 Job 对象以便以一种可靠的方式运行某 Pod 直到完成。 当第一个 Pod 失败或者被删除(比如因为节点硬件失效或者重启)时,Job 对象会启动一个新的 Pod。
|
|||
|
|
|||
|
#### 1.创建Job
|
|||
|
|
|||
|
```shell
|
|||
|
[root@master xingdian]# cat Jobs.yaml
|
|||
|
apiVersion: batch/v1
|
|||
|
kind: Job
|
|||
|
metadata:
|
|||
|
name: job-demo
|
|||
|
spec:
|
|||
|
template:
|
|||
|
spec:
|
|||
|
containers:
|
|||
|
- name: myjob
|
|||
|
image: alpine:3.11
|
|||
|
imagePullPolicy: IfNotPresent
|
|||
|
command: ["/bin/sh" , "-c", "sleep 60"]
|
|||
|
restartPolicy: Never
|
|||
|
completions: 2 #完成2次 没有配置并行 所以是单队列 完成1次后在启动一次
|
|||
|
ttlSecondsAfterFinished: 3600 #保存1个小时
|
|||
|
backoffLimit: 3 #重试次数 默认为6改为3
|
|||
|
activeDeadlineSeconds: 300 #启动后的存活时长
|
|||
|
```
|
|||
|
|
|||
|
#### 2.运行
|
|||
|
|
|||
|
```shell
|
|||
|
[root@master xingdian]# kubectl create -f Jobs.yaml
|
|||
|
```
|
|||
|
|
|||
|
#### 3.查看运行结果
|
|||
|
|
|||
|
```shell
|
|||
|
[root@k8s-master job]# kubectl get pod
|
|||
|
NAME READY STATUS RESTARTS AGE
|
|||
|
daemonset-demo-4zfwp 1/1 Running 0 20m
|
|||
|
daemonset-demo-j7m7k 1/1 Running 0 20m
|
|||
|
daemonset-demo-xj6wc 1/1 Running 0 20m
|
|||
|
job-demo-w4nkh 0/1 ContainerCreating 0 2s
|
|||
|
|
|||
|
[root@k8s-master job]# kubectl get pod
|
|||
|
NAME READY STATUS RESTARTS AGE
|
|||
|
daemonset-demo-4zfwp 1/1 Running 0 22m
|
|||
|
daemonset-demo-j7m7k 1/1 Running 0 22m
|
|||
|
daemonset-demo-xj6wc 1/1 Running 0 22m
|
|||
|
job-demo-vfh9r 1/1 Running 0 49s #串行运行
|
|||
|
job-demo-w4nkh 0/1 Completed 0 2m5s #已完成
|
|||
|
```
|
|||
|
|
|||
|
#### 4.查看详细信息
|
|||
|
|
|||
|
```shell
|
|||
|
[root@master xingdian]# kubectl describe jobs/pi
|
|||
|
Name: pi
|
|||
|
Namespace: default
|
|||
|
Selector: controller-uid=98846cab-bb0c-430d-b577-519602c5636d
|
|||
|
Labels: controller-uid=98846cab-bb0c-430d-b577-519602c5636d
|
|||
|
job-name=pi
|
|||
|
Annotations: batch.kubernetes.io/job-tracking:
|
|||
|
Parallelism: 1
|
|||
|
Completions: 1
|
|||
|
Completion Mode: NonIndexed
|
|||
|
Start Time: Mon, 02 May 2022 20:47:48 +0800
|
|||
|
Completed At: Mon, 02 May 2022 20:55:25 +0800
|
|||
|
Duration: 7m37s
|
|||
|
Pods Statuses: 0 Active / 1 Succeeded / 0 Failed
|
|||
|
Pod Template:
|
|||
|
Labels: controller-uid=98846cab-bb0c-430d-b577-519602c5636d
|
|||
|
job-name=pi
|
|||
|
Containers:
|
|||
|
pi:
|
|||
|
Image: perl
|
|||
|
Port: <none>
|
|||
|
Host Port: <none>
|
|||
|
Command:
|
|||
|
perl
|
|||
|
-Mbignum=bpi
|
|||
|
-wle
|
|||
|
print bpi(2000)
|
|||
|
Environment: <none>
|
|||
|
Mounts: <none>
|
|||
|
Volumes: <none>
|
|||
|
Events: <none>
|
|||
|
```
|
|||
|
|
|||
|
#### 5.编写 Job 规约
|
|||
|
|
|||
|
与 Kubernetes 中其他资源的配置类似,Job 也需要 `apiVersion`、`kind` 和 `metadata` 字段
|
|||
|
|
|||
|
Job 的名字必须是合法的DNS 子域名
|
|||
|
|
|||
|
Job 配置还需要一个`.spec` 节
|
|||
|
|
|||
|
#### 6.Pod 模版
|
|||
|
|
|||
|
Job 的 `.spec` 中只有 `.spec.template` 是必需的字段
|
|||
|
|
|||
|
字段 `.spec.template` 的值是一个Pod 模版。 其规范与Pod完全相同,只是其中不再需要 `apiVersion` 或 `kind` 字段
|
|||
|
|
|||
|
Job 中的 Pod 模版必需设置合适的标签和合适的重启策略
|
|||
|
|
|||
|
Job 中 Pod 的`RestartPolicy`只能设置为 `Never` 或 `OnFailure` 之一
|