首页 > 其他分享 >12.Job和CronJob

12.Job和CronJob

时间:2023-08-08 11:00:54浏览次数:39  
标签:CronJob 12 name cronjob demo 作业 Job job

Job和CronJob编排作业级应用

Job

Job控制器的应用编排机制
如果说daemoset和deployment主要负责编排始终运行的守护进程类应用;而Job则是负责编排运行有结束时间的“一次性”任务。
    ◼ 控制器要确保Pod内的进程“正常(成功完成任务)”地退出
    ◼ 非正常退出的Pod可以根据需要重启,并在重试一次的次数后终止
    ◼ 有些Job是单次任务,也有些Job需要运行多次(次数通常固定)
    ◼ 有些任务支持同时创建及并行运行多个Pod以加快任务处理速度,Job控制器还允许用户自定义其并行度

需要周期性运行的Job,则由CronJob控制器负责编排
    ◼ CronJob建立在Job的功能之上,是更高层级的控制器
    ◼ 它以Job控制器完成单批次的任务编排,而后为这种Job作业提供需要运行的周期定义
Job资源规范
Job资源同样需要标签选择器和Pod模板,但它不需要指定replicas,而是应该给定completions,即需要完成的作业次数,默认为1次;
    ◼ Job资源会为其Pod对象自动添加“job-name=JOB_NAME”和“controller-uid=UID”标签,并使用标签选择器完成对controller-uid标签的关联,因此,selector并非必选字段
    ◼ Pod的命名格式:`$(job-name)-$(index)-$(random-string),其中的$(index)字段取值与completions和completionMode有关
    
    ◼ 注意
        ◆ Job资源所在群组为“batch/v1”
        ◆ Job资源中,Pod的RestartPolicy的取值只能为Never或OnFailure 
        
资源范例各自段解释        
apiVersion: batch/v1          #API群组及版本;
kind: Job                     #资源类型特有标识;
metadata:
name <string>                 #资源名称,在作用域中要惟一;
namespace <string>            #名称空间;Job资源隶属名称空间级别;
spec:
selector <object>             #标签选择器,必须匹配template字段中Pod模板中的标签;
suspend <boolean>             #是否挂起当前Job的执行,挂起作业会重置StartTime字段的值;
template <object>             #Pod模板对象;
completions <integer>         #期望的成功完成的作业次数,成功运行结束的Pod数量;
completionMode <string>     #追踪Pod完成的模式,支持Indexed排序和NonIndexed默认乱序两种
ttlSecondsAfterFinished <integer>     #终止状态作业的生存时长,超期将被删除;
parallelism <integer>                 #作业的最大并行度,默认为1;
backoffLimit <integer>                #将作业标记为“Failed”之前的重试次数,默认为6;
activeDeadlineSeconds <integer>       #作业启动后可处于活动状态的时长;


示例:
apiVersion: batch/v1
kind: Job
metadata:
  name: job-demo
spec:
  template:
    spec:
      containers:
      - name: myjob
        image: ikubernetes/admin-box:v1.0      #基于这个镜像
        imagePullPolicy: IfNotPresent          #运行命令只是sleep30s,就意味着sleep
        command: ["/bin/sh", "-c", "sleep 30"] 30s,容器就终止了,pod也将终止,模拟只
      restartPolicy: Never                     运行一段时间,就正常退出的一个作业
    completions: 3                             #定义为运行3次
    ttlSecondsAfterFinished: 3600              #保留时长1小时
    backoffLimit: 3                            #最大重试次数,三次
    activeDeadlineSeconds: 300                 #如果300s没退出,就异常了,强行终止pod
实际案例(串行Job)
[root@K8s-master01 chapter8]#cat job-demo.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: job-demo
spec:
  template:
    spec:
      containers:
      - name: myjob
        image: ikubernetes/admin-box:v1.2
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c", "sleep 20"]
      restartPolicy: Never
  completions: 3
  ttlSecondsAfterFinished: 3600
  backoffLimit: 3
  activeDeadlineSeconds: 300

查看带有标签的pod 
[root@K8s-master01 chapter8]#kubectl get pods --show-labels
job-demo-8nrxj                   1/1     Running     0              7s    controller-uid=7e4aafa6-5b1b-4907-ad07-b233429f12d0,job-name=job-demo

并根据标签选择只看job的信息,让其处于监视状态
[root@K8s-master01 chapter8]#kubectl get pods -l job-name=job-demo -w

查看job,发现job已完成3次
[root@K8s-master01 chapter8]#kubectl get job
NAME       COMPLETIONS   DURATION   AGE
job-demo   3/3           75s        4m19s


[root@K8s-master01 chapter8]#kubectl discribe pod
查看job的详细信息,如果出错,可查看出错的信息
Events:
  Type    Reason            Age    From            Message
  ----    ------            ----   ----            -------
  Normal  SuccessfulCreate  7m36s  job-controller  Created pod: job-demo-gx22b
  Normal  SuccessfulCreate  7m10s  job-controller  Created pod: job-demo-sqmx5
  Normal  SuccessfulCreate  6m45s  job-controller  Created pod: job-demo-j5bjg
  Normal  Completed         6m21s  job-controller  Job completed
并行Job,只需再job上加parallelism字段
Job对象能够支持多个Pod的可靠、并发执行
   ◼ 编排彼此间相互通信的并行进程并非Job的设计目标,它仅用于支撑一组相互独立而又有所关联的工作任务的并行处理
   ◼ 常见的场景,有如发送电子邮件、渲染视频帧、编解码文件、NoSQL数据库中扫描主键范围等

并行式Job的关键配置参数
   ◼ parallelism:任务并行度,即最大可同行运行的Pod数量,可以将其理解为工作队列的数量
   ◼ completions:总共需要完成的任务数量,即总共需要多少个相关的Pod成功完成执行,通常要大于parallelism的值
   
   
apiVersion: batch/v1
kind: Job
metadata:
  name: para-job-demo
spec:
  template:
    spec:
      containers:
      - name: myjob
        image: ikubernetes/admin-box:v1.0      #基于这个镜像
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c", "sleep 30"] #运行命令只是sleep30s,就意味着sleep
      restartPolicy: OnFailure                 30s,容器就终止了,pod也将终止,模拟只
  completions: 7     #完成的次数                 运行一段时间,就正常退出的一个作业
  parallelism: 2     #并行数,要小于等于完成数
  completionMode: Indexed    #是否对完成的作业做索引标示
  ttlSecondsAfterFinished: 3600
  backoffLimit: 3
  activeDeadlineSeconds: 1200
实际案例(并行Job)
[root@K8s-master01 chapter8]#cat job-para-demo.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: job-para-demo
spec:
  template:
    spec:
      containers:
      - name: myjob
        image: ikubernetes/admin-box:v1.2
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c", "sleep 10"]
      restartPolicy: Never
  completions: 7 
  completionMode: Indexed
  parallelism: 2
  ttlSecondsAfterFinished: 3600
  backoffLimit: 3
  activeDeadlineSeconds: 1200
  
创建并查看pod
[root@K8s-master01 chapter8]#kubectl apply -f job-para-demo.yaml 
job.batch/job-para-demo created

查看pod的标签
[root@K8s-master01 chapter8]#kubectl get pods --show-labels

监视符合条件的pod
[root@K8s-master01 chapter8]#kubectl get pods -l job-name=job-para-demo -w

查看job的完成状态
^C[root@K8s-master01 chapter8]#kubectl get job
NAME            COMPLETIONS   DURATION   AGE
job-demo        3/3           75s        23m
job-para-demo   7/7           61s        4m32s

CronJob

CronJob控制器用于管理Job资源的运行时间,它允许用户在特定的时间或以指定的间隔运行Job

CronJob控制器的功能类似于linux操作系统的周期性任务作业计划(crontab),用于控制作业运行的时
间点及周期性运行的方式:

   ◼ 仅在未来某时间点将指定的作业运行一次
   ◼ 在指定的周期性时间点重复运行指定的作业

CronJob资源也是标准的API资源类型
注意:
   ◼ 在CronJob中,通配符“?”和“*”的意义相同,它们都表示任何可用的有效值
   
   
apiVersion: batch/v1            #API群组及版本;
kind: CronJob                   #资源类型特有标识; 
metadata:
  name <string>                 #资源名称,在作用域中要惟一;
  namespace <string>            #名称空间;CronJob资源隶属名称空间级别;
spec:
  jobTemplate <Object>          #job作业模板,必选字段;
    metadata <object>           #模板元数据;
    spec <object>               #作业的期望状态;
  schedule <string>             #调度时间设定,必选字段;
  concurrencyPolicy <string>    #并发策略,可用值有Allow、Forbid和Replace;
  failedJobsHistoryLimit <integer>     #失败作业的历史记录数,默认为1;
  successfulJobsHistoryLimit <integer> #成功作业的历史记录数,默认为3;
  startingDeadlineSeconds <integer>    #因错过时间点而未执行的作业的可超期时长;
  suspend <boolean>                    #是否挂起后续的作业,不影响当前作业,默认为false
  
#concurrencyPolicy <string>    #并发策略,可用值有Allow、Forbid和Replace;
Allow:前边作业已启动还没退出,后面的作业开始执行了,允许两个作业同时存在
Forbid:前边作业已启动还没退出,后面的作业开始执行了,不允许两个作业同时存在
Replace:前边作业已启动还没退出,后面的作业开始执行了,后面的作业替换前面的作业
实际案例
[root@K8s-master01 chapter8]#cat cronjob-demo.yaml 
apiVersion: batch/v1
kind: CronJob
metadata:
  name: cronjob-demo
  namespace: default
spec:
  schedule: "*/2 * * * *"
  jobTemplate:
    metadata:
      labels:
        controller: cronjob-demo
    spec:
      parallelism: 2
      completions: 2
      ttlSecondsAfterFinished: 600
      backoffLimit: 3
      activeDeadlineSeconds: 60
      template:
        spec:
          containers:
          - name: myjob
            image: ikubernetes/admin-box:v1.2
            command:
            - /bin/sh
            - -c
            - date; echo Hello from CronJob, sleep a while...; sleep 10
          restartPolicy: OnFailure
  startingDeadlineSeconds: 300
  
运行pod
[root@K8s-master01 chapter8]#kubectl apply -f cronjob-demo.yaml 
cronjob.batch/cronjob-demo created
查看cronjob
[root@K8s-master01 chapter8]#kubectl get cronjob
NAME           SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
cronjob-demo   */2 * * * *   False     0        64s             76s

删除时间计划任务
[root@K8s-master01 chapter8]#kubectl get cronjob
NAME           SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
cronjob-demo   */2 * * * *   False     0        28s             4m40s
[root@K8s-master01 chapter8]#kubectl delete cronjob cronjob-demo
cronjob.batch "cronjob-demo" deleted

标签:CronJob,12,name,cronjob,demo,作业,Job,job
From: https://blog.51cto.com/lmm01/7005684

相关文章

  • Siemens 西门子S7-1200 PLC模拟量控制变频器
    一、任务目标该任务是关于西门子1200PLC模拟量应用案例。西门子S7-1200PLC的模拟量功能可以控制电动阀、变频器等外部设备,也可以采集传感器的温度、压力、液位、流量等。本任务主要使用的是模拟量控制台达变频器从而控制电机的转速。二、任务描述某设备厂,需要对设备进行散......
  • F5 LTM 知识点和实验 12-使用规则和本地流量策略定制应用程序交付
    第十一章:iapp(忽略)第十二章:使用规则和本地流量策略定制应用程序交付用最简单的术语来说,iRule是在网络流量通过BIGIP系统时对其执行的脚本。其思想非常简单:规则使您能够编写简单的网络感知代码片段,这些代码以各种方式影响您的网络流量。无论您是希望以BIG-IP内置选项中目前无法提......
  • 微信小程序12 跳转,跳转时传参
    我们正常操作的话,肯定有很多页面之间的跳转,在微信小程序中navigator,跳转效果类似html中的a标签<navigatorurl="/pages/index/index">跳转到index</navigator>注意参数url指向要跳转的页面,本地跳转的话基本就是/pages/文件夹/文件名,没有后缀。这样点击标签后就会跳转......
  • AP5126 DC-DC降压恒流 LED摩托电动汽车灯IC 同款LN2576/LN2556
    产品描述 AP5126是一款PWM工作模式,高效率、外围简单、内置功率管,适用于12-80V输入的高精度降压LED恒流驱动芯片。输出最大功率可达15W,最大电流1.2A。AP5126可实现全亮/半亮功能切换,通过MODE切换:全亮/半亮/循环模式。AP5126工作频率固定在140KHZ,同时内置抖频电......
  • Airflow 2.2.6 + MySQL 8.0.27 + Redis 7.0.12 部署Airflow任务调度平台
    本docker-compose文件在centos7.9系统,docker版本为24.0.2上测试的如果你的docker版本低于24.xxx就需要手动安装docker-compose,高于24就不需要安装了,docker已经自带了官方文档,关于docker部署1.先执行mkdir-p./dags./logs./plugins./config./......
  • 取数游戏 Atcoder-abc128_d
    枚举两端取了几个数,将手中的负数从小到大放回序列即可#include<bits/stdc++.h>usingnamespacestd;intn,m,a[55],c[55],ans=-0x7fffffff;intmain(){scanf("%d%d",&n,&m);for(inti=1;i<=n;i++)scanf("%d",&a[i]);f......
  • 12ESB企业服务总线
    ESB是联通各个系统、消除信息孤岛的一种服务。它支持多种功能:提供位置透明性的消息路由和寻址服务:通信的时候不需要知道对方地址,只需要将信息上传到总线。提供服务注册和命名的管理功能:支持多种的消息传递范式:支持多种可以广泛使用的传输协议:支持多种数据格式及其相互转换:......
  • Siemens 西门子S7-1200 PLC模拟量控制变频器
    一、任务目标该任务是关于西门子1200PLC模拟量应用案例。西门子S7-1200PLC的模拟量功能可以控制电动阀、变频器等外部设备,也可以采集传感器的温度、压力、液位、流量等。本任务主要使用的是模拟量控制台达变频器从而控制电机的转速。二、任务描述某设备厂,需要对设备进行散......
  • Siemens 西门子S7-1200 PID功能组态
    在我们实际工作经常会用到PID控制系统,比如控制恒压供水设备,恒温加热设备等。这些设备使用PLC进行控制时,不仅仅需要编程,还需要设置相关参数(或者说组态)。只有正确设置了相关参数之后,程序编写的才有意义。那么今天我们以西门子1200PLC为例,给大家讲讲如何组态PID功能。在组态......
  • AMD cpus在VM虚拟机安装macOS10.15和12教程一
    本教程采用软件为vmwareworkstation17pro,操作系统win10,CPU为5600G,macOS10.15或者macOS12VM虚拟机的下载和安装这里不阐述,大家可以百度一下macos13在上述环境下安装后会提示错误,macOS14beta暂时不支持安装,所以13-14可以暂时放弃macOS的下载请百度一下就有了~记得下载带引导......