Kubernetes CronJob 速查手册:核心语法与实战示例

Kubernetes CronJob 速查手册:核心语法与实战示例

你是否曾经因为 Kubernetes CronJob 的复杂配置而感到头疼?本文提供详尽的语法和示例,帮你快速解决实际问题。

核心语法

基本结构

yaml 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: example
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: job
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure
  • apiVersion: batch/v1:指定 API 版本
  • kind: CronJob:指定资源类型
  • metadata.name:CronJob 的名称
  • spec.schedule:Cron 表达式,定义任务的执行时间
  • spec.jobTemplate:Job 的模板,定义实际执行的任务

Cron 表达式

表达式 描述
* * * * * 每分钟执行一次
0 * * * * 每小时的第 0 分钟执行一次
0 0 * * * 每天的午夜执行一次
0 0 * * 0 每周的周日午夜执行一次
0 0 1 * * 每月的 1 号午夜执行一次

资源限制

yaml 复制代码
resources:
  limits:
    cpu: "1"
    memory: 2Gi
  requests:
    cpu: "0.5"
    memory: 1Gi
  • limits:资源上限
  • requests:资源请求

并发策略

策略 描述
Allow 允许并行执行
Forbid 禁止并行执行
Replace 新任务替换旧任务

失败与成功策略

yaml 复制代码
spec:
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 2
  backoffLimit: 4
  • successfulJobsHistoryLimit:保留成功的任务数量
  • failedJobsHistoryLimit:保留失败的任务数量
  • backoffLimit:任务失败重试次数

超时设置

yaml 复制代码
spec:
  template:
    spec:
      activeDeadlineSeconds: 100
  • activeDeadlineSeconds:任务的最大运行时间(秒)

挂载卷

yaml 复制代码
volumes:
- name: task-pv-storage
  persistentVolumeClaim:
    claimName: task-pv-claim
containers:
- name: job
  image: busybox
  volumeMounts:
  - mountPath: "/mnt/data"
    name: task-pv-storage
  • volumes:定义卷
  • volumeMounts:挂载卷到容器

任务调度

yaml 复制代码
concurrencyPolicy: Forbid
startingDeadlineSeconds: 100
  • concurrencyPolicy:并发策略
  • startingDeadlineSeconds:任务必须在指定时间内启动,否则被放弃

任务启动配置

yaml 复制代码
spec:
  schedule: "*/5 * * * *"
  startingDeadlineSeconds: 100
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: job
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure
  • schedule:Cron 表达式
  • startingDeadlineSeconds:任务启动的截止时间
  • concurrencyPolicy:并发策略

环境变量

yaml 复制代码
env:
- name: MESSAGE
  value: "Hello, Kubernetes!"
  • env:环境变量

ConfigMap 和 Secret 挂载

yaml 复制代码
envFrom:
- configMapRef:
    name: example-configmap
- secretRef:
    name: example-secret
  • envFrom:从 ConfigMap 或 Secret 中挂载环境变量

定时任务示例

每 5 分钟执行一次
yaml 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: every-5-minutes
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: job
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure
每天午夜执行一次
yaml 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: daily-midnight
spec:
  schedule: "0 0 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: job
            image: busybox
            args:
            - /bin/sh
            - -c
            - echo "Running daily task at midnight"
          restartPolicy: OnFailure
每周周日午夜执行一次
yaml 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: weekly-sunday-midnight
spec:
  schedule: "0 0 * * 0"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: job
            image: busybox
            args:
            - /bin/sh
            - -c
            - echo "Running weekly task at midnight on Sunday"
          restartPolicy: OnFailure
每月 1 号午夜执行一次
yaml 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: monthly-first-day
spec:
  schedule: "0 0 1 * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: job
            image: busybox
            args:
            - /bin/sh
            - -c
            - echo "Running monthly task at midnight on the 1st day"
          restartPolicy: OnFailure

高级用法

