26、k8s-pod的控制器-第五种控制器-Job-处理一次性任务的pod
概念:Job主要用于负责批量处理(一次要处理指定数量的任务)短暂的一次性(每个任务仅运行一次就结束)的任务
Job特点:
·当Job创建的pod执行成功时、Job将记录成功结束的pod数量
·当成功结束的pod达到指定的数量时、Job将完成执行
Job的资源清单文件:
vim job.yaml
----------------------------------------------------------
apiVersion: batch/v1 #版本号
kind: Job
metadata:
name: job
namespace: dev
labels:
controller: job
spec:
completions: 1 #指定job需要成功运行pod的次数、默认值为1
parallelism: 1 #指定job在任一时刻应该并发运行pods的数量、默认值为1
activeDeadlineSeconds: 30 #指定job运行的时间期限、超过时间还未结束】系统就会尝试进行终止
backoffLimit: 6 #指定job失败后进行重试的次数、默认是6次
manualSelector: true #是否可以使用selector选择器选择pod、默认是false(不允许)
selector:
matchLabels:
app: counter-pod
matchExpressions:
- {key: app, operator: In, values: [counter-pod]}
template:
metadata:
labels:
app: counter-pod
spec:
restartPolicy: Nerver #重启策略、只能设置为Nerver或者OnFailure、不要w设置成Always(即使成功了也会重启)
containers:
- name: conuter
image: nginx:1.17.1
command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 2;done"]
-----------------------------------------------------------------------------------------------------
restartPolicy: 重启策略
·Onfailure,job会在pod出现故障的时候重启容器、而不是创建新的pod、failed次数不变
·Nerver、job会在pod出现故障的时候创建新的pod、并且故障的pod不会消失、也不会重启、faild次数加1
·Always、意味着job任务会一直重启、重复执行任务、即使job任务执行成功了也会重启、所以不建议设置成Always
案例
1、创建job的yaml:vim pc-job.yaml
---------------------------------------------------------------
apiVersion: batch/v1
kind: Job
metadata:
name: pc-job
namespace: dev
spec:
manualSelector: true
selector:
matchLabels:
app: counter-pod
template:
metadata:
labels:
app: counter-pod
spec:
restartPolicy: Never
containers:
- name: counter
image: busybox:1.30
command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 3;done"]
-----------------------------------------------------------------------------------------------
2、开两个窗口实时监控job和pod的情况
·kubectl get job -ndev -w
· kubectl get pods -ndev -w
3、创建job: kubectl create -f pc-job.yaml
·可以观察到pod在完成创建运行后自动停止了
4、先删掉job:kubectl delete -f pc-job.yaml
5、往上面的pc-job.yaml文件里加上这两行:
·completions: 6 #指定job需要成功运行pod的次数、默认值为1(就是创建pod的数量)
·parallelism: 3 #指定job在任一时刻应该并发运行pods的数量、默认值为1(就是一次性可以运行pod的数量、3说明要运行两次才能运行完6个pod)
------------------------------------------------------------------------------------------------------
apiVersion: batch/v1
kind: Job
metadata:
name: pc-job
namespace: dev
spec:
completions: 6 #指定job需要成功运行pod的次数、默认值为1
parallelism: 3 #指定job在任一时刻应该并发运行pods的数量、默认值为1
manualSelector: true
selector:
matchLabels:
app: counter-pod
template:
metadata:
labels:
app: counter-pod
spec:
restartPolicy: Never
containers:
- name: counter
image: busybox:1.30
command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 3;done"] #就是一个倒计时的命令
--------------------------------------------------------------------------------------------------------------------------
6、修改后执行创建job:kubectl create -f pc-job.yaml
7、观察job和pod的状态
·kubectl get job -ndev -w
·kubectl get pods -ndev -w
#观看pod状态发现、第一轮的时候三个pod一起执行、执行完倒计时后三个pod停止、开始第二轮的pod创建运行、倒计时完后就停止