Kubernetes CronJob 速查手册核心语法与实战示例你是否曾经因为 Kubernetes CronJob 的复杂配置而感到头疼本文提供详尽的语法和示例帮你快速解决实际问题。核心语法基本结构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: OnFailureapiVersion: batch/v1指定 API 版本kind: CronJob指定资源类型metadata.nameCronJob 的名称spec.scheduleCron 表达式定义任务的执行时间spec.jobTemplateJob 的模板定义实际执行的任务Cron 表达式表达式描述* * * * *每分钟执行一次0 * * * *每小时的第 0 分钟执行一次0 0 * * *每天的午夜执行一次0 0 * * 0每周的周日午夜执行一次0 0 1 * *每月的 1 号午夜执行一次资源限制resources: limits: cpu: 1 memory: 2Gi requests: cpu: 0.5 memory: 1Gilimits资源上限requests资源请求并发策略策略描述Allow允许并行执行Forbid禁止并行执行Replace新任务替换旧任务失败与成功策略spec: successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 2 backoffLimit: 4successfulJobsHistoryLimit保留成功的任务数量failedJobsHistoryLimit保留失败的任务数量backoffLimit任务失败重试次数超时设置spec: template: spec: activeDeadlineSeconds: 100activeDeadlineSeconds任务的最大运行时间秒挂载卷volumes: - name: task-pv-storage persistentVolumeClaim: claimName: task-pv-claim containers: - name: job image: busybox volumeMounts: - mountPath: /mnt/data name: task-pv-storagevolumes定义卷volumeMounts挂载卷到容器任务调度concurrencyPolicy: Forbid startingDeadlineSeconds: 100concurrencyPolicy并发策略startingDeadlineSeconds任务必须在指定时间内启动否则被放弃任务启动配置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: OnFailurescheduleCron 表达式startingDeadlineSeconds任务启动的截止时间concurrencyPolicy并发策略环境变量env: - name: MESSAGE value: Hello, Kubernetes!env环境变量ConfigMap 和 Secret 挂载envFrom: - configMapRef: name: example-configmap - secretRef: name: example-secretenvFrom从 ConfigMap 或 Secret 中挂载环境变量定时任务示例每 5 分钟执行一次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每天午夜执行一次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每周周日午夜执行一次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 号午夜执行一次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高级用法挂载持久卷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传递环境变量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指定资源限制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设置超时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限制并行任务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防止任务无限运行管理历史任务调整successfulJobsHistoryLimit和failedJobsHistoryLimit保留必要的历史记录调试任务使用kubectl logs查看容器日志使用kubectl describe查看任务详细信息工具推荐Cron 表达式生成器通过中文描述快速生成 Cron 表达式简化配置过程。 正则表达式生成器帮助你快速生成和测试正则表达式。 中英互译在线翻译工具支持中文和英文互译。 JSON 格式化在线 JSON 格式化和验证工具方便阅读和调试。 Base64 编码解码在线 Base64 编码和解码工具适用于各种场景。 时间戳转换在线时间戳转换工具支持多种时间格式。 JWT 解析在线解析 JWT方便调试和验证。收藏这些工具让 Kubernetes CronJob 的配置和调试更加轻松。