docker - 部署多个具有相关环境变量的容器的最佳实践是什么?
问题描述
我正在尝试部署一个并行数据处理任务,该任务使用相同 docker 映像的许多容器,每个容器都使用不同的递增环境变量运行。该图像设置为读取环境变量,以确定要处理的较大列表的哪一部分。
背景:我最初使用的 bash 脚本将递增的 env var 传递给 docker run 命令,但现在我想要一种更好的方法来管理/监视所有容器。我只有将 Kubernetes 用于应用程序服务的经验,但它似乎也是编排我的多容器任务的更好方法。
想知道在 Kubernetes YAML 配置中是否可以进行这种动态环境变量传递,因为我更喜欢声明性配置而不是 shell 脚本。我也不确定在 Kubernetes 中执行此操作的最佳方法是多个单独的 pod、多容器 pod,还是以某种方式使用副本。
我愿意接受建议,我知道 Terraform 等其他工具也可能对这种编程基础设施有所帮助。
解决方案
使用Parallel Processing Using Work Queue将不同的环境变量通过 .spec.parallelism 传递给您的 k8s 作业 pod 怎么样。尽管根据您要执行的操作,为工作队列提供单独的服务可能有点过多。
另一个想法是使用 helm 模板功能来创建 k8s 清单文件。我创建了一个示例舵图,以提供模板并行处理的想法。请参阅git repo - helm-parallel-jobs。一旦你克隆了 git repo,你就可以像这样安装 helm chart 进行并行处理。作业模板与k8s 文档使用的模板相同。如下面的输出所示,提供了三个不同的环境变量 - apple、banana、cherry,它们创建了 3 个不同的 pod,并将环境变量传递给它们。
[root@jr]# helm install --set envs='{apple,banana,cherry}' --name jobs ./helm-parallel-jobs/example/parallel-jobs
NAME: jobs
LAST DEPLOYED: Sun Aug 26 16:29:23 2018
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1/Job
NAME DESIRED SUCCESSFUL AGE
process-item-apple 1 0 0s
process-item-banana 1 0 0s
process-item-cherry 1 0 0s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
process-item-apple-dr6st 0/1 ContainerCreating 0 0s
process-item-banana-d2wwq 0/1 ContainerCreating 0 0s
process-item-cherry-wvlxz 0/1 ContainerCreating 0 0s
推荐阅读
- python - 无法将 Discord.py 机器人成功部署到使用 mongoDB 存储数据的 Heroku
- javascript - 我可以将 x-template 脚本导入 HTML 文件吗?
- php - PHP Array 只显示最后推送的值
- npm - npm 发布:详细堆栈错误:400 错误请求
- sed - grep并替换bash中的多行值
- macos - Docker 无法连接到 docker daemon macOS
- c - 如何在物理内存中获取二进制数据(windows)(c语言)
- javascript - JavaScript 对象和动态属性调用
- ros - 柳絮一号如何使用非柳絮包
- excel - 在 Excel 中使用公式遇到一些问题