Kubernetes --(k8s)Job、CronJob

Job

https://www.kubernetes.org.cn/job
https://www.kubernetes.org.cn/cronjob

Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束.

Kubernetes支持以下几种Job:

  1. 非并行Job:通常创建一个Pod直至其成功结束
  2. 固定结束次数的Job:设置.spec.completions,创建多个Pod,直到.spec.completions个Pod成功结束
  3. 带有工作队列的并行Job:设置.spec.Parallelism但不设置.spec.completions,当所有Pod结束并且至少一个成功时,Job就认为是成功
  • 根据.spec.completions和.spec.Parallelism的设置,可以将Job划分为以下几种pattern:
Job类型 使用示例 行为 completions Parallelism
一次性Job 数据库迁移 创建一个Pod直至其成功结束 1 1
固定结束次数的Job 处理工作队列的Pod 依次创建一个Pod运行直至completions个成功结束 2+ 1
固定结束次数的并行Job 多个Pod同时处理工作队列 依次创建多个Pod运行直至completions个成功结束 2+ 2+
并行Job 多个Pod同时处理工作队列 创建一个或多个Pod直至有一个成功结束 1 2+

实验1:一次性Job

第一步:编写job的yml文件

apiVersion: batch/v1
kind: Job
metadata:
   name: job
spec:
   template:
      spec:
         restartPolicy: Never
         containers:
         - name: job
           image: busybox
           command: ["echooo","Hello World"]

第二步:执行yml文件

╭─root@node1 ~  
╰─➤  kubectl apply -f job.yml      
job.batch/job created

第三步:查看pod

╭─root@node1 ~  
╰─➤  kubectl get pod
NAME        READY   STATUS               RESTARTS   AGE
job-jhlsf   0/1     ContainerCannotRun   0          53s
job-ldxnr   0/1     ContainerCannotRun   0          23s
job-m6cpf   0/1     ContainerCreating    0          3s
job-m8skh   0/1     ContainerCannotRun   0          64s

问题发现:创建了很多pod,为什么?

解答:Job Controller负责根据Job Spec创建Pod,并持续监控Pod的状态,直至其成功结束。如果失败,则根据restartPolicy(只支持OnFailure和Never,不支持Always)决定是否创建新的Pod再次重试任务。如果重启策略为OnFailure的话,pod会一直重启!

实验2:固定结束次数的并行Job

第一步:编写yml文件

apiVersion: batch/v1
kind: Job
metadata: 
   name: job
spec:
   completions: 2    # 完成数
   parallelism: 2    # 并行数
   template:
      spec:
         restartPolicy: OnFailure
         containers:
         - name: job
           image: busybox
           command: ["/bin/sh","-c","sleep 5;echo Hello World"]

第二步:运行

╭─root@node1 ~  
╰─➤  kubectl apply -f job.yml 
job.batch/job created

第三步:查看

╭─root@node1 ~  
╰─➤  kubectl get pod
NAME        READY   STATUS      RESTARTS   AGE
job-x5tfw   1/1     Running     0          35s
job-zx8p2   0/1     Completed   0          35s

╭─root@node1 ~  
╰─➤  kubectl logs job-x5tfw 
Hello World
╭─root@node1 ~  
╰─➤  kubectl logs job-zx8p2 
Hello World


CronJob

CronJob即定时任务,就类似于Linux系统的crontab,在指定的时间周期运行指定的任务。

实验:

第一步:编写yml文件

apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: cronjob1
spec:
   schedule: "* * * * *"
   jobTemplate:
      metadata:
         name: job
      spec:
         template:
            metadata:
               name: pod
            spec:
               restartPolicy: OnFailure
               containers:
               - name: busybox
                 image: busybox
                 command: ["echo","hello"]
                 imagePullPolicy: IfNotPresent

第二步:运行

╭─root@node1 ~  
╰─➤  kubectl apply -f cronjob.yml 
cronjob.batch/cronjob1 created

第三步: 查看

╭─root@node1 ~  
╰─➤  kubectl get pod
NAME                        READY   STATUS      RESTARTS   AGE
cronjob1-1567149060-vjqtp   0/1     Completed   0          43s
╭─root@node1 ~  
╰─➤  kubectl logs cronjob1-1567149060-vjqtp
hello

原文地址:https://www.cnblogs.com/du-z/p/11433886.html