learning/k8s-intermediate/workload/wl-job/pattern.md
Kubernetes Job 对象可以用来支持 Pod 的并发执行,但是:
在一个复杂的系统中,可能存在多种类型的工作任务,本文只考虑批处理任务(batch job)。
对于批处理任务的并行计算,存在着几种模式,它们各自有自己的优缺点:
他们的优缺点归纳如下表所示,其中第二列到第四列罗列了主要考虑的对比因素:
| 模式 | 单个Job对象 | Pod的数量少于工作任务? | 是否无需修改已有代码? | 是否可兼容kube1.1 |
|---|---|---|---|---|
| Job Template Expansion | ✓ | ✓ | ||
| Queue with Pod Per Work Item | ✓ | 有时候 | ✓ | |
| Queue with Variable Pod Count | ✓ | ✓ | ✓ | |
| Single Job with Static Work Assignment | ✓ | ✓ |
当您指定 .spec.completions 时,Job 控制器创建的每个 Pod 都有一个相同的 spec。这意味着,同一个 Job 创建的所有的 Pod 都使用:
Job 的不同模式本质上讲,如何为一组工作任务分配 Pod。下表总结了不同的模式下 .spec.parallelism 和 .spec.completions 字段的设置。(表中 w 代表工作任务的数量)
| 模式 | .spec.completions | .spec.parallelism |
|---|---|---|
| Job Template Expansion | 1 | should be 1 |
| Queue with Pod Per Work Item | W | any |
| Queue with Variable Pod Count | 1 | Any |
| Single Job with Static Work Assignment | W | any |