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

目录

一.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   #执行失败后的重试次数,不指定就默认6completionMode: NonIndexedcompletions: 18  #期望job成功运行的数量,不指定就默认为1manualSelector: true   #是否可以使用selector选择器,不指定就默认false那么将无法应用selector部分parallelism: 6   #job执行的并发数量,不指定的话默认1selector:matchLabels:app: job-podsuspend: falsetemplate:metadata:creationTimestamp: nulllabels:app: job-podspec:containers:- command:- /bin/sh- -c- for i in [1..10];do /bin/echo $i;sleep 2; done;image: busyboximagePullPolicy: Alwaysname: my-job-containerresources: {}terminationMessagePath: /dev/termination-log  #这些参数之前介绍过terminationMessagePolicy: FilednsPolicy: ClusterFirstrestartPolicy: Never#这里的重启策略算是比较特殊的,尤其注意这里template.spec的restartPolicy会覆盖模板外设置的restartPolicy#若为Never,pod出现故障时job会创建新的pod,故障pod不消失,且不重启,failed次数加1。#若为OnFailure,pod出现故障时job会重启容器,不创建pod,failed次数不变。#若为Always,一直重启,job就会重复执行,不使用。
置为AlwaysschedulerName: default-schedulersecurityContext: {}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-jobnamespace: myns
spec:completions: 18parallelism: 6manualSelector: trueselector:matchLabels:app: job-podtemplate:metadata:labels:app: job-podspec:restartPolicy: Nevercontainers:- name: my-job-containerimage: busyboxcommand: ["/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: falseconcurrencyPolicy: Allow  #并发执行策略,用于定义前一次作业运行尚未完成时是否以及如何运行后一次的作业#默认Allow,允许jobs并发运行#Forbid,禁止并发运行,上一次的运行失败会跳过下一次运行#Replace,用新定时任务区替换旧任务的执行failedJobsHistoryLimit: 1   #同jobsjobTemplate:   #定义job的控制模板,在pod模板外面嵌套一个对job的模板定义,为cronjob控制器生成jobsmetadata:creationTimestamp: nullspec:completions: 3  #这里就是jobs的定义了parallelism: 1template:metadata:creationTimestamp: nullspec:containers:- command:- /bin/sh- -c- for i in [1..10]; do /bin/echo $i;sleep 2; done;image: busyboximagePullPolicy: Alwaysname: my-cronjob-containerresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstrestartPolicy: NeverschedulerName: default-schedulersecurityContext: {}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-cronjobnamespace: myns
spec:schedule: "*/1 * * * *"startingDeadlineSeconds: 300jobTemplate:metadata:spec:completions: 3parallelism: 1template:spec:restartPolicy: Nevercontainers:- name: my-cronjob-containerimage: busyboxcommand: ["/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.rhkb.cn/news/205443.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#,《小白学程序》第三课:类class,类的数组及类数组的排序

类class把数值与功能巧妙的进行了结合&#xff0c;是编程技术的主要进步。 下面的程序你可以确立 分数 与 姓名 之间关系&#xff0c;并排序。 1 文本格式 /// <summary> /// 同学信息类 /// </summary> public class Classmate { /// <summary> /…

注册Zoho Mail邮箱:优势与使用体验

如何注册Zoho Mail邮箱&#xff1f;要注册Zoho Mail邮箱&#xff0c;首先打开浏览器&#xff0c;访问Zoho Mail官网&#xff0c;点击页面右上角的“创建帐户”按钮。接下来&#xff0c;按照提示输入你的姓名、生日和性别&#xff0c;以及一个有效的手机号码或电子邮件地址。然后…

20231122给RK3399的挖掘机开发板适配Android12

20231122给RK3399的挖掘机开发板适配Android12 2023/11/22 9:30 主要步骤&#xff1a; rootrootrootroot-X99-Turbo:~$ tar --use-compress-programpigz -xvpf rk356x_android12_220722.tgz rootrootrootroot-X99-Turbo:~$ cd rk_android12_220722/ rootrootrootroot-X99-Tur…

【学习记录】从0开始的Linux学习之旅——驱动模块编译与加载

一、概述 Linux操作系统通常是基于Linux内核&#xff0c;并结合GNU项目中的工具和应用程序而成。Linux操作系统支持多用户、多任务和多线程&#xff0c;具有强大的网络功能和良好的兼容性。本文主要讲述如何编译及加载linux驱动模块。 二、概念及原理 应用程序通过系统调用与内…

(二)基于高尔夫优化算法GOA求解无人机三维路径规划研究(MATLAB)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、高尔夫优化算法GOA简介 高尔夫优化算法…

PHP 双门双向门禁控制板实时监控源码

本示例使用设备&#xff1a; 实时网络双门双向门禁控制板可二次编程控制网络继电器远程开关-淘宝网 (taobao.com) <?PHPheader("content-type:text/html;charsetGBK");$ThisIpget_local_ip(); //获取电脑IP地址 $server udp://.$ThisIp.:39192; $sock…

【JavaEE初阶】 HTTP响应报文

文章目录 &#x1f332;序言&#x1f38d;200 OK&#x1f340;404 Not Found&#x1f384;403 Forbidden&#x1f334;405 Method Not Allowed&#x1f38b;500 Internal Server Error&#x1f333;504 Gateway Timeout&#x1f332;302 Move temporarily&#x1f38d;301 Move…

构建智能医患沟通:陪诊小程序开发实战

在医疗科技的浪潮中&#xff0c;陪诊小程序的开发成为改善医患沟通的创新途径之一。本文将介绍如何使用Node.js和Express框架构建一个简单而强大的陪诊小程序&#xff0c;实现患者导诊和医生咨询功能。 1. 安装Node.js和Express 首先确保已安装Node.js&#xff0c;然后使用以…

【机器学习 | 可视化】回归可视化方案

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

【微服务】SaaS云智慧工地管理平台源码

智慧工地系统是一种利用人工智能和物联网技术来监测和管理建筑工地的系统。它可以通过感知设备、数据处理和分析、智能控制等技术手段&#xff0c;实现对工地施工、设备状态、人员安全等方面的实时监控和管理。 一、智慧工地让工程施工智能化 1、内容全面&#xff0c;多维度数…

Docker快速搭建RTMP服务(tiangolo/nginx-rtmp:Docker + Nginx+ nginx-rtmp-module)

Linux Docker快速搭建多媒体/视频流的 RTMP 服务 第一步 安装Docker 点击这里查看 第二步 拉取并运行镜像 tiangolo/nginx-rtmp/ docker pull tiangolo/nginx-rtmp docker run -d -p 1935:1935 --name nginx-rtmp tiangolo/nginx-rtmpOBS客户端测试 OBS客户端设置直播的推…

Go——二、变量和数据类型

Go 一、Go语言中的变量和常量1、Go语言中变量的声明2、如何定义变量方式1&#xff1a;方式2&#xff1a;带类型方式3&#xff1a;类型推导方式定义变量方式4&#xff1a;声明多个变量总结 3、如何定义常量4、Const常量结合iota的使用 二、Golang的数据类型1、概述2、整型2.1 类…

LeetCode Hot100 124.二叉树中的最大路径和

题目&#xff1a; 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点…

Linux基本指令总结(二)

1.man指令&#xff08;重要&#xff09; Linux的命令有很多参数&#xff0c;我们不可能全记住&#xff0c;我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是 man 语法: man [选项] 命令 man指令就相当于一个精通linux的专家&#xff0c;你要查询的指令或者函数&…

linux的netstat命令和ss命令

1. 网络状态 State状态LISTENING监听中&#xff0c;服务端需要打开一个socket进行监听&#xff0c;侦听来自远方TCP端口的连接请求ESTABLISHED已连接&#xff0c;代表一个打开的连接&#xff0c;双方可以进行或已经在数据交互了SYN_SENT客户端通过应用程序调用connect发送一个…

【开源】基于Vue和SpringBoot的企业项目合同信息系统

项目编号&#xff1a; S 046 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S046&#xff0c;文末获取源码。} 项目编号&#xff1a;S046&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合…

运维 | 四层和七层负载均衡介绍

关注: CodingTechWork 负载均衡 负载均衡介绍 概念 负载均衡是建立在现有的网络结构之上&#xff0c;提供一种廉价且透明的方式进行网络设备和服务器带宽的扩展&#xff0c;从而增加吞吐量&#xff0c;加强应用服务的数据处理能力&#xff0c;有效提高网络的灵活性和可用性。…

找不到 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;通…

矩阵快速幂及应用实战[C/C++]

矩阵快速幂 矩阵快速幂可以用来优化递推问题&#xff0c;如状态机DP&#xff0c;需要一丢丢线性代数里面矩阵的概念&#xff0c;只需要知道简单的矩阵乘法&#xff0c;结合我们普通的二分快速幂就能很快的掌握矩阵快速幂。 问题引入 三步问题。有个小孩正在上楼梯&#xff0c;楼…

【海思SS528 | VDEC】MPP媒体处理软件V5.0 | VDEC的使用总结

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…