Job & CronJob 批处理任务
Job
Job 管理一次性批处理任务,确保指定数量的 Pod 成功完成。
yaml
apiVersion: batch/v1
kind: Job
metadata:
name: data-migration
spec:
completions: 1 # 需要成功完成的 Pod 数
parallelism: 1 # 并行运行的 Pod 数
backoffLimit: 3 # 失败重试次数
activeDeadlineSeconds: 3600 # 超时时间(秒)
ttlSecondsAfterFinished: 86400 # 完成后自动清理时间
template:
spec:
restartPolicy: OnFailure # Job 必须是 OnFailure 或 Never
containers:
- name: migration
image: my-app:v2.0
command: ["python", "migrate.py"]
env:
- name: DB_URL
valueFrom:
secretKeyRef:
name: db-secret
key: url并行 Job 模式
yaml
# 固定完成数(completions=10,parallelism=3)
spec:
completions: 10 # 总共需要 10 个 Pod 成功
parallelism: 3 # 同时运行 3 个
# 工作队列模式(completions 不设置)
spec:
parallelism: 5 # 5 个 Worker 并行消费队列
# 当某个 Pod 成功退出时,Job 认为队列已空,停止创建新 PodCronJob
yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-report
spec:
schedule: "0 2 * * *" # 每天凌晨 2 点(标准 cron 语法)
timeZone: "Asia/Shanghai" # 时区(K8s 1.27+)
concurrencyPolicy: Forbid # Allow | Forbid | Replace
successfulJobsHistoryLimit: 3 # 保留成功 Job 数量
failedJobsHistoryLimit: 1 # 保留失败 Job 数量
startingDeadlineSeconds: 300 # 错过调度后的补偿窗口
jobTemplate:
spec:
backoffLimit: 2
template:
spec:
restartPolicy: OnFailure
containers:
- name: report
image: report-generator:v1.0
command: ["python", "generate_report.py"]Cron 表达式速查
┌─────────── 分钟 (0-59)
│ ┌───────── 小时 (0-23)
│ │ ┌─────── 日 (1-31)
│ │ │ ┌───── 月 (1-12)
│ │ │ │ ┌─── 星期 (0-7, 0和7都是周日)
│ │ │ │ │
* * * * *
"*/5 * * * *" 每 5 分钟
"0 * * * *" 每小时整点
"0 0 * * *" 每天午夜
"0 0 * * 1" 每周一午夜
"0 0 1 * *" 每月 1 日午夜
"0 9-18 * * 1-5" 工作日 9-18 点每小时常用操作
bash
# 手动触发 CronJob(测试用)
kubectl create job --from=cronjob/daily-report manual-run-$(date +%s)
# 查看 Job 状态
kubectl get jobs
kubectl describe job data-migration
# 查看 Job 的 Pod 日志
kubectl logs -l job-name=data-migration
# 暂停 CronJob
kubectl patch cronjob daily-report -p '{"spec":{"suspend":true}}'