Job,主要用于负责批量处理(一次要处理指定数量任务)短暂的一次性(每个任务仅运行一次就结束)任务。
-
一次性任务:Job 用于运行那些只需要执行一次的任务,如数据分析、图像渲染或批量处理。
-
成功终止:Job 会跟踪其创建的 Pod 的成功完成(成功退出,退出状态为 0)的数量。
-
指定完成数量:Job 有一个目标完成数量,当成功结束的 Pod 数量达到这个指定的数量时,Job 就会完成。
-
并行处理:Job 可以配置并行性,即同时运行多个 Pod 来加速处理过程。Kubernetes 会尝试以最大并行数启动 Pod,直到达到所需的成功完成 Pod 的数量。
-
重启策略:Job 的重启策略通常设置为
OnFailure
,这意味着如果 Pod 失败(非零退出状态),它将被重启。 -
自动清理:一旦 Job 完成,即成功结束的 Pod 数量达到指定的目标,Kubernetes 将自动清理与该 Job 相关的所有资源。
-
回退机制:如果 Pod 由于某种原因(如节点故障)未能成功完成,Job 可以配置以重新创建并启动新的 Pod 来替换失败的 Pod。
-
监控和日志:Job 可以与 Kubernetes 的日志和监控系统集成,以便于跟踪作业的执行状态和历史。
Job的资源清单文件
---
apiVersion: batch/v1 # 版本号
kind: Job # 类型
metadata: # 元数据name: # rs名称namespace: # 所属命名空间labels: # 标签controller: job
spec: # 详情描述completions: 1 # 指定job需要成功运行Pods的次数。默认值: 1parallelism: 1 # 指定job在任一时刻应该并发运行Pods的数量。默认值: 1activeDeadlineSeconds: 30 # 指定job可运行的时间期限,超过时间还未结束,系统将会尝试进行终止。backoffLimit: 6 # 指定job失败后进行重试的次数。默认是6manualSelector: true # 是否可以使用selector选择器选择pod,默认是falseselector: # 选择器,通过它指定该控制器管理哪些podmatchLabels: # Labels匹配规则app: counter-podmatchExpressions: # Expressions匹配规则- key: appoperator: Invalues: [counter-pod]template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本metadata:labels:app: counter-podspec:restartPolicy: Never # 重启策略只能设置为Never或者OnFailurecontainers:- name: counterimage: busybox:1.30command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 2;done"]
在 Kubernetes 中,Job
控制器的重启策略与 Pod
的重启策略是不同的。Job
本身并不控制容器的重启,而是控制着生成新 Pod
的行为。以下是 Job
控制器与重启策略相关的正确说明:
-
OnFailure:这是
Job
的默认重启策略。当Pod
由于容器故障而失败时(比如退出状态非零),Job
会认为这是一个失败,失败次数会增加,并且Job
会创建一个新的Pod
来替换失败的Pod
。这意味着任务会重试,直到成功完成。 -
Never:如果将重启策略设置为
Never
,当Pod
失败时,Job
不会创建新的Pod
来替换它,失败的Pod
将保留在系统中,并且失败次数会增加。这种策略通常用于调试,以便可以检查失败的Pod
的状态和日志。 -
Always:这个选项对于
Pod
的重启策略是有意义的,但对于Job
控制器来说,并不适用。Job
控制器不负责重启容器,它负责的是生成新的Pod
。如果Pod
的重启策略设置为Always
,无论何时容器退出,Kubernetes 都会重启该容器,而与Job
控制器无关。
创建Job控制器
^C[root@k8s-master ~]# cat pc-job.yaml
---
apiVersion: batch/v1
kind: Job
metadata:name: pc-jobnamespace: test
spec:manualSelector: trueselector:matchLabels:app: counter-pod # 确保这个与 template 中的 labels 匹配template:metadata:labels:app: counter-pod # 这里的 labels 需要与 selector 的 matchLabels 对应spec:restartPolicy: Nevercontainers:- name: counterimage: busybox:1.30command: ["/bin/sh", "-c", "for i in 9 8 7 6 5 4 3 2 1; do echo $i; sleep 3; done"]
[root@k8s-master ~]#
查看job
[root@k8s-master ~]# kubectl get job -n test -o wide -w
NAME COMPLETIONS DURATION AGE CONTAINERS IMAGES SELECTOR
pc-job 0/1 2s 2s counter busybox:1.30 app=counter-pod
pc-job 1/1 43s 43s counter busybox:1.30 app=counter-pod
查看pod
可以看的pod在启动成功之后就变为completed状态
[root@k8s-master ~]# kubectl get pods -n test -w
NAME READY STATUS RESTARTS AGE
pc-daemonset-9vwvd 1/1 Running 0 24m
pc-daemonset-drdt5 1/1 Running 0 24m
pc-job-dhgqw 1/1 Running 0 41s
pc-job-dhgqw 0/1 Completed 0 43s
pc-job-dhgqw 0/1 Completed 0 43s