Job负责处理短暂的一次性任务,即仅执行一次的任务,它保证批处理任务的一个或多个pod成功结束。node
Kubernetes支持如下几种Job:vim
根据能够设置completions字段、Parallelism字段,能够将Job分为如下几种:api
Job Controller负责根据Job yaml文件中Spec字段定义的内容建立Pod,并持续监控Job的状态,直至其成功结束。若是失败,则根据restartPolicy(只支持OnFailure和Never,不支持Always)决定是否建立新的pod再次重试任务。并发
如图:app
一个简单的小示例:ide
[root@master 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 [root@master job]# kubectl apply -f job.yaml //生成Job资源 [root@master job]# kubectl get job //查看Job NAME COMPLETIONS DURATION AGE test-job 1/1 2s 5s [root@master 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> [root@master job]# kubectl logs test-job-rq9ws //查看经过Job生成的Pod的日志信息 hello k8s job [root@master job]# kubectl delete jobs test-job //删除Job,那么对应的pod也会被删除!
一个简单的小示例:测试
[root@master 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 [root@master job]# kubectl apply -f job.yaml [root@master job]# kubectl get job NAME COMPLETIONS DURATION AGE test-job 10/10 7s 15s //能够看出是运行了10个任务
查看Job运行的详细信息,如图:
由这个示例能够查看:rest
一个简单的小示例:日志
[root@master 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 [root@master job]# kubectl apply -f job.yaml [root@master job]# kubectl get job NAME COMPLETIONS DURATION AGE test-job 0/1 2m28s 2m28s [root@master 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
由这个示例能够看出:code
关于Job就简单介绍这么多了!
CronJob即定时任务,相似于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/v2alpha1 batch/v2alpha1
为了防止内容添加发生错误,附上图片一张:
[root@master 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 [root@master job]# kubectl apply -f cronjob.yaml
查看效果:
这样测试是没有问题的,可是若是指定计划任务时,就会发现它不会像预期的效果同样!
以下:
[root@master job]# cat cronjob.yaml kind: CronJob apiVersion: batch/v2alpha1 metadata: name: hello spec: schedule: "18 16 15 1 3" jobTemplate: spec: template: spec: containers: - name: hello image: busybox command: ["echo","hello cronjob"] restartPolicy: Never [root@master job]# date 2020年 01月 15日 星期三 16:18:48 CST [root@master job]# kubectl get pod No resources found.
这个算是k8s的一个小问题吧,官方已经在紧急修复这个问题,相信在之后的新版本,这个问题是能够解决的吧!
注意,此时仍然不能正常运行指定时间的job,这时由于k8s官方在cronjob这个资源对象的支持中尚未完善此功能。还待开发。
CronJob跟Job资源同样,一样支持并发Job参数:parallelism,也支持完成Pod的总数参数:completions!
关于CronJob就先简单介绍这么多!
——————————本文到此结束,感谢阅读——————————