总量与并发怎么配
任务对象的并行控制由两个字段组合表达:完成数定义总共需要成功多少次,并行度定义同一时刻最多跑几个。前者决定总量,后者决定并发压力。工作队列类任务则反过来用:并行度固定,完成数留空,由 Pod 从队列里取活干,直到队列为空。
基本信息
| 适用平台 | Kubernetes 1.21+,批量接口组 |
|---|---|
| 完成数 | 需要成功的总次数,默认为 1 |
| 并行度 | 同时运行的副本数上限,默认为 1 |
| 完成数留空 | 出现任意一个成功即判定整体完成 |
| 相关字段 | 失败重试上限与最长运行时间 |
典型使用场景
- 一批数据分片处理,总片数已知,用完成数表达总量
- 控制并发压力:并行度限制同时抓取的资源数量
- 工作队列模式:任务数量不固定,由队列长度决定何时结束
- 冗余竞速:多个副本同时算同一结果,任意成功即结束
- 压测或数据校验场景按分片并行执行
组合语义
| 完成数 | 并行度 | 效果 |
|---|---|---|
| 1(默认) | 1(默认) | 单个任务跑一次 |
| 10 | 3 | 总共成功 10 次,同时最多 3 个 |
| 留空 | 5 | 并行 5 个,任意一个成功即结束 |
| 10 | 10 | 十个分片同时开始 |
运行中观察
运行中观察
kubectl get job batch-x -o jsonpath='active={.status.active} succeeded={.status.succeeded} failed={.status.failed}'
kubectl get pods -l job-name=batch-x # 每批创建的副本
kubectl describe job batch-x | grep -i -E 'parallelism|completions|events' -A3
kubectl logs -l job-name=batch-x --tail=20 # 分片处理情况完成数留空时,任意一个副本成功就会判定整体完成,这种用法适合冗余竞速,不适合需要把所有分片都处理完的批处理。
分片任务的常见做法是把分片编号通过环境变量或参数传给容器:每个副本处理自己那一片,失败的分片由重试机制重新拉起,人工只需关注最终成功次数是否达到总量。
并行度设得过高会同时拉起大量副本,可能瞬间占满节点资源或把下游服务打爆。批处理任务应结合下游承受能力设定并发上限,必要时分批推进。