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创建运行、倒计时完后就停止

 

posted @ 2024-07-01 00:13  little小新  阅读(1)  评论(0编辑  收藏  举报