【问题标题】:Can multiple PersistentVolumeClaims bind to the same local-storage PersistentVolume?多个 PersistentVolumeClaims 可以绑定到同一个本地存储 PersistentVolume 吗?
【发布时间】:2019-02-19 23:03:50
【问题描述】:

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

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

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

我的愿望是:

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

这可能吗?

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

谢谢!

【问题讨论】:

    标签: kubernetes persistent-volumes persistent-volume-claims


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢您的回答!
    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多