在 k8s PersistentVolume 清单文件下定义 claimRef 时命名空间是强制性的吗?

is namespace mandatory while defining claimRef under k8s PersistentVolume manifest file?

以下是我的场景。 我有一个 NFS 设置,它将用于创建 PV。然后使用 PVC 绑定卷。 现在,考虑一下我想将特定的 PV/PVC 绑定在一起,而不管 PVC 将在何处创建。据我所知,如果不将名称空间引入图片,我无法绑定 PV/PVC 。由于我使用 helm 图表进行部署并且命名空间可以是任何东西(可以使用 create/use 任何命名空间)因此我不想限制 PV 仅在一个命名空间中查找 PVC,而是绑定到来自任何命名空间的匹配 PVC。

nfs-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs
  claimRef:
    name: nfs-pvc
    namespace: default   # This is something I wanna get rid off
  nfs:
    path: /apps/exports
    server: <nfs-server-ip>

nfs-pvc.yaml #这个我应该可以在任何命名空间中创建并附加到上面的 PVC。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
  namespace: fhir
spec:
  volumeName: nfs-pv
  storageClassName: nfs
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

我试过不给PV中的命名空间选项,但是没有用。

如有任何帮助,我们将不胜感激。

我认为这是不可能的,因为:

  • PVC 是名称spaced 资源,PV 不是名称spaced 资源。
kubectl api-resources | grep 'pv\|pvc\|NAME'
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
persistentvolumeclaims            pvc          v1                                     true         PersistentVolumeClaim
persistentvolumes                 pv           v1                                     false        PersistentVolume
  • 因此可以有多个具有相同 'name' 的 PVC 跨越多个名称space。 所以当我们在 claimRef 下提及 pvc 的名称时,我们需要提及名称 space 还有。