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 的配置和调试更加轻松。

相关推荐
麻雀飞吧6 小时前
TqWebHelper 本地监控:图表不刷新与端口冲突排查
前端·python
用户52438855928876 小时前
拆解Vue2源码-01 reactive
前端
ZC跨境爬虫6 小时前
跟着 MDN 学CSS day_10:(博客页面样式修复实战挑战)
前端·css
宋浮檀s6 小时前
DVWA通关教程2
运维·服务器·前端·javascript
前端爆冲6 小时前
基于SSE实现AI聊天场景的流式输出
前端·ai编程
Bigger6 小时前
mini-cc 技术栈:跟着 Claude Code 先选 TypeScript + React + Ink
前端·ai编程·claude
vortex57 小时前
XSS 漏洞深度挖掘与利用:从自动化扫描到账户接管
前端·自动化·xss
光影少年7 小时前
前端浏览器自动化
运维·前端·前端框架·自动化
弹简特7 小时前
【Vue3速成】04-vue3官方库-路由机制
前端·vue·路由