K8S中completions和parallelism配合完成Job
·
在Kubernetes中,Job控制器用于管理一次性任务(与持续运行的Deployment不同),确保任务最终完成。completions和parallelism是Job的两个核心参数,用于控制任务的总完成数量和并行执行的程度,具体工作方式如下:
1. completions:任务总完成数
- 含义:指定
Job需要成功完成的总Pod数量。只有当成功运行的Pod数量达到completions值时,Job才会标记为“完成”(Complete)。 - 默认值:默认为
1,即默认情况下,Job只需成功运行1个Pod就会结束。 - 示例:若
completions: 5,则Job会持续创建Pod,直到有5个Pod成功执行为止。
2. parallelism:并行执行数
- 含义:指定
Job可以同时运行的Pod数量(并发度)。控制任务的并行执行效率,避免一次性创建过多Pod导致资源耗尽。 - 默认值:默认为
1,即默认串行执行(一个Pod完成后再创建下一个)。 - 示例:若
parallelism: 2,则Job最多同时运行2个Pod;当其中一个Pod完成后,会立即创建新的Pod补充,直到总完成数达到completions。
两者配合工作的流程
completions和parallelism通常一起使用,控制任务的“总量”和“并发度”。
例如:completions: 5,parallelism: 2时:
Job启动后,先创建2个Pod(达到parallelism上限);- 当其中1个Pod成功完成(状态为
Succeeded),Job立即创建第3个Pod,保持并行数为2; - 重复步骤2,直到累计有5个Pod成功完成(达到
completions); - 此时
Job状态变为Complete,不再创建新Pod。
特殊情况说明
- 若
parallelism > completions:实际并行数会自动降为completions(例如completions:3,parallelism:5时,最多同时运行3个Pod),避免创建多余的Pod。 - 若Pod失败:
Job会根据restartPolicy(通常设为Never或OnFailure)重新创建失败的Pod,直到成功完成的Pod总数达到completions。 - 若未指定
completions和parallelism:默认都为1,即串行执行1个Pod,完成后Job结束。
配置示例
以下是一个Job配置示例,指定总完成5个任务,并行度为2:
apiVersion: batch/v1
kind: Job
metadata:
name: sample-job
spec:
completions: 5 # 总需完成5个任务
parallelism: 2 # 最多同时运行2个Pod
template:
spec:
containers:
- name: task
image: busybox
command: ["echo", "Hello from Job"]
restartPolicy: Never # 失败后不重启容器,直接创建新Pod
通过调整这两个参数,可以灵活控制一次性任务的执行效率和总量,适用于批量处理、数据迁移等场景。
更多推荐


所有评论(0)