k8s中批量处理Pod应用的Job和CronJob控制器介绍

news2025/1/23 15:06:15

目录

一.Job控制器

1.简介

2.Jobs较完整解释

3.示例演示

4.注意:如上例的话,执行“kubectl delete -f myJob.yaml”就可以将job删掉

二.CronJob(简写为cj)

1.简介

2.CronJob较完整解释

3.案例演示

4.如上例的话,执行“kubectl delete -f myCronJob.yaml”就可以将cj删掉,jobs一并被删除


 

一.Job控制器

1.简介

他主要是用于批量地去执行一次性任务,确保在pod上让指定的任务能够正确完成,我们可以在配置中指定期望其完成的数量,执行成功后会记录下成功的数量,执行完成后pod会标识为completed(该pod的主进程已经完成并退出)。

2.Jobs较完整解释

截取至edit Jobs的spec部分

spec:
  backoffLimit: 6   #执行失败后的重试次数,不指定就默认6
  completionMode: NonIndexed
  completions: 18  #期望job成功运行的数量,不指定就默认为1
  manualSelector: true   #是否可以使用selector选择器,不指定就默认false那么将无法应用selector部分
  parallelism: 6   #job执行的并发数量,不指定的话默认1
  selector:
    matchLabels:
      app: job-pod
  suspend: false
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: job-pod
    spec:
      containers:
      - command:
        - /bin/sh
        - -c
        - for i in [1..10];do /bin/echo $i;sleep 2; done;
        image: busybox
        imagePullPolicy: Always
        name: my-job-container
        resources: {}
        terminationMessagePath: /dev/termination-log  #这些参数之前介绍过
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Never
      #这里的重启策略算是比较特殊的,尤其注意这里template.spec的restartPolicy会覆盖模板外设置的restartPolicy
      #若为Never,pod出现故障时job会创建新的pod,故障pod不消失,且不重启,failed次数加1。
      #若为OnFailure,pod出现故障时job会重启容器,不创建pod,failed次数不变。
      #若为Always,一直重启,job就会重复执行,不使用。
置为Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

3.示例演示

这里创建一个Job,执行指定遍历命令,期望运行成功18个pod,每次并发运行6个pod。最后可以观察到是运行了18个pod,pod的最后状态也变为Completed。

[root@k8s-master pod]# cat myJob.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: my-job
  namespace: myns
spec:
  completions: 18
  parallelism: 6
  manualSelector: true
  selector:
    matchLabels:
      app: job-pod
  template:
    metadata:
      labels:
        app: job-pod
    spec:
      restartPolicy: Never
      containers:
      - name: my-job-container
        image: busybox
        command: ["/bin/sh","-c","for i in [1..10];do /bin/echo $i;sleep 2; done;"]
