千家信息网

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

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文以Kubernetes中的Job和CronJob资源对象为例,为大家分析Kubernetes中的Job和CronJob资源对象的使用方法,阅读完整文相信大家对Job和CronJob资源对象有了一定
千家信息网最后更新 2026年11月01日Kubernetes中的Job和CronJob资源对象怎么用

本文以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 Controller

Job 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              [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就简单介绍这么多了!

二、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/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资源对象的使用方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

字段 任务 示例 运行 资源 对象 内容 支持 成功 信息 时间 版本 使用方法 同时 多个 情况 效果 文件 方法 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网产品 厦门中拓互联网络科技有限公司 互联网与新科技 狮子座互联网科技有限公司 互联网巨头投资的硬核科技 互联网实体化科技化 互联网科技产品 哈尔滨新华互联网科技学院 中国科技创新与世界互联网大会 互联网公司黑科技创始人 美国互联网科技实力 皮皮虾互联网科技有限公司 互联网与数字科技关系 互联网科技包装股份有限公司上市 东营紫格互联网科技 抖集互联网科技技术咨询 互联网界的黑科技 互联网公司属于科技吗 张家口科技产业互联网平台 北京品多多互联网科技有限公司 小米移动互联网科技园 亿人帮互联网科技有限公司 艾特科技互联网 镁科技互联网资讯平台 深圳市运趣互联网科技有限公司 本届互联网博览会上的黑科技 互联网新科技动漫ppt素材 互联网在线教育科技创业 互联网科技大赛获奖感言 珠海东科互联网科技有限公司
0