首页/云/Kubernetes 速查/Job 一次性任务基础

Job 一次性任务基础

运行到成功完成的批处理控制器:镜像跑完退出即完成;completions/parallelism 控制要跑几个实例、并行几个。

Kubernetes 速查云更新于 2026-10-13

Job 是什么

Job 管理的是「跑到成功就结束」的任务:它会创建容器、等待执行完毕,进程正常退出即视为完成;失败则按设定的次数重试。这与常驻服务完全相反——服务要一直运行,任务要的是收敛结果。数据迁移、批处理、初始化脚本这类工作,正确做法都是交给它,而不是塞进常驻容器里靠启动脚本执行。

完成与并行的两个维度

一个维度是要成功完成几次,另一个维度是同时允许多少个实例在跑。前者决定总工作量,后者决定并发度。比如一百个分片的任务可以设定总量一百、并发十个,控制器会持续补位直到全部完成。重试次数限制了失败后还能再试几次,超过就整体判定失败。

基本信息

适用环境任何 Kubernetes 发行版,属于批处理接口组
完成条件成功完成的实例数达到设定值
并行控制同时运行的实例数上限
重试机制失败后按次数上限重试,耗尽后判定失败
重启策略限制只能设为从不重启或失败时重启,不能设为总是重启
清理方式可设定完成后自动清理,或手工删除对象

典型使用场景

  • 数据库迁移:版本升级前执行结构变更脚本,完成后再发布应用
  • 批量数据处理:把历史数据分片并行处理,缩短总耗时
  • 一次性初始化:为新环境创建索引、初始化存储桶与基础数据
  • 发布前的校验任务:确认依赖可用后再进入发布流程
  • 定时任务的实际执行体:由定时对象按时间创建任务对象
  • 回填与修复:对历史数据做一次性修正并输出结果统计

Job 清单

Job 清单
apiVersion: batch/v1
kind: Job
metadata:
  name: db-migrate
spec:
  completions: 1            # 需要成功完成的实例数
  parallelism: 1            # 同时运行的实例数
  backoffLimit: 6           # 失败重试上限
  ttlSecondsAfterFinished: 3600   # 完成后一小时自动清理
  template:
    spec:
      restartPolicy: OnFailure   # 注意:不能设为总是重启
      containers:
        - name: migrate
          image: registry.example.com/migrate:1.8.0
          command: ["./migrate", "up"]

操作与观察

操作与观察
kubectl apply -f job.yaml                    # 提交任务
kubectl get job db-migrate -o wide            # 看完成进度计数
kubectl get pods -l job-name=db-migrate       # 任务产生的实例
kubectl logs job/db-migrate                   # 查看执行输出
kubectl delete job db-migrate                 # 手工清理,保留实例便于查日志

关键字段读法

字段含义设置建议
completions需要成功完成的实例数单次任务填一,分片任务填总分片数
parallelism同时运行的实例数按下游承受能力设置并发
backoffLimit失败重试上限任务必须可重复执行
restartPolicy实例退出后的处理方式只能选从不重启或失败时重启
ttlSecondsAfterFinished完成后多久自动清理便于自动回收不占资源
任务失败重试会重新运行整个容器,因此任务逻辑必须可重复执行,重复运行的副作用要提前设计好。
默认会保留已完成任务的实例,便于查看日志;设置自动清理后日志会一并消失,排障期先不要开启。

易错点

  • 把重启策略设为总是重启:提交会被直接拒绝,模板必须使用失败时重启或从不重启
  • 任务不幂等:失败重试会完整重跑,重复执行造成数据重复或状态错乱
  • 完成后不清理:集群里堆积大量已完成的任务与实例对象,占用配额与查询噪声
  • 不设置重试上限:任务持续失败并不断重试,长期占用资源且掩盖真实问题
  • 把长驻进程放进任务里:进程永不退出,任务永远不算完成,控制器无法收敛

数据来源与参考

  • Kubernetes 官方文档 · Jobs
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