​
[root@k8s-master pod]# kubectl apply -f myJob.yaml
job.batch/my-job created
[root@k8s-master pod]# kubectl get pods -n myns -w
NAME           READY   STATUS              RESTARTS   AGE
my-job-b6s8s   0/1     ContainerCreating   0          2s
my-job-jc4zz   0/1     ContainerCreating   0          2s
my-job-kts5m   0/1     ContainerCreating   0          2s
my-job-ppltd   0/1     ContainerCreating   0          2s
my-job-shn8q   0/1     ContainerCreating   0          2s
my-job-zb757   0/1     ContainerCreating   0          2s
my-job-kts5m   0/1     ContainerCreating   0          2s
my-job-shn8q   0/1     ContainerCreating   0          2s
my-job-ppltd   0/1     ContainerCreating   0          2s
my-job-jc4zz   1/1     Running             0          5s
my-job-kts5m   1/1     Running             0          6s
my-job-jc4zz   0/1     Completed           0          7s
my-job-zb757   1/1     Running             0          8s
my-job-jc4zz   0/1     Completed           0          8s
my-job-jc4zz   0/1     Completed           0          8s
my-job-kts5m   0/1     Completed           0          8s
my-job-jc4zz   0/1     Completed           0          9s
my-job-2zl7z   0/1     Pending             0          0s
my-job-2zl7z   0/1     Pending             0          0s
my-job-jc4zz   0/1     Completed           0          9s
my-job-2zl7z   0/1     ContainerCreating   0          0s
my-job-shn8q   1/1     Running             0          9s
my-job-kts5m   0/1     Completed           0          9s
my-job-2zl7z   0/1     ContainerCreating   0          0s
my-job-kts5m   0/1     Completed           0          9s
my-job-zb757   0/1     Completed           0          10s
my-job-52mf9   0/1     Pending             0          0s
my-job-52mf9   0/1     Pending             0          0s
my-job-kts5m   0/1     Completed           0          10s
my-job-52mf9   0/1     ContainerCreating   0          0s
my-job-kts5m   0/1     Completed           0          10s
my-job-52mf9   0/1     ContainerCreating   0          0s
my-job-b6s8s   1/1     Running             0          11s
my-job-zb757   0/1     Completed           0          11s
my-job-zb757   0/1     Completed           0          11s
my-job-shn8q   0/1     Completed           0          11s
my-job-zb757   0/1     Completed           0          12s
my-job-ftzpl   0/1     Pending             0          0s
my-job-ftzpl   0/1     Pending             0          0s
my-job-zb757   0/1     Completed           0          12s
my-job-ftzpl   0/1     ContainerCreating   0          0s
my-job-ppltd   1/1     Running             0          12s
my-job-shn8q   0/1     Completed           0          12s
my-job-ftzpl   0/1     ContainerCreating   0          0s
my-job-shn8q   0/1     Completed           0          12s
my-job-b6s8s   0/1     Completed           0          13s
my-job-8hf4n   0/1     Pending             0          0s
my-job-8hf4n   0/1     Pending             0          0s
my-job-shn8q   0/1     Completed           0          13s
my-job-8hf4n   0/1     ContainerCreating   0          0s
my-job-shn8q   0/1     Completed           0          13s
my-job-8hf4n   0/1     ContainerCreating   0          0s
my-job-2zl7z   1/1     Running             0          5s
my-job-b6s8s   0/1     Completed           0          14s
my-job-b6s8s   0/1     Completed           0          14s
my-job-ppltd   0/1     Completed           0          14s
my-job-pxndz   0/1     Pending             0          0s
my-job-b6s8s   0/1     Completed           0          15s
my-job-pxndz   0/1     Pending             0          0s
my-job-b6s8s   0/1     Completed           0          15s
my-job-pxndz   0/1     ContainerCreating   0          0s
my-job-52mf9   1/1     Running             0          5s
my-job-ppltd   0/1     Completed           0          15s
my-job-pxndz   0/1     ContainerCreating   0          0s
my-job-ppltd   0/1     Completed           0          15s
my-job-6tdqn   0/1     Pending             0          0s
my-job-2zl7z   0/1     Completed           0          7s
my-job-6tdqn   0/1     Pending             0          0s
my-job-ppltd   0/1     Completed           0          16s
my-job-6tdqn   0/1     ContainerCreating   0          0s
my-job-ppltd   0/1     Completed           0          16s
my-job-6tdqn   0/1     ContainerCreating   0          0s
my-job-ftzpl   1/1     Running             0          5s
my-job-2zl7z   0/1     Completed           0          8s
my-job-2zl7z   0/1     Completed           0          8s
my-job-52mf9   0/1     Completed           0          7s
my-job-2zl7z   0/1     Completed           0          9s
my-job-cxfmh   0/1     Pending             0          0s
my-job-cxfmh   0/1     Pending             0          0s
my-job-2zl7z   0/1     Completed           0          9s
my-job-cxfmh   0/1     ContainerCreating   0          0s
my-job-8hf4n   1/1     Running             0          5s
my-job-52mf9   0/1     Completed           0          8s
my-job-cxfmh   0/1     ContainerCreating   0          0s
my-job-52mf9   0/1     Completed           0          8s
my-job-ftzpl   0/1     Completed           0          7s
my-job-4zg6h   0/1     Pending             0          0s
my-job-4zg6h   0/1     Pending             0          0s
my-job-52mf9   0/1     Completed           0          9s
my-job-4zg6h   0/1     ContainerCreating   0          0s
my-job-52mf9   0/1     Completed           0          9s
my-job-4zg6h   0/1     ContainerCreating   0          0s
my-job-pxndz   1/1     Running             0          5s
my-job-ftzpl   0/1     Completed           0          8s
my-job-ftzpl   0/1     Completed           0          8s
my-job-8hf4n   0/1     Completed           0          7s
my-job-ftzpl   0/1     Completed           0          9s
my-job-5spg7   0/1     Pending             0          0s
my-job-5spg7   0/1     Pending             0          0s
my-job-ftzpl   0/1     Completed           0          9s
my-job-5spg7   0/1     ContainerCreating   0          0s
my-job-6tdqn   1/1     Running             0          5s
my-job-8hf4n   0/1     Completed           0          8s
my-job-5spg7   0/1     ContainerCreating   0          0s
my-job-8hf4n   0/1     Completed           0          8s
my-job-pxndz   0/1     Completed           0          7s
my-job-dr2mp   0/1     Pending             0          0s
my-job-dr2mp   0/1     Pending             0          0s
my-job-8hf4n   0/1     Completed           0          9s
my-job-dr2mp   0/1     ContainerCreating   0          0s
my-job-8hf4n   0/1     Completed           0          9s
my-job-dr2mp   0/1     ContainerCreating   0          0s
my-job-cxfmh   1/1     Running             0          5s
my-job-pxndz   0/1     Completed           0          8s
my-job-pxndz   0/1     Completed           0          8s
my-job-6tdqn   0/1     Completed           0          7s
my-job-pxndz   0/1     Completed           0          9s
my-job-7wjqq   0/1     Pending             0          0s
my-job-7wjqq   0/1     Pending             0          0s
my-job-pxndz   0/1     Completed           0          9s
my-job-7wjqq   0/1     ContainerCreating   0          0s
my-job-4zg6h   1/1     Running             0          5s
my-job-6tdqn   0/1     Completed           0          8s
my-job-7wjqq   0/1     ContainerCreating   0          0s
my-job-6tdqn   0/1     Completed           0          8s
my-job-cxfmh   0/1     Completed           0          7s
my-job-cz8f4   0/1     Pending             0          0s
my-job-cz8f4   0/1     Pending             0          0s
my-job-6tdqn   0/1     Completed           0          9s
my-job-cz8f4   0/1     ContainerCreating   0          0s
my-job-6tdqn   0/1     Completed           0          9s
my-job-cz8f4   0/1     ContainerCreating   0          0s
my-job-5spg7   1/1     Running             0          5s
my-job-cxfmh   0/1     Completed           0          8s
my-job-cxfmh   0/1     Completed           0          8s
my-job-4zg6h   0/1     Completed           0          7s
my-job-cxfmh   0/1     Completed           0          9s
my-job-cxfmh   0/1     Completed           0          9s
my-job-4zg6h   0/1     Completed           0          8s
my-job-4zg6h   0/1     Completed           0          8s
my-job-5spg7   0/1     Completed           0          7s
my-job-4zg6h   0/1     Completed           0          9s
my-job-4zg6h   0/1     Completed           0          9s
my-job-dr2mp   1/1     Running             0          6s
my-job-7wjqq   1/1     Running             0          5s
my-job-5spg7   0/1     Completed           0          8s
my-job-5spg7   0/1     Completed           0          8s
my-job-5spg7   0/1     Completed           0          9s
my-job-5spg7   0/1     Completed           0          9s
my-job-dr2mp   0/1     Completed           0          8s
my-job-7wjqq   0/1     Completed           0          7s
my-job-cz8f4   1/1     Running             0          6s
my-job-dr2mp   0/1     Completed           0          9s
my-job-dr2mp   0/1     Completed           0          9s
my-job-dr2mp   0/1     Completed           0          10s
my-job-7wjqq   0/1     Completed           0          8s
my-job-7wjqq   0/1     Completed           0          8s
my-job-dr2mp   0/1     Completed           0          10s
my-job-7wjqq   0/1     Completed           0          9s
my-job-7wjqq   0/1     Completed           0          9s
my-job-cz8f4   0/1     Completed           0          8s
my-job-cz8f4   0/1     Completed           0          9s
my-job-cz8f4   0/1     Completed           0          9s
my-job-cz8f4   0/1     Completed           0          10s
my-job-cz8f4   0/1     Completed           0          10s
​
[root@k8s-master pod]# kubectl get Jobs -n myns
NAME     COMPLETIONS   DURATION   AGE
my-job   18/18         35s        4m15s

