首页 > 解决方案 > 单个 kubernetes 作业是否可以包含具有不同并行度定义的多个 pod?

问题描述

我有一个批处理作业,它分解为 3 个任务,每个任务都依赖于之前的完成,然后才能开始:

  1. 运行单个 pod
  2. 并行运行 N 个 pod ( .spec.completions= .spec.parallelism= N)
  3. 并行运行 M 个 pod ( .spec.completions= .spec.parallelism= M)

每个任务都有不同的资源需求(CPU/MEM/STORAGE)。目前,我开始作业#1,当它完成时,它运行一个kubectl命令来启动作业#2,依此类推到作业#3。我有 3 份不同的工作。

我可以为这 3 个任务定义一个工作吗?

也许是这样的:

  1. 为任务 #1 运行单个 pod
  2. 在任务 #2 上定义初始化容器以等待任务 #1 完成
  3. 使用 N 为任务 #2 运行 N 个 pod.spec.completions
  4. 在任务 # 上定义初始化容器以等待任务 #2 完成
  5. .spec.completions使用适用于任务 #3的不同方式为任务 #3 运行 M 个 pod

我不清楚我是否可以在同一个工作下为不同的 pod定义单独的.spec.parallelism和不同的 pod。.spec.completions如果我可以定义单独的初始化容器来延迟后续任务的启动。

这可能都需要一个更完整的工作流引擎,比如 Argo(我们还没有)。

标签: kuberneteskubectlkubernetes-jobs

解决方案


Kubernetes Job Controller 基于 Job spec 中的单个 pod 模板创建一个 pod。所以不,你不能在 Job 中有多个 pod

但是 kubernetes 是一个可扩展的系统,你可以定义自己的自定义资源并编写一个控制器,比如 Job 控制器,它支持具有不同并行度的多个 pod 模板。


推荐阅读