• kubernets之job资源


    一  介绍job资源

      

        1.1   前面介绍的RC,RS,DS等等,管控的pod都是需要长期持久的运行的应用,但是尝试考虑另外一种场景,在微服务的场景下,有些pod的作用就是需要

      执行完一些命令之后正常退出,这时候上面的资源都无法利用,kubernets提供了一种解决方案,job,job的作用就是保障管理的pod能够在集群的节点上正

      常运行,当出现异常的时候(异常退出或者节点被下线的情况的时候),需要将任务进行重新调度至集群其他节点。

    二 定义job资源

        2.1   一个简单的job资源的定义yml文件如下所示

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: ex-job
    spec:
      template:
        metadata:
          labels:
            app: ex-job
      spec:
        restartPolicy: OnFailure
        containers:
        - name: main
          image: luksa/batch-job

      

    三 创建Job资源

      3.1 k create -f exporter.yml    

    [root@node01 Chapter04]# k create -f exporter.yml --validate=false
    job.batch/ex-job created
    [root@node01 Chapter04]# k get po NAME READY STATUS RESTARTS AGE ex-job-tjs8l 1/1 Running 0 109s
    [root@node01 Chapter04]# k get po NAME READY STATUS RESTARTS AGE ex
    -job-tjs8l 0/1 Completed 0 2m32s

      可以看到大约过了2分组该Job顺利的完成它的任务之后,状态也变成了Completed

      3.2 完成后的job仍然支持查看pod的日志等操作

    [root@node01 Chapter04]# k logs ex-job-tjs8l
    Wed Dec 23 09:28:43 UTC 2020 Batch job starting
    Wed Dec 23 09:30:43 UTC 2020 Finished succesfully

    四 创建多pod的Job资源

      4.1  定义多pod的job资源并且串行的去执行一些列pod

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: ex-multi-job
    spec:
      completions: 5
      template:
        metadata:
          labels:
            app: ex-job
        spec:
          restartPolicy: OnFailure
          containers:
          - name: main
            image: luksa/batch-job

      在2.1的基础上添加了一个参数,kubernets会依次串行的创建的pod,当前面一个pod创建完成,并以正常的方式退出,集群就会继续创建第二个,这次依次进行创建,当有pod运行失败的

    时候,集群也会重新创建,所以,集群创建的pod数量会大于等于5个

      4.2 结果如下

    [root@node01 Chapter04]# k get po
    NAME                 READY   STATUS      RESTARTS   AGE
    ex-multi-job-gjpvs   0/1     Completed   0          11m
    ex-multi-job-kgpfk   0/1     Completed   0          9m14s
    ex-multi-job-m29nq   0/1     Completed   0          7m8s
    ex-multi-job-rhwn5   0/1     Completed   0          2m55s
    ex-multi-job-rrf5g   0/1     Completed   0          5m2s

     

     4.3 创建一个并行的job的定义

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: ex-multi-job
    spec:
      completions: 5
      parallelism: 2
      template:
        metadata:
          labels:
            app: ex-job
        spec:
          restartPolicy: OnFailure
          containers:
          - name: main
            image: luksa/batch-job

      4.4  显示的结果如下所示

    [root@node01 Chapter04]# k get po
    NAME                 READY   STATUS    RESTARTS   AGE
    ex-multi-job-6dzpl   1/1     Running   0          109s
    ex-multi-job-kffd6   1/1     Running   0          109s
    
    [root@node01 Chapter04]# k get po
    NAME                 READY   STATUS      RESTARTS   AGE
    ex-multi-job-6dzpl   0/1     Completed   0          2m55s
    ex-multi-job-b9t4w   1/1     Running     0          48s
    ex-multi-job-g7trs   1/1     Running     0          50s
    ex-multi-job-kffd6   0/1     Completed   0          2m55s

    可以看到加入 parallelism: 2这个参数后,job会每2个一起创建

      4.5 即使在运行的时候,你依然可以使用命令来改变pod的每次创建的数量

      kubectl scale job ex-multi-job --replicas 3

      4.6 限制job pod的完成任务运行时间

        如果一个pod完成任务的时间过长,或者由于代码等原因导致pod直接卡住,无法完成又该怎么办

      可以通过在pod中配置activeDeadlineSecond属性,可以限制job的运行时间

      4.7 job的最后一个用法,cronjob,创建定时执行的pod,类似于linux里面的定时任务   

    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: ex-cronjob
    spec:
      schedule: "0,15,30,45 * * * *"
    #当计划的时间超过15s之后仍然未成功创建pod则显示此次失败
      startingDeadlineSeconds: 15
      jobTemplate:
        spec:
          template:
            metadata:
              labels:
                app: ex-cronjob
            spec:
              restartPolicy: OnFailure
              containers:
              - name: main
                image: luksa/batch-job

      会创建一个每小时的15/30/45都会创建pod,并且当15s过后还未成功拉起pod,则系统判定该次创建失败

      

      

  • 相关阅读:
    python的paramiko模块简单应用
    python单线程下实现多个socket并发
    python之协程
    python之生产者消费者模型
    python进程之间修改数据[Manager]与进程池[Pool]
    python的进程间的数据交互
    vmware搭建vSAN提示磁盘不合格或者看不到磁盘的解决办法
    python之多并发socket
    OOP的几个不常用的方法
    HTTP 头和 PHP header() 函数
  • 原文地址:https://www.cnblogs.com/wxm-pythoncoder/p/14179250.html
Copyright © 2020-2023  润新知