4.注意:如上例的话,执行“kubectl delete -f myJob.yaml”就可以将job删掉

二.CronJob(简写为cj)

1.简介

他是在借助Job的情况下,按照指定的时间节点去循环重复执行任务。在 CronJob 对象中定义时间表(schedule),该时间表指定了作业运行的时间间隔或特定的运行时间。CronJob 控制器会定期检查时间表,如果当前时间匹配时间表中定义的时间,则创建一个新的 Job 对象,其中包含要执行的任务(如容器镜像、命令、参数等)。

当 Job 对象创建后,k8s会自动将其调度到可用节点上进行运行,并自动管理作业的生命周期,包括启动、监控、重试和清理等操作。执行成功后pod会被表示为completed(该pod的主进程已经完成并退出)。

2.CronJob较完整解释

截取自edit cj的spec部分

spec:
  schedule: '*/1 * * * *'   #这里是为任务定义时间,分时日月周的顺序书写,控制任务再什么时候执行,如果这里需要指定多个时间时可以用逗号隔开
  startingDeadlineSeconds: 300   #同jobs解释
  successfulJobsHistoryLimit: 3   #同jobs解释
  suspend: false
  concurrencyPolicy: Allow  
  #并发执行策略,用于定义前一次作业运行尚未完成时是否以及如何运行后一次的作业
  #默认Allow,允许jobs并发运行
  #Forbid,禁止并发运行,上一次的运行失败会跳过下一次运行
  #Replace,用新定时任务区替换旧任务的执行
  failedJobsHistoryLimit: 1   #同jobs
  jobTemplate:   #定义job的控制模板,在pod模板外面嵌套一个对job的模板定义,为cronjob控制器生成jobs
    metadata:
      creationTimestamp: null
    spec:
      completions: 3  #这里就是jobs的定义了
      parallelism: 1
      template:
        metadata:
          creationTimestamp: null
        spec:
          containers:
          - command:
            - /bin/sh
            - -c
            - for i in [1..10]; do /bin/echo $i;sleep 2; done;
            image: busybox
            imagePullPolicy: Always
            name: my-cronjob-container
            resources: {}
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Never
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30

