部署具有相关环境变量的多个容器的最佳实践是什么?

时间:2018-08-25 20:27:37

标签: docker kubernetes data-science terraform data-processing

我正在尝试部署并行数据处理任务,该任务使用许多具有相同docker映像的容器,每个容器将使用不同的递增环境变量运行。该图像设置为读取环境变量,以确定要处理的较大列表的哪个部分。

背景:我最初使用的是bash脚本,该脚本将递增的env var传递给docker run命令,但现在我想要一种更好的方法来管理/监视所有容器。我只有使用Kubernetes进行应用程序服务的经验,但似乎也可以更好地协调我的多容器任务。

想知道在Kubernetes YAML配置中是否可以进行这种动态环境变量传递,因为我更喜欢声明性配置而不是Shell脚本。我也不确定在Kubernetes中执行此操作的最佳方法,无论是多个单独的容器,多容器容器还是以某种方式使用副本。

我愿意接受建议,我知道Terraform之类的其他工具也可能对这种程序化基础结构有所帮助。

2 个答案:

答案 0 :(得分:1)

我的理解是,您想做类似https://kubernetes.io/docs/tasks/job/parallel-processing-expansion/的操作,其中从模板创建作业,为模板中的每个数据项创建一个。但是,您不希望将其编写为shell脚本。

我想象可以使用头盔来代替Job,它具有范围功能,因此可以设置一个图表来为values.yaml部分中的每个条目创建作业。因此它可能会占用与您建议的地形相似的空间。 Ansible也可以选择。

但是,这个问题的发展方向似乎是朝着批处理调度的方向发展。我想知道您的工作是否会发展到最终相互依赖等。如果是这样,Helm and Kubernetes: Is there a barrier equivalent for jobs?https://www.quora.com/Is-Kubernetes-suited-for-long-running-batch-jobs可以在这里提供帮助。目前,Kubernetes具有运行批处理作业的功能以及使批处理调度系统能够运行或在其上构建的工具,但它本身并不包含现成的批处理调度系统。因此,人们目前正在使用各种不同的方法来满足他们的需求。

答案 1 :(得分:0)

如何使用Parallel Processing Using Work Queue通过.spec.parallelism将不同的环境变量传递到k8s作业窗格。尽管根据您要执行的操作,为工作队列提供单独的服务可能有点过多。

另一个想法可能是使用头盔模板功能来创建k8s清单文件。我创建了一个示例舵图,以给出模板并行处理的想法。参见git repo - helm-parallel-jobs。一旦克隆了git repo,就可以安装helm chart进行并行处理。作业模板与k8s documentation使用的模板相同。如下面的输出所示,提供了三种不同的环境变量-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