【问题标题】:Is it possible to mount different volumes to pods of the same deployment是否可以将不同的卷安装到同一部署的 pod
【发布时间】:2019-01-04 02:15:15
【问题描述】:

我有一个带有一群工人的 gce 气流(作曲家)集群:

$ kubectl get pods
NAME                                 READY     STATUS    RESTARTS   AGE
airflow-redis-0                      1/1       Running   0          7h
airflow-scheduler                    2/2       Running   0          7h
airflow-sqlproxy                     1/1       Running   0          8h
airflow-worker                       50/50     Running   0          7h
composer-fluentd-daemon              1/1       Running   0          7h
composer-fluentd-daemon              1/1       Running   0          7h

我还有一堆独特的持久 NFS 卷,其中包含需要处理的数据。有没有办法将不同的 NFS 卷动态挂载到每个相应的工作人员。

或者,是否可以在工作程序中调用 DockerOperator 来挂载与其特定工作负载相关的 NFS 卷。

理论上工作流程是:Spin up 1x worker per Dataset > Get Dataset > Run Dataset through Model > Dump results

实现此目的的一种方法是将数据集下载到正在处理它的给定 pod;但是,这些数据集每个有数百 GB,需要针对不同的模型进行多次处理。

最终我们计划将所有这些数据放在 BigTable 中,但我需要在概念上证明使用具有数百 GB 数据的卷,然后才能获得批准以启动具有多个 tb 数据的 BigTable 集群在里面。

输入赞赏。用更好的解决方案告诉我我做错了也是一个可行的答案。

【问题讨论】:

标签: kubernetes google-compute-engine airflow google-kubernetes-engine


【解决方案1】:

根据定义,部署使用一组相同的副本作为 pod(即 ReplicaSet)。因此,部署的所有 pod 都将具有 PodSpec,指向同一个卷。

听起来您需要自己编写一些自定义逻辑来协调启动具有不同卷的新工作负载(即作业)。

您可以通过简单地在循环中部署一个调用 kubectl 的 bash 脚本(默认情况下,pod 内的 kubectl 可以直接工作)来做到这一点。或者您可以编写一些使用 Kubernetes API 并进行一些 API 调用以发现新卷、创建工作负载来处理它们(然后可能清理卷)的东西。

【讨论】:

    【解决方案2】:

    您描述的工作流程更适合Job 的模型,而不是普通(长时间运行的)Pod。您需要为每个指向其各自数据的任务创建一个单独的作业规范,如果您的集群正在执行其他工作,您需要注意您的批量数据处理 pod 不会压倒可用的计算资源。

    您实际上有不同的 NFS 卷(服务器名称/导出的目录),还是一个 NFS 卷中只有许多文件树?如果是后者,另一条可能适合您的路径是设置一个像RabbitMQ 这样的排队系统,并将所有路径加载到那里的队列中。然后,您将编写一个长时间运行的进程,该进程从队列中连续读取单个项目,对其执行任何需要的工作,写入其结果,提交工作项目,然后重复(在单个线程中)。然后,您可以使用 Deployment 将其扩展到所需的并行处理量。

    无论如何,您的输出表明您正在直接使用裸 pod,并尝试通过在单个 pod 中拥有许多并行工作容器来扩展工作人员。最好使用更高级别的控制器之一(通常是 Deployment)并使用其 replicas: 控件来启动所描述 pod 的多个副本。除其他外,这将允许您将负载分散到多个节点,并允许您进行滚动更新,其中 pod 会逐渐重新启动,从而避免在更改基础图像或 pod 的其他细节时出现中断。

    【讨论】:

    • Do you actually have distinct NFS volumes 是的,无论如何这就是计划……如果我们将所有数据保存在一个 NFS 卷上并让数千个节点都对其进行随机读取……它会继续被狠狠地揍了一顿。
    • 副本是我打算扩大/缩小工人的方式......但是如果我必须按照 Ahmet 的建议为每个数据集生成唯一的工人......我可能不得不重新考虑这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多