Kubernetes中的Job和CronJob资源对象怎么用-创新互联

本文以Kubernetes中的Job和CronJob资源对象为例,为大家分析Kubernetes中的Job和CronJob资源对象的使用方法,阅读完整文相信大家对Job和CronJob资源对象有了一定的认识。

创新互联建站是专业的固安网站建设公司,固安接单;提供成都网站制作、网站建设、外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行固安网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

一、Job

(1)Job概述

Job负责处理短暂的一次性任务,即仅执行一次的任务,它保证批处理任务的一个或多个pod成功结束。

Kubernetes支持以下几种Job:

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

根据可以设置completions字段、Parallelism字段,可以将Job分为以下几种:
Kubernetes中的Job和CronJob资源对象怎么用

(2)Job Controller

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

如图:
Kubernetes中的Job和CronJob资源对象怎么用

(3)应用示例

一个简单的小示例:

[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        
[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: 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运行的详细信息,如图:
Kubernetes中的Job和CronJob资源对象怎么用
由这个示例可以查看:

  • parallelism:表示同时运行多少个Pod执行任务;
  • completions:表示总共需要完成的pod的数量;

一个简单的小示例:

[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

由这个示例可以看出:

  • backoffLimit:表示出现错误重试次数;
  • activeDeadlineSeconds:表示Job在集群中存活的时间;

关于Job就简单介绍这么多了!

二、CronJob

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

为了防止内容添加发生错误,附上图片一张:
Kubernetes中的Job和CronJob资源对象怎么用

(1)应用示例

[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

查看效果:
Kubernetes中的Job和CronJob资源对象怎么用

这样测试是没有问题的,但是如果指定计划任务时,就会发现它不会像预期的效果一样!
如下:

[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.

关于Kubernetes中的Job和CronJob资源对象的使用方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


标题名称:Kubernetes中的Job和CronJob资源对象怎么用-创新互联
文章位置:http://ybzwz.com/article/ccoegd.html