概述目标:在集群中可靠运行定时任务,处理主从时间漂移与控制并发,避免重复执行与资源堆积。适用:报表生成、定时清理、数据同步任务。核心与实战CronJob示例:apiVersion: batch/v1 kind: CronJob metadata: name: report-job namespace: ops spec: schedule: "0 */1 * * *" timeZone: "Asia/Shanghai" concurrencyPolicy: Forbid startingDeadlineSeconds: 300 successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 3 jobTemplate: spec: backoffLimit: 2 template: spec: restartPolicy: Never containers: - name: runner image: repo/runner:1.0 args: ["/bin/run", "--window=60m"] 去重策略(锁与幂等):# 任务开始获取分布式锁(如Redis或K8s Lease),持有期间执行;幂等校验以任务窗口唯一键避免重复写入 示例观察调度与历史:kubectl -n ops get cronjob report-job kubectl -n ops get jobs --sort-by=.status.startTime | select-string -pattern report-job 时间漂移与容错:# 使用 timeZone 与 startingDeadlineSeconds 容忍漂移;确保控制面时间同步(NTP) 验证与监控并发与失败:观察`concurrencyPolicy`效果与`backoffLimit`重试次数。资源与日志:`kubectl logs`检查任务日志;限制历史保留避免资源膨胀。成果校验:以窗口唯一键验证幂等,监控重复执行率与产物一致性。常见误区未设置`concurrencyPolicy`导致前一任务未完成时重复运行;应设为`Forbid`或`Replace`。忽视时间同步与漂移;需配置`timeZone`并保证NTP一致。历史保留过多导致资源与列表压力;应设置合理成功/失败保留。结语通过并发策略与幂等去重、时间漂移容忍,CronJob可在生产环境稳定运行并避免重复执行与资源浪费。

发表评论 取消回复