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

Posted

技术标签:

【中文标题】在 k8s PersistentVolume 清单文件下定义 claimRef 时命名空间是强制性的吗?【英文标题】:is namespace mandatory while defining claimRef under k8s PersistentVolume manifest file? 【发布时间】:2021-09-18 04:54:43 【问题描述】:

以下是我的场景。 我有一个 NFS 设置,它将用于创建 PV。然后使用 PVC 绑定卷。 现在,考虑一下我想将特定的 PV/PVC 绑定在一起,而不管 PVC 将在哪里创建。据我尝试,如果不将命名空间带入图片,我就无法绑定 PV/PVC。由于我使用 helm 图表进行部署,并且命名空间可以是任何东西(使用可以创建/使用任何命名空间),因此我不想限制 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 中不提供命名空间选项,但没有成功。

对此的任何帮助将不胜感激。

【问题讨论】:

能否提供kubectl describe pvc &lt;pvcname的输出 无法在此处评论完整回复 【参考方案1】:

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

PVC 是命名空间资源,而 PV 不是命名空间资源。
kubectl api-resources | grep 'pv\|pvc\|NAME'
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
persistentvolumeclaims            pvc          v1                                     true         PersistentVolumeClaim
persistentvolumes                 pv           v1                                     false        PersistentVolume
因此,在多个命名空间中可以有多个具有相同“名称”的 PVC。 因此,当我们在 claimRef 下提及 pvc 的名称时,我们需要提及名称 空间。

【讨论】:

感谢您的澄清。是的!我也有同样的感觉。因此想检查是否有其他方法。如果那不可能,那么我必须将部署限制在特定的命名空间.. :(

以上是关于在 k8s PersistentVolume 清单文件下定义 claimRef 时命名空间是强制性的吗?的主要内容,如果未能解决你的问题,请参考以下文章

k8s PersistentVolume hostpath 简单使用

k8s的PV/PVC

k8s存储PV与PVC使用详解

Kubernetes K8S之存储Volume详解

Kubernetes(k8s)之编写资源清单

k8s资产清单