Kubernetes 中 Job 和 CronJob 的使用指南
1. 为什么需要 Job
在 Kubernetes 中,虽然独立的 Pod 也能执行一次性任务,但没有控制器确保任务真正完成。例如,Pod 可能在完成任务前因维护事件被驱逐。Job 围绕 Pod 添加了一些有用的构造,以确保任务完成(若失败或被驱逐则重新调度),还能跟踪多次完成情况和并行性。
Job 是 Kubernetes 中用于管理 Pod 的高阶控制器,与 Deployment 和 StatefulSet 类似。三者都会创建 Pod 来运行代码,但控制器在调度和管理方面的逻辑不同:
- Deployments :用于创建一组持续运行的 Pod。
- StatefulSet :用于具有唯一序号且可通过持久卷模板挂载磁盘的 Pod。
- Jobs :用于应运行至完成(可能多次)的 Pod。
2. 使用 Job 运行一次性任务
Job 非常适合运行一次性任务。例如,执行维护任务(如清除缓存),可以调度一个 Job 以独立进程运行任务,并分配独立资源,确保任务按要求完成(或报告失败状态),且易于重复执行。而 kubectl exec
应仅用于调试运行中的 Pod,若用其执行维护任务,任务会与 Pod 共享资源,可能影响性能。
将常规维护任务定义为 Job,可构建可重复的配置。若采用 GitOps 方法,维护任务可通过常规代码审查流程部署到生产环境。
以下是一个 Job 定义示例,用于