格式类似于Linux上的这个定时任务(分时日月周),周表示一周中的第几天,可填值如图示

649b26e6e7a14ae28e9fdccd7a1cc35d.png

3.案例演示

这里我们创建一个Cronjob,每隔一分钟(只是为了测试效果)执行指定的遍历任务,记录jobs的成功次数。最后结果可以观察jobs的创建时间(25s-85s-2m25s),确实是按照每分钟执行一次

[root@k8s-master pod]# cat myCronJob.yaml 
apiVersion: batch/v1
kind: CronJob
metadata:
  name: my-cronjob
  namespace: myns
spec:
  schedule: "*/1 * * * *"
  startingDeadlineSeconds: 300
  jobTemplate:
    metadata:
    spec:
      completions: 3
      parallelism: 1
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: my-cronjob-container
            image: busybox
            command: ["/bin/sh","-c","for i in [1..10]; do /bin/echo $i;sleep 2; done;"]
​
[root@k8s-master pod]# kubectl get cj -n myns
NAME         SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
my-cronjob   */1 * * * *   False     0        53s             3m9s
​
[root@k8s-master pod]# kubectl get jobs -n myns   
NAME                  COMPLETIONS   DURATION   AGE
my-cronjob-28354471   3/3           24s        2m25s
my-cronjob-28354472   3/3           24s        85s
my-cronjob-28354473   3/3           23s        25s

