Kubernetes之Job与CronJob

时间:2020-08-20 19:47:04 来源:

【摘要】 Kubernetes之Job与CronJob考必过小编为大家整理了关于Kubernetes之Job与CronJob的信息,希望可以帮助到大家!

Kubernetes之Job与CronJob

标签:效率   ESS   字段   分析   res   box   emctl   日志信息   ast   

一、Job概述

一)、Job负责处理短暂的一次性任务,即仅执行一次的任务,它保证批处理任务的一个或多个pod成功结束。今天介绍另外?类资源对象:Job,我们在日常的工作中经常都会遇到?些需要进行批量数据处理和分析的需求,当然也会有按时间来进行调度的?作,Kubernetes 集群中为我们提供了 JobCronJob 两种资源对象来应对这种需求。


* Job 负责处理任务,即仅执??次的任务,它保证批处理任务的?个或多个 Pod 成功结束。
* CronJob 则就是在 Job 上加上了时间调度。

Kubernetes支持以下几种Job:


* 非并行Job:通常创建一个Pod直到其成功结束;
* 固定结束次数的Job:在spec字段下添加completions字段。创建多个Pod,直到满足completions规定的数值。如果不添加的话,默认情况下是1个;
* 带有工作队列的并行Job:在spec字段下添加Parallelism字段。表示几个job同时并行工作。如果不添加的话,默认情况下是1个;

根据可以设置completions字段、Parallelism字段,可以将Job分为以下几种:

二)、Job Controller
Job Controller负责根据Job yaml文件中Spec字段定义的内容创建Pod,并持续监控Job的状态,直至其成功结束。如果失败,则根据restartPolicy(只支持OnFailure和Never,不支持Always)决定是否创建新的pod再次重试任务。
如图:

三)、应用示例
示例:

[[email protected] job]# cat job.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

[[email protected] job]# kubectl apply -f job.yaml            //生成Job资源
[[email protected] job]# kubectl get job                        //查看Job
NAME       COMPLETIONS   DURATION   AGE
test-job   1/1           2s         5s
[[email protected] job]# kubectl get pod -o wide      //查看Job运行的详细信息
NAME             READY   STATUS      RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
test-job-rq9ws   0/1     Completed   0          25s   10.244.1.15   node01   <none>           <none>
[[email protected] job]# kubectl logs test-job-rq9ws             //查看通过Job生成的Pod的日志信息
hello k8s job
[[email protected] job]# kubectl delete jobs test-job        
//删除Job,那么对应的pod也会被删除!

注:如果容器内执行任务有误,会根据容器的重启策略操作容器,不过这里的容器重启策略只能是: Never和 OnFailure。

四)、提高Job的执行效率

* 我们可以在Job.spec字段下加上parallelism选项。表示同时运行多少个Pod执行任务。
* 我们可以在Job.spec字段下加上completions选项。表示总共需要完成Pod的数量。
* 举例将上述Job任务进行更改。提示,更改Job任务的时候,需要先将原来的Job资源对象删除

示例:

[[email protected] job]# cat job.yaml 
kind: Job
apiVersion: batch/v1
metadata:
  name: test-job
spec:
  parallelism: 2
  completions: 10
  template:
    metadata:
      name: test-job
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["echo","hello k8s job"]
      restartPolicy: Never

[[email protected] job]# kubectl apply -f job.yaml 
[[email protected] job]# kubectl get job
NAME       COMPLETIONS   DURATION   AGE
test-job   10/10         7s         15s
//可以看出是运行了10个任务

查看Job运行的详细信息,如图:

示例:


[[email protected] job]# cat job.yaml 
kind: Job
apiVersion: batch/v1
metadata:
  name: test-job
spec:
  backoffLimit: 5
  activeDeadlineSeconds: 100
  template:
    metadata:
      name: test-job
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["echddddddo","hello k8s job"]
      restartPolicy: Never

[[email protected] job]# kubectl apply -f job.yaml 
[[email protected] job]# kubectl get job
NAME       COMPLETIONS   DURATION   AGE
test-job   0/1           2m28s      2m28s
[[email protected] job]# kubectl get pod 
NAME             READY   STATUS               RESTARTS   AGE
test-job-4lzsc   0/1     ContainerCannotRun   0          111s
test-job-8q659   0/1     ContainerCannotRun   0          2m42s
test-job-hjjbx   0/1     ContainerCannotRun   0          2m41s
test-job-qcf4z   0/1     ContainerCannotRun   0          2m31s

这个示例可以看出:

二、CronJob

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

* CronJob yaml文件中的spec字段下的schedule是用来定义的时间间隔的,其用法与crontab一样(分、时、日、月、周);
jobTemplate字段指定需要运行的任务;

* 在kubernetes 1.15中,使用CronJob需要使用API的batch/v2alpha1这个版本,但是,kubernetes本身并没有这个版本,如下:

在kubernetes 1.15中,使用CronJob需要使用API的batch/v2alpha1这个版本,但是,kubernetes本身并没有这个版本,如下:


[[email protected] job]# kubectl api-versions | grep batch/v2alpha1

需要进行以下操作使Kubernetes群集支持这个batch/v2alpha1版本,操作如下:


[[email protected] ~]# vim /etc/kubernetes/manifests/kube-apiserver.yaml
在spec字段的command字段下添加以下内容:
    - --runtime-config=batch/v2alpha1=true
[[email protected] ~]# systemctl restart kubelet.service
//重启kubelet服务
[[email protected] ~]# kubectl api-versions | grep batch/v2alpha1
batch/v2alpha1

附加图片一张:

一)、应用示例

[[email protected] job]# cat cronjob.yaml 
kind: CronJob
apiVersion: batch/v2alpha1
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            command: ["echo","hello cronjob"]
          restartPolicy: Never

[[email protected] job]# kubectl apply -f cronjob.yaml

查看效果:

注:此时查看Pod的状态,会发现,每分钟都会运行一个新的Pod来执行命令规定的任务。
这样测试是没有问题的,但是如果指定计划任务时,就会发现它不会像预期的效果一样!
二)、应用示例

[[email protected] job]# cat cronjob.yaml 
kind: CronJob
apiVersion: batch/v2alpha1
metadata:
  name: hello
spec:
  schedule: "27 18 17 8 1"   //分别代表着“分、时、日、月、周”
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            command: ["echo","hello cronjob"]
          restartPolicy: Never
[[email protected] job]#  date
2020年 08月 17日 星期一 18:27:01 CST
[[email protected] job]# kubectl get pod
No resources found.

注:

Kubernetes之Job与CronJob

标签:效率   ESS   字段   分析   res   box   emctl   日志信息   ast   

以上就是Kubernetes之Job与CronJob的内容,更多资讯请及时关注考必过网站,最新消息小编会第一时间发布,大家考试加油!

上一篇      下一篇
前端相关推荐 更多>>
前端热点专题 更多>>
热点问答
国家公务员考试年龄限制是多少 公务员国考和省考考试内容有什么区别 函授大专学历能不能考公务员 国家公务员考试考点能自己选择吗 新闻学专业能报考2022年公务员考试吗 什么是联合培养研究生 什么是破格录取研究生 什么人不适合读研 研究生报名户口所在地填什么 研究生结业和毕业有什么区别
网站首页 网站地图 返回顶部
考必过移动版 https://m.kaobiguo.net