k8s中批量处理Pod应用的Job和CronJob控制器、处理守护型pod的DaemonSet控制器介绍

本文主要是介绍k8s中批量处理Pod应用的Job和CronJob控制器、处理守护型pod的DaemonSet控制器介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一.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一并被删除

三.DaemonSet(简写ds)

1.简介

2.DaemonSet较完整解释

3.案例演示

4.注意:如上例的话使用“kubectl delete -f myds.yaml ”就可以撒谎从南湖ds,其中的pod也会跟着被删除


 

一.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一并被删除

三.DaemonSet(简写ds)

1.简介

他是保证每个集群的node上运行一个副本,那么就可以得知他适用于节点级pod功能,像日志收集、节点监控这种每个节点只需要一个pod的情况,当集群中有新node加入时,也会自动为其创建pod副本。

2.DaemonSet较完整解释

截取自edit ds的spec部分

spec:revisionHistoryLimit: 3   #保留历史版本数selector:matchLabels:app: nginx-ds-podtemplate:metadata:labels:app: nginx-ds-podspec:containers:- image: nginximagePullPolicy: Alwaysname: my-nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30updateStrategy:    #更新策略rollingUpdate:   #指定滚动更新,和Deployment的差不多maxSurge: 0maxUnavailable: 1  #最大不可用pod最大值type: RollingUpdate   #类型为滚动更新

3.案例演示

这里我们集群中有两个node,应用一个创建ds的文件,最后可以观察到共创建了两个pod,且确实是两个node上各一个pod。

[root@k8s-master pod]# cat myds.yaml 
apiVersion: apps/v1
kind: DaemonSet
metadata:name: my-dsnamespace: myns
spec:revisionHistoryLimit: 3selector:matchLabels:app: nginx-ds-podtemplate:metadata:labels:app: nginx-ds-podspec:containers:- name: my-nginximage: nginx       
​
[root@k8s-master pod]# kubectl get ds -n myns
NAME    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
my-ds   2         2         2       2            2           <none>          13s
[root@k8s-master pod]# kubectl get nodes
NAME         STATUS   ROLES           AGE   VERSION
k8s-master   Ready    control-plane   11m   v1.28.2
k8s-node1    Ready    <none>          10m   v1.28.2
k8s-node2    Ready    <none>          10m   v1.28.2
[root@k8s-master pod]# kubectl get pods -n myns -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
my-ds-k2vwc   1/1     Running   0          25s   10.244.36.66     k8s-node1   <none>           <none>
my-ds-xqsn9   1/1     Running   0          25s   10.244.169.129   k8s-node2   <none>           <none>

4.注意:如上例的话使用“kubectl delete -f myds.yaml ”就可以撒谎从南湖ds,其中的pod也会跟着被删除

 

这篇关于k8s中批量处理Pod应用的Job和CronJob控制器、处理守护型pod的DaemonSet控制器介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/452397

相关文章

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http