4.如上例的话,执行“kubectl delete -f myCronJob.yaml”就可以将cj删掉,jobs一并被删除

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1268381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】常用内置函数:数值函数 / 字符串函数 / 日期函数 / 其他函数

文章目录 数值函数round():四舍五入ceiling():上限函数floor():地板函数abs():计算绝对值rand():生成0-1的随机浮点数 字符串函数length():获取字符串中的字符数upper() / lower():将字符串转化…

使用Ray创建高效的深度学习数据管道

大家好,用于训练深度学习模型的GPU功能强大但价格昂贵。为了有效利用GPU,开发者需要一个高效的数据管道,以便在GPU准备好计算下一个训练步骤时尽快将数据传输到GPU,使用Ray可以大大提高数据管道的效率。 1.训练数据管道的结构 首…

优化邮件群发效果的方法与策略

怎样优化邮件群发效果?这是许多企业在进行邮件营销时常常被问到的问题。邮件营销是一种高效且经济实惠的市场推广方式,但如何使邮件真正引起接收者的兴趣并产生预期的效果并不容易。好的营销效果可以带来高回报、高收益率,但是怎么提升群发效…

工会排队奖励模式:创新营销策略,实现共赢局面

在当今的商业环境中,创新营销策略的重要性日益凸显。工会排队奖励模式作为一种新型的营销策略,旨在通过结合线上和线下消费,激励消费者购买产品或服务,并获得返现奖励。这种模式通过将消费者的支出和商家的抽成资金纳入奖金池&…

CSS3样式详解之圆角、阴影及变形

目录 前言一、圆角样式(border-radius)二、元素阴影(box-shadow)三、过渡动画样式(transition)1. transition-property(用于设置属性名称)2. transition-duration(设置时间)3. trans…

7、信息收集(2)

文章目录 一、指纹识别1、Nmap工具2、Wafw00f工具 二、使用Maltego进行情报收集 一、指纹识别 1、Nmap工具 命令一&#xff1a;nmap -sS -sV <ip>&#xff0c;使用TCP SYN的方式&#xff0c;扫描目标主机上常规端口运行的服务版本。 -sS&#xff1a;指定使用TCP SYN的方…

注解(概念、分类、自定义注解)

注解基本概念 注解(元数据)为我们在代码中添加信息提供一种形式化的方法&#xff0c;我们可以在某个时刻非常方便的使用这些数据。将的通俗一点&#xff0c;就是为这个方法增加的说明或功能。 作用&#xff1a; 编写文档&#xff1a;通过代码里标识的注解生成文档【生成doc文…

常使用的定时任务

常使用的定时任务 一、 linux自带的定时任务 1、crontab 有这样一个需求&#xff1a;我们使用Java写一个工具jar包在系统空闲的时候去采集已经部署在Linux系统上的项目的一 些数据&#xff0c;可以使用 linux 系统的 crontab。 运行crontab -e&#xff0c;可以编辑定时器&…

git stash save untracked not staged

git stash save untracked not staged 如图 解决方案&#xff1a; git stash save "tag标记信息" --include-untracked或者&#xff1a; git stash save -u "tag标记信息" git stash clear清空本地暂存代码_zhangphil的博客-CSDN博客文章浏览阅读486次。…

合阔智云:实现API无代码开发,连接ERP系统和CRM系统提高运营效率

