Job资源对象
**服务类的Pod容器:**RC、RS、DS、Deployment
**工作类的Pod容器:**Job—>执行一次,或者批量执行处理程序,完成之后退出容器。
注意: 如果容器内执行任务有误,会根据容器的重启策略操作容器,不过这里
的容器重启策略只能是: Never和 OnFailure。
概念
在有些场景下,是想要运行一些容器执行某种特定的任务,任务一旦执行完成,容器也就没有存在的必要了。在这种场景下,创建pod就显得不那么合适。于是就是了Job,Job指的就是那些一次性任务。通过Job运行一个容器,当其任务执行完以后,就自动退出,集群也不再重新将其唤醒。
从程序的运行形态上来区分,可以将Pod分为两类:长时运行服务(jboss、mysql等)和一次性任务(数据计算、测试)。RC创建的Pod都是长时运行的服务,Job多用于执行一次性任务、批处理工作等,执行完成后便会停止(status.phase变为Succeeded)。
环境介绍
主机 | IP地址 | 服务 |
---|---|---|
master | 192.168.1.21 | k8s |
node01 | 192.168.1.22 | k8s |
node02 | 192.168.1.23 | k8s |
基于 https://blog.51cto.com/14320361/2464655 的实验继续进行
一、kubernetes支持以下几种job
- 非并行job:通常创建一个pod直至其成功结束。
- 固定结束次数的job:设置spec.completions,创建多个pod,直到.spec.completions个pod成功结束。
- 带有工作队列的并行job:设置.spec.Parallelism但不设置.spec.completions,当所有pod结束并且至少一个成功时,job就认为是成功。
Job Controller
Job Controller负责根据Job Spec创建pod,并持续监控pod的状态,直至其成功结束,如果失败,则根据restartPolicy(只支持OnFailure和Never,不支持Always)决定是否创建新的pod再次重试任务。
例子
(1)编写一个job的yaml文件
[root@master yaml]# vim jop.yaml
kind: Job
apiVersion: batch/v1
metadata:
name: test-job
spec:
template:
metadata:
name: test-job
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: Never
(2)执行一下
[root@master yaml]# kubectl apply -f jop.yaml
(3)查看一下
[root@master yaml]# kubectl get pod
查看日志
[root@master yaml]# kubectl logs test-job-gs45w
我们可以看到job与其他资源对象不同,仅执行一次性任务,默认pod借宿运行后job即结束,状态为Completed。