Kubernetes的Job资源对象怎么用
admin
2023-02-02 01:01:57
0

Kubernetes的Job资源对象怎么用?相信大部分人都还不知道Job资源对象的使用方法,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧。

概念

在有些场景下,是想要运行一些容器执行某种特定的任务,任务一旦执行完成,容器也就没有存在的必要了。在这种场景下,创建pod就显得不那么合适。于是就是了Job,Job指的就是那些一次性任务。通过Job运行一个容器,当其任务执行完以后,就自动退出,集群也不再重新将其唤醒。

从程序的运行形态上来区分,可以将Pod分为两类:长时运行服务(jboss、mysql等)和一次性任务(数据计算、测试)。RC创建的Pod都是长时运行的服务,Job多用于执行一次性任务、批处理工作等,执行完成后便会停止(status.phase变为Succeeded)。

环境介绍

主机IP地址服务
master192.168.1.21k8s
node01192.168.1.22k8s
node02192.168.1.23k8s

基于[ https://blog.51cto.com/14320361/2464655]() 的实验继续进行

一、kubernetes支持以下几种job

  • 非并行job:通常创建一个pod直至其成功结束。
  • 固定结束次数的job:设置spec.completions,创建多个pod,直到.spec.completions个pod成功结束。
  • 带有工作队列的并行job:设置.spec.Parallelism但不设置.spec.completions,当所有pod结束并且至少一个成功时,job就认为是成功。

Job Controller

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

例子

(1)编写一个job的yaml文件

[root@master yaml]# vim jop.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

(2)执行一下

[root@master yaml]# kubectl apply -f jop.yaml 

(3)查看一下

[root@master yaml]# kubectl get pod

Kubernetes的Job资源对象怎么用

查看日志
[root@master yaml]# kubectl logs test-job-gs45w 

Kubernetes的Job资源对象怎么用

我们可以看到job与其他资源对象不同,仅执行一次性任务,默认pod借宿运行后job即结束,状态为Completed。

(4)修改一下jop的yaml文件,把echo命令换成乱码

[root@master yaml]# vim jop.yaml
kind: Job
apiVersion: batch/v1
metadata:
  name: test-job
spec:
  template:
    metadata:
      name: test-job
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["asdasxsddwefew","hello k8s job!"] #修改
      restartPolicy: Never

(5)先删除之前的pod

[root@master yaml]# kubectl delete jobs.batch test-job 

(6)执行一下

[root@master yaml]# kubectl apply -f jop.yaml 

(7)查看一下

[root@master yaml]# kubectl get pod -w

Kubernetes的Job资源对象怎么用

它会一直创建pod直到完成命令。

(8)修改一下jop的yaml文件,修改重启策略

[root@master yaml]# vim jop.yaml 
kind: Job
apiVersion: batch/v1
metadata:
  name: test-job
spec:
  template:
    metadata:
      name: test-job
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["asdasxsddwefew","hello k8s job!"]
      restartPolicy: OnFailure

(9)先删除之前的pod

[root@master yaml]# kubectl delete jobs.batch test-job 

(10)执行一下

[root@master yaml]# kubectl apply -f jop.yaml 

(11)查看一下

[root@master yaml]# kubectl get pod -w

Kubernetes的Job资源对象怎么用

它会一直重启pod完成命令,直到重启到一定次数就会删除job。

二、提高Job的执行效率

1. 我们可以在Job.spec字段下加上[parallelism]()选项。表示同时运行多少个Pod执行任务。


(1)编写一个job的yaml文件

[root@master yaml]# vim jop.yaml
kind: Job
apiVersion: batch/v1
metadata:
  name: test-job
spec:
  parallelism: 2    #同时启用几个pod
  template:
    metadata:
      name: test-job
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["echo","hello k8s job!"]
      restartPolicy: OnFailure

(3)执行一下

[root@master yaml]# kubectl apply -f jop.yaml 

(4)查看一下

[root@master yaml]# kubectl get pod

Kubernetes的Job资源对象怎么用

查看日志

Kubernetes的Job资源对象怎么用

2. 我们可以在Job.spec字段下加上complations选项。表示总共需要完成Pod的数量

(1)编写一个job的yaml文件

[root@master yaml]# vim jop.yaml
kind: Job
apiVersion: batch/v1
metadata:
  name: test-job
spec:
  complations: 8            #运行pod的总数量8个
  parallelism: 2            #同时运行2个pod
  template:
    metadata:
      name: test-job
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["echo","hello k8s job!"]
      restartPolicy: OnFailure

job 字段解释:

completions:标志Job结束需要成功运行的Pod个数,默认为1
parallelism:标志并行运行的Pod的个数,默认为1
activeDeadlineSeconds:标志失败Pod的重试最大时间,超过这个时间不会继续重试.

(2)先删除之前的pod

[root@master yaml]# kubectl delete jobs.batch test-job 

(3)执行一下

[root@master yaml]# kubectl apply -f jop.yaml 

(4)查看一下

[root@master yaml]# kubectl get pod

Kubernetes的Job资源对象怎么用
可以看到pod是两个两个的启动的。

3. 如何定时执行Job

(1)编写一个cronjob的yaml文件

[root@master yaml]# vim cronjop.yaml
kind: CronJob
apiVersion: batch/v1beta1
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *" #限定时间
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            command: ["echo","hello","cronjob"]
          restartPolicy: OnFailure

(2)先删除之前的pod

[root@master yaml]# kubectl delete jobs.batch test-job 

(3)执行一下

[root@master yaml]# kubectl apply -f jop.yaml 

(4)查看一下

[root@master yaml]# kubectl get pod

Kubernetes的Job资源对象怎么用

[root@master yaml]# kubectl get cronjobs.batch 

Kubernetes的Job资源对象怎么用

此时查看Pod的状态,会发现,每分钟都会运行一个新的Pod来执行命令规定的任
务。

练习:规定2020.1.15.10.5分运行上面的crontab任务。

(1)编写一个cronjob的yaml文件

[root@master yaml]# vim cronjop.yaml
kind: CronJob
apiVersion: batch/v1beta1
metadata:
  name: hello
spec:
  schedule: "5 10 15 1 *" #限定时间
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            command: ["echo","hello","cronjob"]
          restartPolicy: OnFailure

(2)先删除之前的pod

[root@master yaml]# kubectl delete cronjobs.batch hello 

(3)执行一下

[root@master yaml]# kubectl apply -f jop.yaml 

(4)查看一下

[root@master yaml]# kubectl get pod

Kubernetes的Job资源对象怎么用

这时会发现,如果规定具体时间,可能并不会执行任务。

(5)添加apiVersion库

[root@master yaml]# vim /etc/kubernetes/manifests/kube-apiserver.yaml 
spec:
  containers:
  - command:
    - kube-apiserver
    - --runtime-config=batch/v2alpha1=true    #添加

Kubernetes的Job资源对象怎么用

(6)重启kubelet

[root@master yaml]# systemctl restart kubelet.service 

(7)查看api版本

[root@master yaml]# kubectl api-versions 

Kubernetes的Job资源对象怎么用

(8)编写一个cronjob的yaml文件

[root@master yaml]# vim cronjop.yaml
kind: CronJob
apiVersion: batch/v1beta1
metadata:
  name: hello
spec:
  schedule: "47 10 15 1 *" #限定时间
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            command: ["echo","hello","cronjob"]
          restartPolicy: OnFailure

(9)执行一下

[root@master yaml]# kubectl apply -f jop.yaml 

(4)查看一下

[root@master yaml]# kubectl get pod -w

Kubernetes的Job资源对象怎么用

注意:此时仍然不能正常运行指定时间的Job,这是因为K8s官方在cronjob这个资源对象的支持中还没有完善此功能,还待开发。

跟Job资源一样在cronjob.spec.jobTemplate.spec 下同样支持并发Job参数:
parallelism,也支持完成Pod的总数参数: completionsr

以上就是Kubernetes的Job资源对象的使用方法,看完之后是否有所收获呢?如果想了解更多相关内容,欢迎关注行业资讯!

相关内容

热门资讯

拳王夫妇亏掉两亿,谁拖累了谁 作者 | 贺一 编辑 | 吴擎一门失败的生意,足以把一个世界冠军打回起点。最近,前奥运冠军、世界拳王...
中国驻以色列使馆提醒在以中国公... 当前,中东局势持续紧张,冲突延宕。有媒体报道称,以色列已将战备状态提升至最高水平。中国驻以色列使馆再...
论文疑遭蒋方舟抄袭,台湾原作者... 澎湃新闻记者 杨喆蒋方舟学术不端一事近日备受关注,原作者如何看待?7月13日,蒋方舟被中国人民大学认...
女子拦车加塞还向后车吐口水挑衅... 7月22日,重庆,一段“女子用肉身拦车加塞、向后车吐口水的”视频引发关注。重庆交警部门回应:目前事情...
台风“红霞”要来了,最新路径预... 23日,我国正式进入大暑节气,随着副热带高压逐渐加强西伸,江南、华南等地的强降雨将明显减弱,但华北、...
三连冠!宇通客车荣获新能源商用... 近日,2026 EC-PAC新能源商用车(客车)性能评价公益赛在重庆圆满收官。宇通新能源公交一举摘得...
透视上半年财政改革发展成效 新华社北京7月22日电 题:收支运行平稳 政策更加积极——透视上半年财政改革发展成效新华社记者申铖财...
伊朗称摧毁美军一套“萨德”、一... 新华社德黑兰7月23日电 伊朗伊斯兰革命卫队23日发布两份分别面向约旦和科威特民众的声明说,为回应美...
近40年来新低,日元迎来快速贬... 新华社东京7月23日电 国际观察|日元汇率缘何跌至近40年来新低新华社记者李诗萌 蓝建中近日,日元对...
稻城亚丁一游客疑因高反倒地抢救... 7月22日,四川稻城亚丁景区一名老年男性游客游玩时疑因高反抢救无效去世。7月23日,景区工作人员表示...