开发者社区> 问答> 正文

多个PersistentVolumeClaims可以绑定到同一个本地存储PersistentVolume吗?

我想知道多个PersistentVolumeClaims是否可能绑定到同一个本地持久卷。

我的用例如果如下:我想构建一个守护进程集,它将在我的集群的每个节点上(在节点的本地磁盘上)写入一些数据(实际上是相同的数据)。然后,任何节点上安排的任何其他pod应该能够读取该数据。基本上是节点级别的一次写入多次读取策略。

我知道我可以使用hostPath类型的卷来做到这一点,但它有点难以管理,因此我发现本地存储将是一种更好的方法。

我的愿望如下:

使用ReadWriteOnce和ReadOnlyMany访问模式创建本地持久卷(名为pv)
使用ReadWriteOnce访问模式创建第一个持久卷声明(pvc1),并在DaemonSet中使用它来写入卷中的数据。所以pvc1应该绑定到pv
使用ReadOnlyMany访问模式创建第二个持久卷声明(pvc2),该模式在读取该数据的任何其他pod中使用(因此pvc2也应绑定到pv)
这可能吗?

我读到,如果PVC与PV绑定,则该PV被“锁定”,这意味着没有其他PVC可以绑定它。这真的是这样吗?如果对于那种场景似乎有点限制,我们有一次写入 - 多次读取操作。

展开
收起
k8s小能手 2019-02-22 15:54:40 2788 0
1 条回答
写回答
取消 提交回答
  • 整合最优质的专家资源和技术资料,问答解疑

    RWO卷类型的DaemonSets和PVC混合不好,因为所有DaemonSets将共享相同的PVC。对于本地卷,这将导致仅调度一个副本,因为它限制使用该PVC的所有Pod仅被调度到一个节点。

    您可以通过使用StatefulSet来解决此问题,StatefulSet支持volumeClaimTemplates每个副本创建一个PVC,并使其扩展到群集中的节点数。但是,您的用户pod需要知道并选择要使用的特定PVC,而不是使用该节点上的任何内容。

    我认为通过编写CSI驱动程序可以更好地解决您的用例问题。它有一个DaemonSet组件,在驱动程序启动时可以初始化数据。然后当它实现NodePublishVolume(也就是安装到pod中)时,它可以将数据目录绑定到pod的容器中。您可以将此卷类型设置为RWX,并且您可能不需要实现任何用于配置或附加的控制器例程。

    2019-07-17 23:29:11
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
对象的生命期管理 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载