type
status
date
slug
summary
category
tags
create_time
Sep 25, 2025 11:16 AM
icon
password
my_create_time

📝 前言

在 Kubernetes 集群中,有些任务只需运行一次或定期运行,而非持续提供服务。
JobCronJob 是为此场景设计的控制器:
  • Job:一次性任务,保证指定数量的 Pod 成功完成。
  • CronJob:基于 Job 的定时调度,按照指定时间周期创建 Job。

🧭 背景介绍

这里以青萍图床为案例进行介绍,青萍图床在每日凌晨需要:
  • 生成用户的统计报表进行归档(统计今日上传数量和大小等)
  • 生成会员每日账单并发送到青萍统一支付进行扣除余额(按流量计费)
  • 清理 过期缓存与临时文件
这里就可以使用 CronJob 设置每天 00:00 运行数据统计脚本,自动创建一个 Job;
而在手动执行临时数据修复脚本时,则直接创建单独的 Job 来确保任务只执行一次且成功结束,无需人工监控节点数量变化。

🧠 本章知识卡片

notion image

🚀 本章小节

1️⃣ 什么是 Job?

Job 是一种 Kubernetes 工作负载,负责确保指定数量的 Pod 成功运行至完成
  • Pod 成功退出(0 状态)即表示任务完成。
  • 如果 Pod 异常退出,控制器会自动重试直至达到 backoffLimit 或完成所需成功次数。
关键特性如下:
  • 保证任务至少成功运行指定次数。
  • 可配置并行度 parallelism 与完成数 completions
  • 支持失败重试策略 backoffLimit

2️⃣ 什么是 CronJob?

CronJob 基于 Job,用于按照 类 crontab 语法 定时创建 Job。
  • 类似 Linux cron,通过 schedule 字段定义时间表达式。
  • 每次触发时都会生成一个新的 Job 对象并执行相应 Pod。
关键特性如下:
  • 定时调度,支持秒级到年级的灵活配置。
  • 支持并发策略:AllowForbidReplace 控制新旧 Job 并发。
  • 支持历史 Job 保留策略:successfulJobsHistoryLimitfailedJobsHistoryLimit

3️⃣ 工作流程

Job

  1. 用户提交 Job YAML。
  1. Job 控制器在 API Server 注册并创建所需 Pod。
  1. Pod 成功完成后,Job 状态更新为 Complete
  1. 若失败,控制器按 backoffLimit 自动重试。

CronJob

  1. 用户提交 CronJob YAML。
  1. CronJob 控制器按照 schedule 时间到达时创建一个新的 Job。
  1. Job 再按上面流程执行,完成后根据策略保留或清理。
大致流程图如下:
notion image

4️⃣ 实战示例

Job 示例:一次性数据库迁移
CronJob 示例:每日生成报表
字段说明:
  • Job
    • completions:完成任务的成功 Pod 总数(默认 1)。
    • parallelism:允许并行运行的 Pod 数。
    • backoffLimit:Pod 失败重试次数(默认 6)。
    • restartPolicy:通常为 OnFailureNever
  • CronJob
    • schedule:定时任务表达式,遵循 Cron 语法。
    • concurrencyPolicy
      • Allow:允许并发运行。
      • Forbid:禁止并发,新任务会跳过。
      • Replace:替换上一次仍在运行的 Job。
    • successfulJobsHistoryLimit / failedJobsHistoryLimit:保留历史记录数量。

5️⃣ 常见问题与排查

  • 任务未执行或时间不准
    • 检查 schedule 表达式格式与时区设置。
  • Job 一直失败
    • 查看 kubectl logs 获取容器错误信息。
    • 调整 backoffLimit 或排查镜像/命令。
  • Pod 数量异常
    • 检查 completionsparallelism 是否配置合理。
  • 历史 Job 堆积
    • 合理设置 successfulJobsHistoryLimitfailedJobsHistoryLimit

✅ 总结

Job 与 CronJob 是 Kubernetes 处理 一次性周期性 工作的关键控制器。
  • Job 负责确保任务执行成功,可设置并行度和重试策略。
  • CronJob 基于 Job,实现灵活的定时调度。
合理配置 scheduleconcurrencyPolicy 与历史保留策略,能高效、安全地管理各种自动化任务。

🔚 后记

至此 Kubernetes 资源介绍系列暂告一段落了,已经涵盖了日常开发与运维中最常用的核心对象,如 Deployment、StatefulSet、DaemonSet、Job/CronJob、ConfigMap、Secret、PV/PVC 等。
当然 Kubernetes 生态庞大,CRD、自定义控制器、StorageClass、NetworkPolicy 等仍有大量资源未深入介绍。
后续如有更深入的实践或扩展需求,可以结合实际场景继续探索官方文档与社区最佳实践。
💡
有关文章的任何疑问,欢迎您在底部评论区留言,一起交流~
 
上一篇
Nginx+ACME服务器搭建
下一篇
第四部分:DaemonSet 资源介绍

评论
Loading...