概述 合阔智云&#xff0c;一家成立于2011年的科技公司&#xff0c;核心业务是提供云原生和移动化设计的新一代全渠道“云端一体”履约中台和去中心化模式智能门店供应链业务中台。他们的系统可以无需API开发即可实现电商系统和客服系统的连接和集成&#xff0c;大大提高了企业…

通过python脚本上传本地/远程服务器文件到minio

前言 将文件上传到MinIO对象存储后&#xff0c;MinIO会将文件存储为对象(.meta文件)&#xff0c;并为每个对象生成相应的元数据。元数据是描述对象的属性和信息的数据。 通常&#xff0c;元数据包括对象的名称、大小、创建日期等。 在MinIO中&#xff0c;对象的元数据存储在独立…

振南技术干货集:各大平台串口调试软件大赏(1)

注解目录 &#xff08;串口的重要性不言而喻。为什么很多平台把串口称为 tty&#xff0c;比如 Linux、MacOS 等等&#xff0c;振南告诉你。&#xff09; 1、各平台上的串口调试软件 1.1Windows 1.1.1 STCISP &#xff08;感谢 STC 姚老板设计出 STCISP 这个软件。&#xf…

FPGA程序执行相关知识点

1.目前&#xff0c;大多数FPGA芯片是基于 SRAM 的结构的&#xff0c; 而 SRAM 单元中的数据掉电就会丢失&#xff0c;因此系统上电后&#xff0c;必须要由配置电路将正确的配置数据加载到 SRAM 中&#xff0c;此后 FPGA 才能够正常的运行。 常见的配置芯片有EPCS 芯片 &#x…

基于傅里叶变换的运动模糊图像恢复算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、傅里叶变换与图像恢复 4.2、基于傅里叶变换的运动模糊图像恢复算法原理 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 %获取角度 img…

[密码学]DES

先声明两个基本概念 代换&#xff08;substitution&#xff09;,用别的元素代替当前元素。des的s-box遵循这一设计。 abc-->def 置换&#xff08;permutation&#xff09;&#xff0c;只改变元素的排列顺序。des的p-box遵循这一设计。 abc-->bac DES最核心的算法就是…

从零搭建AlibabaCloud微服务项目

1&#xff0c;创建maven项目工程如下 equipment-admin 后台equipment-applet 前台或小程序端或app、h5equipment-common 公共模块equipment-gateway 网关equipment-mapper mapper层操作数据库equipment-model 实体类对应数据库表 2&#xff0c;在父pom文件引入依赖 <proper…

找不到 sun.misc.BASE64Decoder ,sun.misc.BASE64Encoder 类

找不到 sun.misc.BASE64Decoder &#xff0c;sun.misc.BASE64Encoder 类 1. 现象 idea 引用报错 找不到对应的包 import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder;2. 原因 因为sun.misc.BASE64Decoder和sun.misc.BASE64Encoder是Java的内部API&#xff0c;通…

二叉树OJ题之二

今天我们一起来看一道判断一棵树是否为对称二叉树的题&#xff0c;力扣101题&#xff0c; https://leetcode.cn/problems/symmetric-tree/ 我们首先先来分析这道题&#xff0c;要判断这道题是否对称&#xff0c;我们首先需要判断的是这颗树根节点的左右子树是否对称&#xff0…

qt-C++笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题

qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和异步循环解决相互阻塞的问题 code review! 文章目录 qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和异步循环解决相互阻塞的问题1.Qt的app.exec()详解2.ros::spin()详解3.ros::AsyncSpinner详解4.主线程中结合使用的示…

图面试专题

一、概念 和二叉树的区别&#xff1a;图可能有环 常见概念 顶点&#xff08;Vertex&#xff09;&#xff1a; 图中的节点或点。边&#xff08;Edge&#xff09;&#xff1a; 顶点之间的连接线&#xff0c;描述节点之间的关系。有向图&#xff08;Directed Graph&#xff09;&…