|
本文以Kubernetes中的Job和CronJob资源对象为例,为大家分析Kubernetes中的Job和CronJob资源对象的使用方法,阅读完整文相信大家对Job和CronJob资源对象有了一定的认识。
一、Job(1)Job概述Job负责处理短暂的一次性任务,即仅执行一次的任务,它保证批处理任务的一个或多个pod成功结束。
Kubernetes支持以下几种Job:
非并行Job:通常创建一个Pod直到其成功结束;固定结束次数的Job:在spec字段下添加completions字段。创建多个Pod,直到满足completions规定的数值。如果不添加的话,默认情况下是1个;带有工作队列的并行Job:在spec字段下添加Parallelism字段。表示几个job同时并行工作。如果不添加的话,默认情况下是1个;根据可以设置completions字段、Parallelism字段,可以将Job分为以下几种:
(2)Job ControllerJob Controller负责根据Job yaml文件中Spec字段定义的内容创建Pod,并持续监控Job的状态,直至其成功结束。如果失败,则根据restartPolicy(只支持OnFailure和Never,不支持Always)决定是否创建新的pod再次重试任务。
如图:
(3)应用示例一个简单的小示例:
[root@master job]# cat job.yaml kind: JobapiVersion: batch/v1metadata: name: test-jobspec: template: ?metadata: ??name: test-job ?spec: ??containers: ??- name: hello ???image: busybox ???command: ["echo","hello k8s job"] ??restartPolicy: Never[root@master job]# kubectl apply -f job.yaml ?????//生成Job资源[root@master job]# kubectl get job ???????????//查看JobNAME ???COMPLETIONS ?DURATION ?AGEtest-job ?1/1 ?????2s ????5s[root@master job]# kubectl get pod -o wide ??//查看Job运行的详细信息NAME ??????READY ?STATUS ??RESTARTS ?AGE ?IP ?????NODE ??NOMINATED NODE ?READINESS GATEStest-job-rq9ws ?0/1 ??Completed ?0 ????25s ?10.244.1.15 ?node01 ?<none> ?????<none>[root@master job]# kubectl logs test-job-rq9ws ??????//查看通过Job生成的Pod的日志信息hello k8s job[root@master job]# kubectl delete jobs test-job ???//删除Job,那么对应的pod也会被删除!(4)提高Job的执行效率一个简单的小示例:
[root@master job]# cat job.yaml kind: JobapiVersion: batch/v1metadata: name: test-jobspec: parallelism: 2 completions: 10 template: ?metadata: ??name: test-job ?spec: ??containers: ??- name: hello ???image: busybox ???command: ["echo","hello k8s job"] ??restartPolicy: Never[root@master job]# kubectl apply -f job.yaml [root@master job]# kubectl get jobNAME ???COMPLETIONS ?DURATION ?AGEtest-job ?10/10 ????7s ????15s//可以看出是运行了10个任务查看Job运行的详细信息,如图:
由这个示例可以查看:
parallelism:表示同时运行多少个Pod执行任务;completions:表示总共需要完成的pod的数量;一个简单的小示例:
[root@master job]# cat job.yaml kind: JobapiVersion: batch/v1metadata: name: test-jobspec: backoffLimit: 5 activeDeadlineSeconds: 100 template: ?metadata: ??name: test-job ?spec: ??containers: ??- name: hello ???image: busybox ???command: ["echddddddo","hello k8s job"] ??restartPolicy: Never[root@master job]# kubectl apply -f job.yaml [root@master job]# kubectl get jobNAME ???COMPLETIONS ?DURATION ?AGEtest-job ?0/1 ?????2m28s ??2m28s[root@master job]# kubectl get pod NAME ??????READY ?STATUS ???????RESTARTS ?AGEtest-job-4lzsc ?0/1 ??ContainerCannotRun ?0 ????111stest-job-8q659 ?0/1 ??ContainerCannotRun ?0 ????2m42stest-job-hjjbx ?0/1 ??ContainerCannotRun ?0 ????2m41stest-job-qcf4z ?0/1 ??ContainerCannotRun ?0 ????2m31s由这个示例可以看出:
backoffLimit:表示出现错误重试次数;activeDeadlineSeconds:表示Job在集群中存活的时间;关于Job就简单介绍这么多了!
二、CronJobCronJob即定时任务,类似于Linux系统中的crontab,在指定的时间周期运行指定的任务。
CronJob yaml文件中的spec字段下的schedule是用来定义的时间间隔的,其用法与crontab一样(分、时、日、月、周);jobTemplate字段指定需要运行的任务;
在kubernetes 1.15中,使用CronJob需要使用API的batch/v2alpha1这个版本,但是,kubernetes本身并没有这个版本,如下:
[root@master job]# kubectl api-versions | grep batch/v2alpha1需要进行以下操作使Kubernetes群集支持这个batch/v2alpha1版本,操作如下:
[root@master ~]# vim /etc/kubernetes/manifests/kube-apiserver.yaml在spec字段的command字段下添加以下内容: ?- --runtime-config=batch/v2alpha1=true[root@master ~]# systemctl restart kubelet.service//重启kubelet服务[root@master ~]# kubectl api-versions | grep batch/v2alpha1batch/v2alpha1为了防止内容添加发生错误,附上图片一张:
(1)应用示例[root@master job]# cat cronjob.yaml kind: CronJobapiVersion: batch/v2alpha1metadata: name: hellospec: schedule: "*/1 * * * *" jobTemplate: ?spec: ??template: ???spec: ????containers: ????- name: hello ?????image: busybox ?????command: ["echo","hello cronjob"] ????restartPolicy: Never[root@master job]# kubectl apply -f cronjob.yaml查看效果:
这样测试是没有问题的,但是如果指定计划任务时,就会发现它不会像预期的效果一样!
如下:
[root@master job]# cat cronjob.yaml kind: CronJobapiVersion: batch/v2alpha1metadata: name: hellospec: schedule: "18 16 15 1 3" jobTemplate: ?spec: ??template: ???spec: ????containers: ????- name: hello ?????image: busybox ?????command: ["echo","hello cronjob"] ????restartPolicy: Never[root@master job]# date2020年 01月 15日 星期三 16:18:48 CST[root@master job]# kubectl get podNo resources found.关于Kubernetes中的Job和CronJob资源对象的使用方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。 |
|