1、Job 批处理任务

1、Job 介绍
  • Kubernetes job资源对象用于定义并启动一个批处理任务。

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

2、Job 类型
  • 非并行 Job:通常创建一个 Pod 直至其成功结束

  • 固定结束次数的 Job:设置 .spec.completions [kəmˈpliʃənz],创建多个 Pod,直到.spec.completions 个 Pod 成功结束

    • spec.backoffLimit指定在此Job在标记为失败之前重试的次数,默认为6次

    • spec.completions标志Job结束需要成功运行的Pod个数,默认为1

    • spec.parallelism标志并行运行的Pod的个数,默认为1

    • 具体语法格式可以通过kubectl explain job.spec 查看

  • 带有工作队列的并行 Job:设置 .spec.Parallelism [ˈpærəlelɪzəm] 但不设置.spec.completions ,当所有 Pod 结束并且至少一个成功时,Job 就认为是成功,根据 .spec.completions 和 .spec.Parallelism 的设置。

  • Job 划分为以下几种 pattern:

  • Job 类型使用示例行为completionsParallelism
    一次性Job数据库迁移创建一个 Pod 直至其成功结束11
    固定结束次数的Job处理工作队列的Pod依次创建一个 Pod 运行直至 completions 个成功结束2+1
    固定结束次数的并行 Job多个 Pod同时处理工作队列依次创建多个 Pod 运行直至 completions 个成功结束2+2+
    并行 Job多个 Pod同时处理工作队列创建一个或多个 Pod直至有一个成功结束12+
3、Job 特性
  • 运行完成后退出,但是不会被删除,便于用户查看日志信息,了解任务完成的情况

  • 删除job时,产生的pod也会被一起删除

  • job中可以运行多个pod(任务执行多次),且可以并行运行缩短任务完成的时间

  • 限制job中的pod的完成时间,即设置超时时间

  • 可以设置类似定时计划任务的job,定期执行

4、 配置实例

--查看job

--运行完成后退出,但是不会被删除,pod中会显示为完成状态

--也可以可以通过parallelism:来设置并发数量

2、CronJob 定时任务调度

1、CronJob 介绍
  • CronJob 用于以时间为基准周期性地执行任务,这些自动化任务和运行在Linux或UNIX系统上的CronJob一样。CronJob对于创建定期和重复任务非常有用,例如执行备份任务、周期性调度程序接口、发送电子邮件等。

  • CronJob 运行流程为 创建job ——> 然后job会创建pod ——> 然后执行调度 ——> 然后销毁pod 理解为 在高频率的定时任务就是不断的创建pod然后删除pod

  • 创建CronJob有两种方式,一种是直接使用kubectl创建,一种是使用yaml文件创建。

  • 指定时间只执行一次的coronjob,按照指定时间周期性执行的cronjob

2、使用 kubectl 创建 CronJob

 [root@k8s-master cronjob]# kubectl create cronjob hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"

3、yaml 文件的方式创建
[root@k8s-master cronjob]# cat<<EOF>>test-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: test-cronjob
spec:
  schedule: "*/1 * * * *"      # 参考定时计划任务(分时日月周)
  startingDeadlineSeconds: 15  # pod必须在规定时间后的15秒内开始执行,若超过该时间未执行,则任务将不运行,且标记失败    
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: test-cronjob
        spec:
          containers:
          - name: test-jo
            image: busybox
           args:
           - "/bin/sh"
           - "-c"
           - "date; echo Hello from the Kubernetes cluster"
          restartPolicy: OnFailure
EOF
  • 查看创建的CronJob:

[root@k8s-master cronjob]# kubectl get cronjob
  • 等待1分钟可以查看执行的任务(Jobs):

[root@k8s-master cronjob]# kuberctl get jobs
  • CronJob每次调用任务的时候会创建一个Pod执行命令,执行完任务后,Pod状态就会变成Completed,如下所示:

[root@k8s-master cronjob]# kuberctl get pods
  • 可以通过logs查看Pod的执行日志:

[root@k8s-master cronjob]# kubectl logs -f hello-1558779360-jcp4r
Sat May 25 10:16:23 UTC 201
Hello from the Kubernetes cluster
  • 如果要删除CronJob,直接使用delete即可:

[root@k8s-master cronjob]# kubectl delete cronjob hello 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