跨命名空间共享持久卷声明(PVC)

28

我能否从namespace-B引用位于namespace-A中的PVC?为什么需要这样做呢?我想允许客户(私有云)通过PVC指定他们的卷,以便完全控制存储。在安装Helm时会要求提供PVC信息,并在pod规范中使用它。

4个回答

21

17
如果您正在使用支持ReadWriteMany的卷(如NFS / EFS),则可以创建多个指向相同NFS卷的持久卷(PV),每个要创建PVC的命名空间一个。 它们都可以在相同的路径下使用相同的NFS卷,或者指定不同的子路径将它们限制为特定目录。

4
你好。这方面有没有在线示例可用?我正在使用支持RWMany的Azure FS。我们如何“将不同命名空间中的卷指向一个PVC”? - Prathamesh dhanawade
这对我很有用,也是最简单的解决方案,动作最少。只需将您的卷配置复制粘贴到一个具有不同 name: 属性的新文件中,并在您的新 pvc 中引用卷。 - Daniel Quinn

5

1
据我所了解,这并不允许共享卷,而只是允许来自另一个命名空间的卷作为数据源。因此,它创建了一个单独的、独立的卷,该卷仅在开始时从其他命名空间中初始化数据。 - Marcel Krüger
非常感谢您的澄清。我应该在原始答案中强调这一点! - stiller_leser
非常感谢您的澄清。我应该在原始答案中强调这一点! - undefined

-3

我们的解决方案如下:

  • 首先,源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

以下是卷的创建过程:
在CreateVolume接口中,CSI从CreateVolumeRequest.Parameters中取出pvc-refpvc-ref-namespace
1. 基于pvc-refpvc-ref-namespace查找源PVC,取出pvc-shared-namespaces,判断新PVC的命名空间是否在其中,如果是,则进入步骤2,否则拒绝创建; 2. 确定新PVC的StorageClassreclaimPolicy是否为Retain,如果是,则进入步骤3,否则拒绝创建; 3. 从源PVC中找到源PV,并基于源PV构建一个CreateVolumeResponse
注意:返回的VolumeId是源PV的Spec.CSI.VolumeHandle字段。在找到源PV后,您可以确定源PV的persistentVolumeReclaimPolicy是否为Retain。如果不是,则拒绝创建。

2
你能提供文档链接吗?我在 Kubernetes 官方文档上找不到关于 pvc-shared-namespaces 的任何信息,甚至在谷歌上也没有。 - BeGreen
2
一个好主意,静怡,不过这个酷炫功能被提到的唯一地方是你在这里的评论:https://github.com/kubernetes/kubernetes/issues/97908#issuecomment-895989478。希望它真的能成为一个可行的解决方案,但似乎并不是那样。 ;-( - Volodymyr Melnyk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接