跨命名空间的 Shared PersistenceVolumeClaim(PVC)
Shared PersistenceVolumeClaim(PVC) across namespaces
是否可以从命名空间 B 引用 PVC(在命名空间 A 中)。为什么我需要那个?我想让客户(私有云)通过 PVC 指向他们的卷,让他们完全控制存储。在 Helm 安装时将询问 PVC 信息,并将在 pod 规范中使用。
看起来不可能,因为PersistentVolumeClaim
是一个命名空间对象。您可以在这里查看详细答案:
如果您使用的是支持 ReadWriteMany 的卷(如 NFS/EFS),您可以创建多个指向同一个 NFS 卷的持久卷 (PV),一个用于要创建 PVC 的每个名称空间.它们都可以在相同的路径下使用相同的 NFS 卷,或者指定不同的子路径以将它们限制在特定的目录中。
我们的解决方案如下:
- 首先,要求源PV的persistentVolumeReclaimPolicy必须是Retain.
- 其次,我们应该在源 PVC 中添加一个 annotation 像这样:
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
创建卷如下:
CSI从[=中取出pvc-ref和pvc-ref-namespace CreateVolume界面中的20=]CreateVolumeRequest.Parameters:
- 根据pvc-ref和pvc-ref-namespace[=57=找出来源PVC ],从源PVC中取出pvc-shared-namespaces,判断新PVC的命名空间是否在里面,如果是,转2,否则拒绝创建;
- 确定新PVC的StorageClass的reclaimPolicy为保留,如果是则转3,否则拒绝创建;
- 从源PVC中找到源PV,根据CreateVolumeResponse构造一个PV来源 PV.
Note: The returned VolumeId is the Spec.CSI.VolumeHandle field of the source PV. After finding the source PV, you can determine whether the persistentVolumeReclaimPolicy of the source PV is Retain. If not, refuse to create.
是否可以从命名空间 B 引用 PVC(在命名空间 A 中)。为什么我需要那个?我想让客户(私有云)通过 PVC 指向他们的卷,让他们完全控制存储。在 Helm 安装时将询问 PVC 信息,并将在 pod 规范中使用。
看起来不可能,因为PersistentVolumeClaim
是一个命名空间对象。您可以在这里查看详细答案:
如果您使用的是支持 ReadWriteMany 的卷(如 NFS/EFS),您可以创建多个指向同一个 NFS 卷的持久卷 (PV),一个用于要创建 PVC 的每个名称空间.它们都可以在相同的路径下使用相同的 NFS 卷,或者指定不同的子路径以将它们限制在特定的目录中。
我们的解决方案如下:
- 首先,要求源PV的persistentVolumeReclaimPolicy必须是Retain.
- 其次,我们应该在源 PVC 中添加一个 annotation 像这样:
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
创建卷如下:
CSI从[=中取出pvc-ref和pvc-ref-namespace CreateVolume界面中的20=]CreateVolumeRequest.Parameters:
- 根据pvc-ref和pvc-ref-namespace[=57=找出来源PVC ],从源PVC中取出pvc-shared-namespaces,判断新PVC的命名空间是否在里面,如果是,转2,否则拒绝创建;
- 确定新PVC的StorageClass的reclaimPolicy为保留,如果是则转3,否则拒绝创建;
- 从源PVC中找到源PV,根据CreateVolumeResponse构造一个PV来源 PV.
Note: The returned VolumeId is the Spec.CSI.VolumeHandle field of the source PV. After finding the source PV, you can determine whether the persistentVolumeReclaimPolicy of the source PV is Retain. If not, refuse to create.