kubernetes - 单个 kubernetes 作业是否可以包含具有不同并行度定义的多个 pod?
问题描述
我有一个批处理作业,它分解为 3 个任务,每个任务都依赖于之前的完成,然后才能开始:
- 运行单个 pod
- 并行运行 N 个 pod (
.spec.completions
=.spec.parallelism
= N) - 并行运行 M 个 pod (
.spec.completions
=.spec.parallelism
= M)
每个任务都有不同的资源需求(CPU/MEM/STORAGE)。目前,我开始作业#1,当它完成时,它运行一个kubectl
命令来启动作业#2,依此类推到作业#3。我有 3 份不同的工作。
我可以为这 3 个任务定义一个工作吗?
也许是这样的:
- 为任务 #1 运行单个 pod
- 在任务 #2 上定义初始化容器以等待任务 #1 完成
- 使用 N 为任务 #2 运行 N 个 pod
.spec.completions
- 在任务 # 上定义初始化容器以等待任务 #2 完成
.spec.completions
使用适用于任务 #3的不同方式为任务 #3 运行 M 个 pod
我不清楚我是否可以在同一个工作下为不同的 pod定义单独的.spec.parallelism
和不同的 pod。.spec.completions
如果我可以定义单独的初始化容器来延迟后续任务的启动。
这可能都需要一个更完整的工作流引擎,比如 Argo(我们还没有)。
解决方案
Kubernetes Job Controller 基于 Job spec 中的单个 pod 模板创建一个 pod。所以不,你不能在 Job 中有多个 pod。
但是 kubernetes 是一个可扩展的系统,你可以定义自己的自定义资源并编写一个控制器,比如 Job 控制器,它支持具有不同并行度的多个 pod 模板。
推荐阅读
- objective-c - 防止 Xcode 在新标头上创建 NS_ASSUME_NONNULL_BEGIN 和 NS_ASSUME_NONNULL_END
- python - 不一致的“UnboundLocalError:分配前引用的局部变量”错误,该变量在函数内部定义
- angular - 如何使用带角度的 octobercms
- perforce - 在 perforce 中,如何删除指向目录的符号链接并在同一目录中添加文件?
- python - 打开一个JS文件,用Python编辑一行
- javascript - 如何从数组Javascript中的最后一个元素中删除空格
- android - PreferenceFragmentCompat 的 iconSpaceReserved 默认为 true
- rest - 使用过期授权令牌请求的公开可用 api 资源的正确行为
- php - 如何避免mysql查询中的like语句为空
- symfony - VueJS - 如何在没有 vue-fontawesome 的情况下导入 import fontawesome-free 5?