跨名称空间共享PersistenceVolumeClaim(PVC)

时间:2018-06-21 00:28:42

标签: kubernetes kubernetes-pvc

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果使用具有ReadWriteMany功能的卷(如NFS / EFS),则可以创建指向同一NFS卷的多个持久卷(PV),每个要在其中创建PVC的命名空间均一个。它们都可以在同一路径上使用相同的NFS卷,或指定不同的subPath来将它们约束到某些目录。

答案 2 :(得分:0)

我们的解决方案如下:

  • 首先,它要求源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.Parameters 中取出 pvc-refpvc-ref-namespace >CreateVolume 界面:

  1. 根据pvc-refpvc-ref-namespace找出源PVC,取出pvc-shared-源PVC中的namespaces,判断新PVC的namespace是否在其中,如果是则转2,否则拒绝创建;
  2. 确定新PVCStorageClassreclaimPolicyRetain,如果是,请转到3、否则拒绝创建;
  3. 从源PVC中找到源PV,并基于源PV构造一个CreateVolumeResponse
<块引用>

注意:返回的VolumeId是源PVSpec.CSI.VolumeHandle字段。找到源PV后,可以判断源PVpersistentVolumeReclaimPolicy是否为Retain。如果没有,拒绝创建。