当前位置: 首页 > article >正文

K8S中Pod控制器之CronJob(CJ)控制器

CronJob 控制器是 Kubernetes 中用于周期性执行任务的一种控制器,它基于 Job 控制器来创建和管理作业。以下是 CronJob 的一些关键特点:

  • 周期性调度CronJob 允许您定义一个基于时间的调度,类似于 Linux 的 cron 工具,来周期性地执行任务。

  • 时间点触发CronJob 根据指定的时间表(cron 表达式)触发,可以精确到分钟。

  • 一次性或重复执行:尽管 CronJob 主要用于重复性任务,但它也可以配置为仅执行一次。

  • 立即执行:如果需要,可以在创建 CronJob 之后立即启动第一个作业。

  • 并行性控制:可以设置 CronJob 的并行性策略,决定是否允许多个 Job 实例并行运行,或者在新实例启动前完成上一个实例。

  • 成功和失败处理CronJob 可以配置成功和失败的工作节(job history limit)限制,以控制保留成功和失败的 Job 记录的数量。

  • 暂停和恢复CronJob 支持暂停和恢复功能,允许您临时停止或恢复周期性任务的执行。

  • 时区处理CronJob 允许您指定时区,以确保任务在特定地理区域的特定时间执行。

  • 灵活的 cron 表达式:支持复杂的 cron 表达式,以满足不同的时间调度需求。

CronJob的资源清单

---
apiVersion: batch/v1beta1 # 版本号
kind: CronJob # 类型
metadata: # 元数据
  name: # rs名称
  namespace: # 所属命名空间
  labels: # 标签
    controller: cronjob
spec: # 详情描述
  schedule: # cron格式的作业调度运行时间点,用于控制任务在什么时间执行
  concurrencyPolicy: # 并发执行策略,用于定义前一次作业运行尚未完成时是否以及如何运行后一次的作业
  failedJobHistoryLimit: # 为失败的任务执行保留的历史记录数,默认为1
  successfulJobHistoryLimit: # 为成功的任务执行保留的历史记录数,默认为3
  startingDeadlineSeconds: # 启动作业错误的超时时长
  jobTemplate: # job控制器模板,用于为cronjob控制器生成job对象;下面其实就是job的定义
    spec:
      completions: 1
      parallelism: 1
      activeDeadlineSeconds: 30
      backoffLimit: 6
      manualSelector: true
      template:
        metadata:
          labels:
            app: counter-pod
        spec:
          restartPolicy: Never
          containers:
          - name: counter
            image: busybox:1.30
            command: ["bin/sh", "-c", "for i in 9 8 7 6 5 4 3 2 1; do echo $i; sleep 20; done"]

schedule

schedule 是一个 cron 表达式,用于定义 CronJob 的执行计划。cron 表达式由五个字段组成,分别表示分钟、小时、日期(一个月中的哪一天)、月份和星期几。每个字段可以包含以下几种类型的值:

  • 具体值:例如 115

  • 逗号分隔的多个值:例如 1,15 表示第 1 分钟和第 15 分钟。

  • 范围:使用连字符 - 表示,例如 1-3 表示从第 1 分钟到第 3 分钟。

  • 通配符:使用星号 * 表示匹配任意值。

  • 步长:使用斜杠 / 表示,例如 */15 表示从 0 开始每 15 分钟。

cron 表达式的字段含义如下:

  • 分钟:0 到 59

  • 小时:0 到 23

  • 日期:1 到 31

  • 月份:1 到 12 或 JAN 到 DEC

  • 星期:0 到 6(0 表示星期天)或 SUN 到 SAT

 测试:

---
apiVersion: batch/v1
kind: CronJob
metadata:
  name: pc-cronjob
  namespace: test
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: counter
            image: busybox:1.30
            command: ["bin/sh", "-c", "for i in 9 8 7 6 5 4 3 2 1; do echo $i; sleep 3; done"]
  • 查看cronjob:

