我想知道多个PersistentVolumeClaims是否可能绑定到同一个本地持久卷。
我的用例如果如下:我想构建一个守护进程集,它将在我的集群的每个节点上(在节点的本地磁盘上)写入一些数据(实际上是相同的数据)。然后,任何节点上安排的任何其他pod应该能够读取该数据。基本上是节点级别的一次写入多次读取策略。
我知道我可以使用hostPath类型的卷来做到这一点,但它有点难以管理,因此我发现本地存储将是一种更好的方法。
我的愿望如下:
使用ReadWriteOnce和ReadOnlyMany访问模式创建本地持久卷(名为pv)
使用ReadWriteOnce访问模式创建第一个持久卷声明(pvc1),并在DaemonSet中使用它来写入卷中的数据。所以pvc1应该绑定到pv
使用ReadOnlyMany访问模式创建第二个持久卷声明(pvc2),该模式在读取该数据的任何其他pod中使用(因此pvc2也应绑定到pv)
这可能吗?
我读到,如果PVC与PV绑定,则该PV被“锁定”,这意味着没有其他PVC可以绑定它。这真的是这样吗?如果对于那种场景似乎有点限制,我们有一次写入 - 多次读取操作。
RWO卷类型的DaemonSets和PVC混合不好,因为所有DaemonSets将共享相同的PVC。对于本地卷,这将导致仅调度一个副本,因为它限制使用该PVC的所有Pod仅被调度到一个节点。
您可以通过使用StatefulSet来解决此问题,StatefulSet支持volumeClaimTemplates每个副本创建一个PVC,并使其扩展到群集中的节点数。但是,您的用户pod需要知道并选择要使用的特定PVC,而不是使用该节点上的任何内容。
我认为通过编写CSI驱动程序可以更好地解决您的用例问题。它有一个DaemonSet组件,在驱动程序启动时可以初始化数据。然后当它实现NodePublishVolume(也就是安装到pod中)时,它可以将数据目录绑定到pod的容器中。您可以将此卷类型设置为RWX,并且您可能不需要实现任何用于配置或附加的控制器例程。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。