第五章 Kubernetes Pod控制器-Cronjob

一、CronJob特性

CronJob是基于时间的Job控制器,简单理解就是CronJob控制器会依赖Job控制器,基于Job控制器之上增加了时间方面的约束。所以CronJob是周期性的执行Job控制器,Job控制器跑Pod的方式来完成周期性任务的。

CronJob有些特性如下:

以上特性,对其中某些做些说明:

1、spec.schedule:这个跟linux里面的corntab类似,采用 \* \* \* \* \* job命令 方式。5个*分别代表了分时日月周。

2、spce.concurrencyPolicy:并发策略。并发策略需要根据你实际业务情况进行设定。其中:

  • Allow(默认):允许并发允许Job,比如当你的任务在周期时刻被调度的时候,上一次跑的任务都还没有结束,那么Allow就是允许本次被调度运行,与前一次的任务可以并行的。
  • Forbid:禁止并发运行。如果前一次调度的任务还没有完成,本次调度的任务就会跳过,不会执行本次调度任务。
  • Replace:在本次调度时刻,如果上次调度的任务还在运行中,那么就会取消正在运行的Job,用一个新的Job来替换。

3、spec.suspend:挂起。将后续所有任务都挂起,对已经开始执行的Job不起作用。比如临时业务情况有变化,比如周期性备份数据库任务需要暂停,这时候可以设置suspend为ture。

4、spec.successfulJobsHistoryLimit和spec.failedJobsHistoryLimit:成功的job和失败的job的历史记录限制条数。假如我们有一个是每分钟要执行的任务,那么一个月一年下来,我们创建的Job控制器的记录都会保留在etcd中,记录太多了,没必要记录这么多,因为对于我们使用者来说关注的是当前最新几个pod的情况是否正常,所以系统默认分别设置了'3'和'1'。

二、CronJob实操

1、创建CronJob控制器

vim 12.cronjob.yaml

复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: cronjob-demo
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      completions: 3
      template:
        spec:
          containers:
          - name: cronjob-demo-container
            image: nginx:v1
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

root@k8s-master01 5# kubectl apply -f 12.cronjob.yaml

cronjob.batch/cronjob-demo created

root@k8s-master01 5# kubectl get cronjob

NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE

cronjob-demo */1 * * * * False 0 <none> 24s

  • SCHEDULE:调度周期。这里是1分钟调度一次。
  • SUSPEND:是否为挂起
  • ACTIVE:激活数量
  • LAST SCHEDULE:最后一次调度距离现在的时长
  • AGE:Cronjob资源对象创建的时长

注意:cronjob资源对象创建之后,第一次调度运行任务,并不会是严格在1分钟后执行,可能是1分钟前也可能是1分钟后,这个时间不定。如果你对于这个第一次调度的时间有一个很明确的要求,那么就需要在pod内部进行判断,在cronjob这个级别是做不到这个控制的。

2、查看Job/Pod资源对象情况

root@k8s-master01 5# kubectl get job

NAME COMPLETIONS DURATION AGE

cronjob-demo-28971561 3/3 10s 2m50s

cronjob-demo-28971562 3/3 9s 110s

cronjob-demo-28971563 3/3 9s 50s

验证结果:发现已经有3个Job创建并已经完成了。根据上章节Job控制器讲的,每个Job控制器中,COMPLETIONS是3/3,说明我们要求3个pod成功完成,目前已经有3个pod完成了。

root@k8s-master01 5# kubectl get pod

NAME READY STATUS RESTARTS AGE

cronjob-demo-28971561-26l5q 0/1 Completed 0 2m14s

cronjob-demo-28971561-965tb 0/1 Completed 0 2m11s

cronjob-demo-28971561-ppspp 0/1 Completed 0 2m7s

cronjob-demo-28971562-2km7d 0/1 Completed 0 74s

cronjob-demo-28971562-kwzm4 0/1 Completed 0 68s

cronjob-demo-28971562-pvk8w 0/1 Completed 0 71s

cronjob-demo-28971563-h4zvb 0/1 Completed 0 8s

cronjob-demo-28971563-jqkxg 0/1 Completed 0 14s

cronjob-demo-28971563-xdxtk 0/1 Completed 0 11s

验证结果:通过pod可以看到,每个Job下产生了3个pod,比如cronjob-demo-28971561这个job产生了cronjob-demo-28971561-26l5q、cronjob-demo-28971561-965tb、cronjob-demo-28971561-ppspp三个pod,并且STATUS都是Completed,表示成功执行完成。

相关推荐
bukeyiwanshui10 小时前
20260626 k8sControllers介绍
云原生·容器·kubernetes
能有时光11 小时前
] K8s 核心组件使用指南
云原生·容器·kubernetes
云烟成雨TD12 小时前
Kubernetes 系列【13】控制器:可视化操作 Deployment
云原生·容器·kubernetes
运维老郭1 天前
【K8s运维实战】Kubernetes临时存储卷实战:emptyDir核心用法与gitRepo弃用迁移指南
运维·云原生·kubernetes
gs801401 天前
记一次多 Agent 架构在单节点 K8s 触发的 PID 耗尽与 Pod 驱逐(Evicted)大摸排
容器·架构·kubernetes
bukeyiwanshui1 天前
20260701 k8s Metric Server
容器·贪心算法·kubernetes
Zhu7581 天前
在k8s集群部署ApacheHadoop单节点单数据副本
云原生·容器·kubernetes
摇滚侠1 天前
云原生 Java 架构师的第一课 K8s+Docker+KubeSphere+DevOps 51-60
java·云原生·kubernetes
bukeyiwanshui2 天前
20260703 K8s ECShop商城项目
云原生·容器·kubernetes