cronjob每分钟执行一次,当job执行时会启动一个pod,pod启动完成job结束当前任务

[root@k8s-master ~]# kubectl get cronjob -n test -w 
NAME         SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
pc-cronjob   */1 * * * *   False     0        <none>          0s
pc-cronjob   */1 * * * *   False     1        0s              38s
kubectl get job -n test -w
pc-cronjob   */1 * * * *   False     0        30s             68s
pc-cronjob   */1 * * * *   False     1        0s              98s
pc-cronjob   */1 * * * *   False     0        30s             2m8s
  • 查看job:
[root@k8s-master ~]# kubectl get job -n test -w

NAME                  COMPLETIONS   DURATION   AGE
pc-cronjob-28956119   0/1           20s        20s
pc-cronjob-28956119   1/1           30s        30s
pc-cronjob-28956120   0/1                      0s
pc-cronjob-28956120   0/1           0s         0s
pc-cronjob-28956120   1/1           30s        30s
  • 查看pod:

可以看的pod创建之后,会结束当前任务,等待一分钟之后再次启动pod

^C[root@k8s-master ~]# kubectl get pods -n test -w
NAME                 READY   STATUS    RESTARTS   AGE
pc-daemonset-9vwvd   1/1     Running   0          52m
pc-daemonset-drdt5   1/1     Running   0          52m
pc-cronjob-28956119-n7cxf   0/1     Pending   0          0s
pc-cronjob-28956119-n7cxf   0/1     Pending   0          0s
pc-cronjob-28956119-n7cxf   0/1     ContainerCreating   0          0s
pc-cronjob-28956119-n7cxf   0/1     ContainerCreating   0          2s
pc-cronjob-28956119-n7cxf   1/1     Running             0          2s
pc-cronjob-28956119-n7cxf   0/1     Completed           0          30s
pc-cronjob-28956119-n7cxf   0/1     Completed           0          30s
pc-cronjob-28956120-4q5sv   0/1     Pending             0          0s
pc-cronjob-28956120-4q5sv   0/1     Pending             0          0s
pc-cronjob-28956120-4q5sv   0/1     ContainerCreating   0          0s
pc-cronjob-28956120-4q5sv   0/1     ContainerCreating   0          1s
pc-cronjob-28956120-4q5sv   1/1     Running             0          2s
pc-cronjob-28956120-4q5sv   0/1     Completed           0          30s
pc-cronjob-28956120-4q5sv   0/1     Completed           0          30s


http://www.kler.cn/a/516618.html

相关文章:

  • 后端的config包中的常用配置
  • 常见的加密方式以及自定义加密工具
  • Ansible fetch模块详解:轻松从远程主机抓取文件
  • 【机器学习案列】探索各因素对睡眠时间影响的回归分析
  • 《鸿蒙Next应用商店:人工智能开启智能推荐与运营新时代》
  • 应用层协议 HTTP 讲解实战:从0实现HTTP 服务器
  • 汇编语法及相关指令
  • 学生管理系统C++版(简单版)详解
  • 东南亚静态住宅IP的优势与应用
  • 关于java实现word(docx、doc)转html的解决方案
  • ubuntu 布暑python项目
  • 数据统计–图形报表(day11)
  • c语言中的数组(上)
  • FTP 与 LFTP 命令的介绍及常用功能
  • Java数字转换工具类-NumberUtil
  • 华为支付接入规范
  • flutter入门系列教程<一>:tab组件的灵活妙用
  • 【玩转全栈】----Django模板语法、请求与响应
  • C++并发编程之提高C++多线程应用可测试性的思想和方法
  • 谷歌泰坦:Transformer之后的AI时代?
  • xss漏洞简单复习
  • DataStream API
  • mysql直接在sql中将分组查询出来的多个属性的list,拼接成一个字符串,最后的结果只要一个大的字符串
  • AAAI2024论文合集解读|Cost Minimization for Equilibrium Transition-water-merged
  • 双足机器人开源项目
  • 《中国网络安全产业分析报告(2023年)》解读