挂载持久卷
yaml 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: mount-pv
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          volumes:
          - name: task-pv-storage
            persistentVolumeClaim:
              claimName: task-pv-claim
          containers:
          - name: job
            image: busybox
            args:
            - /bin/sh
            - -c
            - echo "Task started at $(date)"; cat /mnt/data/example.txt
            volumeMounts:
            - mountPath: "/mnt/data"
              name: task-pv-storage
          restartPolicy: OnFailure
传递环境变量
yaml 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: env-vars
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: job
            image: busybox
            args:
            - /bin/sh
            - -c
            - echo "Message: $MESSAGE"
            env:
            - name: MESSAGE
              value: "Hello, Kubernetes!"
          restartPolicy: OnFailure
指定资源限制
yaml 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: resource-limits
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: job
            image: busybox
            args:
            - /bin/sh
            - -c
            - echo "Task with resource limits"
            resources:
              limits:
                cpu: "1"
                memory: 2Gi
              requests:
                cpu: "0.5"
                memory: 1Gi
          restartPolicy: OnFailure
设置超时
yaml 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: timeout-example
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: job
            image: busybox
            args:
            - /bin/sh
            - -c
            - sleep 120; echo "Task completed"
          activeDeadlineSeconds: 100
          restartPolicy: OnFailure
限制并行任务
yaml 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: no-parallel
spec:
  schedule: "*/5 * * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: job
            image: busybox
            args:
            - /bin/sh
            - -c
            - echo "No parallel tasks allowed"
          restartPolicy: OnFailure

常见问题与解决

任务未按计划执行
  • 检查 schedule 配置是否正确
  • 检查 startingDeadlineSeconds 是否过期
  • 检查集群资源是否充足
任务执行失败
  • 检查 backoffLimit 是否设置得当
  • 检查容器日志,查看具体错误信息
  • 检查任务依赖的资源是否可用
任务执行时间不一致
  • 检查节点的时钟是否同步
  • 检查 spec.startingDeadlineSeconds 是否设置得当

优化技巧

减少资源浪费

  • 设置适当的 resources 限制和请求
  • 使用 activeDeadlineSeconds 防止任务无限运行

管理历史任务

  • 调整 successfulJobsHistoryLimitfailedJobsHistoryLimit,保留必要的历史记录

调试任务

  • 使用 kubectl logs 查看容器日志
  • 使用 kubectl describe 查看任务详细信息

工具推荐

Cron 表达式生成器:通过中文描述快速生成 Cron 表达式,简化配置过程。 正则表达式生成器:帮助你快速生成和测试正则表达式。 中英互译:在线翻译工具,支持中文和英文互译。 JSON 格式化:在线 JSON 格式化和验证工具,方便阅读和调试。 Base64 编码解码:在线 Base64 编码和解码工具,适用于各种场景。 时间戳转换:在线时间戳转换工具,支持多种时间格式。 JWT 解析:在线解析 JWT,方便调试和验证。

收藏这些工具,让 Kubernetes CronJob 的配置和调试更加轻松。

相关推荐
shen_19 分钟前
AI Coding:前端UI规范笔记
前端
llz_1121 小时前
web-第五次课后作业
前端·后端·http
恋猫de小郭2 小时前
Redis 作者反驳「中国模型之所以强,是因为通过 API 蒸馏了美国模型」
前端·人工智能·ai编程
Darling噜啦啦2 小时前
Canvas 游戏开发与数据可视化实战:从飞机大战到 ECharts 报表
前端·echarts·canvas
OpenTiny社区2 小时前
这次更新太良心!GenUI SDK v1.2.0 轻量化 + 稳流式 + 超强 Playground
前端·vue.js·ai编程
梨子同志2 小时前
WebGL test
前端
程序员黑豆2 小时前
AI全栈开发系列开篇:从Java全栈到AI应用实战
前端·ai编程·全栈
yangyj2 小时前
从 PDR 到落地:用 Codex 完成一次 Rspack 升级
前端
程序员鱼皮2 小时前
提示词工程已死,Loop Engineering 称王!保姆级教程 + 项目实战
前端·后端·ai编程
小爷毛毛_卓寿杰2 小时前
给 Embedding 模型也加一块“游乐场“—— Xinference 是怎么把 vector 变成肉眼可见的体验的
前端