在 Kubernetes 的工作节点之间共享存储/卷?

Posted

技术标签:

【中文标题】在 Kubernetes 的工作节点之间共享存储/卷?【英文标题】:Share storage/volume between worker nodes in Kubernetes? 【发布时间】:2019-03-14 15:50:36 【问题描述】:

是否有可能在 Kubernetes 的不同工作节点中存在一个应用程序的两个 pod/实例之间共享一个集中式存储/卷?

所以解释一下我的情况:

我有一个带有 2 个工作节点的 Kubernetes 集群。在其中的每一个中,我都有 1 个应用程序 X 实例正在运行。这意味着我有 2 个应用 X 实例完全同时运行。

两个实例都订阅主题 topicX,该主题有 2 个分区,并且是 Apache Kafka 中名为 groupX 的消费者组的一部分。

据我了解,消息负载将在分区之间分配,但也会在消费者组中的消费者之间分配。到目前为止一切顺利,对吧?

所以我的问题:

在我的整个解决方案中,我有一个层次结构划分,具有国家和 ID 的唯一约束。 country 和 ID 的每个组合都有一个 pickle 模型(python 机器学习模型),该模型存储在应用程序访问的目录中。对于国家和 ID 的每种组合,我每分钟会收到一条消息。

目前我有 2 个国家/地区,因此为了能够正确扩展,我想在应用 X 的两个实例之间分配负载,每个实例处理自己的国家/地区。

问题在于,使用 Kafka,可以在不同实例之间平衡消息,并且要在不知道消息属于哪个国家/地区的情况下访问每个实例中的泡菜文件,我必须将泡菜文件存储在两个实例。

有没有办法解决这个问题?我宁愿让设置尽可能简单,以便以后轻松扩展和添加第三、第四和第五个国家/地区。

请记住,这是解释问题的一种过于简化的方式。现实中的实例数量要多得多。

【问题讨论】:

这可能会让你感兴趣https://github.com/kubernetes-incubator/nfs-provisioner 【参考方案1】:

是的。如果您查看this table,任何支持ReadWriteManyPV(物理卷)都可以帮助您为Kafka 工作人员实现相同的数据存储。综上所述:

Azure 文件 CephFS Glusterfs Quobyte NFS VsphereVolume -(在 pod 并置时工作) PortworxVolume

在我看来,NFS 是最容易实现的。请注意,Azurefile、Quobyte 和 Portworx 是付费解决方案。

【讨论】:

非常感谢,我一定会调查并尝试一下! 另一个要考虑的选项是按计划将泡菜文件下载到每个容器,或者如果它是静态的,则将其放入 ConfigMap。

以上是关于在 Kubernetes 的工作节点之间共享存储/卷?的主要内容,如果未能解决你的问题,请参考以下文章

云原生之kubernetes实战kubernetes集群下的存储持久化

云原生之kubernetes实战在kubernetes集群下部署Rainbond平台

Kubernetes存储

Kubernetes——存储卷(empyDirhostPathnfs)

k8s 概念 + 实操查看 pod 和工作节点

云原生之kubernetes实战在k8s集群下部署Weave Scope监控平台