多个 PersistentVolumeClaims 可以绑定到同一个本地存储 PersistentVolume 吗?
Can multiple PersistentVolumeClaims bind to the same local-storage PersistentVolume?
我想知道是否有可能多个 PersistentVolumeClaims 绑定到同一个 local persistent volume。
我的用例如下:我想构建一个守护进程集,它将在集群的每个节点(节点的本地磁盘上)上写入一些数据(实际上是相同的数据)。然后,在任何节点上调度的任何其他 pod 都应该能够读取该数据。基本上是一种节点级别的一次写入多次读取策略。
我知道我可以使用 hostPath 类型的卷来做到这一点,但它有点难以管理,所以我发现本地存储是更好的方法。
我的愿望是:
- 使用 ReadWriteOnce 和 ReadOnlyMany 访问模式
创建本地持久卷(名为 pv)
- 使用 ReadWriteOnce 访问模式创建第一个持久卷声明 (pvc1),并在将数据写入卷的 DaemonSet 中使用它。所以 pvc1 应该绑定到 pv
- 使用 ReadOnlyMany 访问模式创建第二个持久卷声明 (pvc2),该模式在读取该数据的任何其他 pod 中使用(因此 pvc2 也应该绑定到 pv)
这可能吗?
我读到如果一个 PVC 绑定到一个 PV,那么那个 PV 就是 "locked",这意味着没有其他 PVC 可以绑定到它。真的是这样吗?如果对于那种场景来说似乎有点限制,我们有一次写入多次读取操作。
谢谢!
RWO 卷类型的 DaemonSet 和 PVC 不能很好地混合,因为所有 DaemonSet 将共享相同的 PVC。对于本地卷,这将导致只有一个副本被调度,因为它限制所有 Pods 使用该 PVC 仅被调度到一个节点。
您可以通过使用 StatefulSet 来解决这个问题,它支持 volumeClaimTemplates
为每个副本创建一个 PVC,并使其扩展到集群中的节点数量。但是,您的用户 pods 然后需要知道并选择要使用的特定 PVC,而不是使用该节点上的任何内容。
我认为通过编写 CSI driver 可以更好地解决您的用例。它有一个 DaemonSet 组件,在驱动程序启动时可以初始化数据。然后当它实现 NodePublishVolume
(又名挂载到 pod 中)时,它可以将数据目录绑定挂载到 pod 的容器中。您可以将此卷类型设置为 RWX,并且您可能不需要实现任何用于配置或附加的控制器例程。
我想知道是否有可能多个 PersistentVolumeClaims 绑定到同一个 local persistent volume。
我的用例如下:我想构建一个守护进程集,它将在集群的每个节点(节点的本地磁盘上)上写入一些数据(实际上是相同的数据)。然后,在任何节点上调度的任何其他 pod 都应该能够读取该数据。基本上是一种节点级别的一次写入多次读取策略。
我知道我可以使用 hostPath 类型的卷来做到这一点,但它有点难以管理,所以我发现本地存储是更好的方法。
我的愿望是:
- 使用 ReadWriteOnce 和 ReadOnlyMany 访问模式 创建本地持久卷(名为 pv)
- 使用 ReadWriteOnce 访问模式创建第一个持久卷声明 (pvc1),并在将数据写入卷的 DaemonSet 中使用它。所以 pvc1 应该绑定到 pv
- 使用 ReadOnlyMany 访问模式创建第二个持久卷声明 (pvc2),该模式在读取该数据的任何其他 pod 中使用(因此 pvc2 也应该绑定到 pv)
这可能吗?
我读到如果一个 PVC 绑定到一个 PV,那么那个 PV 就是 "locked",这意味着没有其他 PVC 可以绑定到它。真的是这样吗?如果对于那种场景来说似乎有点限制,我们有一次写入多次读取操作。
谢谢!
RWO 卷类型的 DaemonSet 和 PVC 不能很好地混合,因为所有 DaemonSet 将共享相同的 PVC。对于本地卷,这将导致只有一个副本被调度,因为它限制所有 Pods 使用该 PVC 仅被调度到一个节点。
您可以通过使用 StatefulSet 来解决这个问题,它支持 volumeClaimTemplates
为每个副本创建一个 PVC,并使其扩展到集群中的节点数量。但是,您的用户 pods 然后需要知道并选择要使用的特定 PVC,而不是使用该节点上的任何内容。
我认为通过编写 CSI driver 可以更好地解决您的用例。它有一个 DaemonSet 组件,在驱动程序启动时可以初始化数据。然后当它实现 NodePublishVolume
(又名挂载到 pod 中)时,它可以将数据目录绑定挂载到 pod 的容器中。您可以将此卷类型设置为 RWX,并且您可能不需要实现任何用于配置或附加的控制器例程。