在Kubernetes中,Job控制器用于管理一次性任务(与持续运行的Deployment不同),确保任务最终完成。completionsparallelismJob的两个核心参数,用于控制任务的总完成数量和并行执行的程度,具体工作方式如下:

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

两者配合工作的流程

completionsparallelism通常一起使用,控制任务的“总量”和“并发度”。
例如:completions: 5parallelism: 2时:

  1. Job启动后,先创建2个Pod(达到parallelism上限);
  2. 当其中1个Pod成功完成(状态为Succeeded),Job立即创建第3个Pod,保持并行数为2;
  3. 重复步骤2,直到累计有5个Pod成功完成(达到completions);
  4. 此时Job状态变为Complete,不再创建新Pod。

特殊情况说明

  • parallelism > completions:实际并行数会自动降为completions(例如completions:3parallelism:5时,最多同时运行3个Pod),避免创建多余的Pod。
  • 若Pod失败:Job会根据restartPolicy(通常设为NeverOnFailure)重新创建失败的Pod,直到成功完成的Pod总数达到completions
  • 若未指定completionsparallelism:默认都为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

通过调整这两个参数,可以灵活控制一次性任务的执行效率和总量,适用于批量处理、数据迁移等场景。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