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

Can multiple PersistentVolumeClaims bind to the same local-storage PersistentVolume?

我想知道是否有可能多个 PersistentVolumeClaims 绑定到同一个 local persistent volume

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

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

我的愿望是:

这可能吗?

我读到如果一个 PVC 绑定到一个 PV,那么那个 PV 就是 "locked",这意味着没有其他 PVC 可以绑定到它。真的是这样吗?如果对于那种场景来说似乎有点限制,我们有一次写入多次读取操作。

谢谢!

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

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

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