kubernetes 跨命名空间的共享持久性VolumeClaim(PVC)

ybzsozfc  于 2023-02-03  发布在  Kubernetes
关注(0)|答案(4)|浏览(499)

是否可以从命名空间B引用PVC(在命名空间A中)。为什么需要这样做?我希望允许客户(私有云)通过PVC指向其卷,从而允许他们完全控制存储。在Helm安装时,将要求提供PVC信息,并将在Pod规范中使用。

trnvg8h3

trnvg8h31#

这看起来不可能,只是因为PersistentVolumeClaim是一个命名空间对象。您可以在这里查看详细的答案:https://stackoverflow.com/a/35366775/9065705

oknwwptz

oknwwptz2#

如果使用支持读写多个卷(如NFS/EFS),则可以创建指向同一NFS卷的多个永久卷(PV),每个永久卷对应一个要在其中创建PVC的命名空间。它们都可以使用同一路径下的同一NFS卷,或者指定不同的子路径以将它们限制到某些目录。

yzckvree

yzckvree3#

以防有人从谷歌来到这里:现在可以使用Kubernetes 1.26(Alpha版本):https://kubernetes.io/docs/concepts/storage/persistent-volumes/#cross-namespace-data-sources

sg24os4d

sg24os4d4#

我们的解决方案如下:

  • 首先,它要求源PVpersistentVolumeReclaimPolicy必须为Retain
  • 其次,我们应该在源代码PVC中添加一个注解,如下所示:
pvc-shared-namespaces: NS1, NS2
  • 第三,当我们希望通过源PVC共享PV时,我们可以在第二个PVC中添加两个**注解 *,如下所示:
pvc-ref: pvc-1  # the name of the source PVC
pvc-ref-namespace: pvc-1-ns  # the namespace of the source PVC

卷创建如下:

CSICreateVolumeRequest中取出pvc-refpvc-ref命名空间**。CreateVolume接口中的参数**:

1.根据pvc-refpvc-ref-namespace找到源PVC,从源PVC中取出pvc-shared-namespaces,判断其中是否有新PVC的命名空间,如果有则执行2,否则拒绝创建;
1.判断新的PVCStorageClassreclaimPolicyRetain,如果是则执行3,否则拒绝创建;
1.从源PVC中找到源PV,并基于源PV构造CreateVolumeResponse
注意:返回的VolumeId为来源PVSpec.CSI.VolumeHandle字段,找到来源PV后,可以判断来源PVpersistentVolumeReclaimPolicy是否为Retain,否则拒绝创建。

相关问题