kubernetes - 当并行度设置> 1时如何获得1个initContainer
问题描述
我在下面定义的 Kubernetes 中有一份工作(为简洁起见,有一些遗漏)。设置了并行度和 N 次完成。我想要 1 个初始化容器来延迟并行容器的启动。当我按原样运行它时,每次出现的完成都会得到一个初始化容器。
apiVersion: batch/v1
kind: Job
metadata:
name: my-job
spec:
parallelism: 10
completions: 10
backoffLimit: 0
template:
spec:
# I want 1 of these to run first
initContainers:
- name: init-container
image: my/container:latest
imagePullPolicy: Always
command: ["init_script.sh"]
# I want 10 of these to run in parallel once init_script.sh exits
containers:
- name: container
image: my/container:latest
imagePullPolicy: Always
command: ["run_job.sh"]
restartPolicy: Never
解决方案
Kubernetes Jobs 是非常基础的,不提供任何具有调度依赖的高级调度机制。例如,在另一项工作完成后开始一项工作的能力。我的建议是在 Kubernetes 之上使用更高级的调度工具。您可以使用的开源软件很少。例如。
- Volcano - 例如,您可以使用该
TaskCompleted
事件。 - Airflow - 您可以直接从工具中安排 pod 并构建您的DAG(有向无环图)。
- 等等。
其他两种选择:
✌️
推荐阅读
- amazon-web-services - AWS 事件日志命令
- javascript - 插件系统的电子前端
- java - Java 源文件无法从同一个包中导入已编译的 .class 文件
- laravel - 在 laravel 中安装模板
- php - 在 Laravel 中搜索逗号分隔的数据库字段并显示超过 4 个匹配数字的详细信息
- angular - 使用带有 Mat 弹出窗口的反应式控件 - Angular 7
- visual-studio - vusial studio 中的错误(E0869,无法设置区域设置“.1252”)
- sql - 在 oracle 中删除集合的重复项
- java - Java 的 ActiveProcessorCount 是否限制了 JVM 可以使用的 CPU 数量?
- android - 如何通过 exoplayer 播放 mp4?