Kubernetes 是否可以使用PVC';当使用不同的PV';时,具有相同名称的将跨不同的命名空间;他在库伯内特斯?

Kubernetes 是否可以使用PVC';当使用不同的PV';时,具有相同名称的将跨不同的命名空间;他在库伯内特斯?,kubernetes,namespaces,storage,persistent-volumes,persistent-volume-claims,Kubernetes,Namespaces,Storage,Persistent Volumes,Persistent Volume Claims,我有两个不同的名称空间:prod-01和prod-02,我想做的是将prod-01的副本构建到prod-02名称空间中,保持其pvc的相同名称,这样我就不必为每个不同的名称空间维护两组图表 下面是它的样子: $ kubectl get ns | grep prod prod-01 Active 178d prod-02 Active 8d $ 如下所示,我为每个名称空间提供了2对pv: $ kubectl get pv -o wide | gr

我有两个不同的名称空间:prod-01prod-02,我想做的是将prod-01的副本构建到prod-02名称空间中,保持其pvc的相同名称,这样我就不必为每个不同的名称空间维护两组图表

下面是它的样子:

$ kubectl get ns | grep prod
prod-01          Active    178d
prod-02          Active    8d
$ 
如下所示,我为每个名称空间提供了2对pv:

$ kubectl get pv -o wide | grep prod
prod-01-db-pv                    50Gi       RWX            Retain           Bound       prod-01/app-db                                                                      164d
prod-01-nosql-db-pv              5Gi        RWX            Retain           Bound       prod-01/app-nosql-db                                                                149d
prod-02-db-pv                50Gi       RWX            Retain           Available   prod-02/app-db                                                          41m
prod-02-nosql-db-pv          5Gi        RWX            Retain           Available   prod-02/app-nosql-db                                                    19m
$ 
以下是用于prod-01的pvc的显示方式:

$ kubectl get pvc --namespace=prod-01
NAME              STATUS    VOLUME               CAPACITY   ACCESS MODES   STORAGECLASS   AGE
app-db         Bound     prod-01-db-pv         50Gi       RWX                           164d
app-nosql-db   Bound     prod-01-nosql-db-pv   5Gi        RWX                           149d
$ 
以下是我试图实现的目标:

$ kubectl get pvc --namespace=prod-02
NAME              STATUS    VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
app-db         Pending   prod-02-db-pv         0                                        2m
app-nosql-db   Pending   prod-02-nosql-db-pv   0                                        24m
$ 
如上所示,prod-02名称空间的pvc永远处于Pending状态

当我将prod-02上的pvc名称更改为任何不同的名称时,它们会按预期粘合

这让我觉得我不能在pvc上使用相同的名称,即使它们在不同的名称空间中并且指向不同的pv。。。然而,在搜索文档时,我找不到关于这个问题的任何证据,我想知道我是否遗漏了什么

简单地说,我可以在不同的名称空间中拥有多个同名的pvc吗(考虑到它们使用的是不同的pv)


更新:kubectl描述pvc的结果

$ kubectl describe pvc app-db --namespace=prod-02
Name:          app-db
Namespace:     prod-02
StorageClass:  
Status:        Pending
Volume:        prod-02-db-pv
Labels:        <none>
Annotations:   <none>
Finalizers:    []
Capacity:      0
Access Modes:  
Events:        <none>
$ 
以下是关于pv的一些细节:

$ kubectl get pv prod-02-db-pv --namespace=prod-02 -o yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  creationTimestamp: 2018-09-22T21:15:19Z
  name: prod-02-db-pv
  resourceVersion: "43020171"
  selfLink: /api/v1/persistentvolumes/prod-02-db-pv
  uid: 9c07d7a6-beac-11e8-b972-005056bbded7
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 50Gi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: app-db
    namespace: prod-02
  nfs:
    path: /nfs_server/prod02/db
    server: 158.87.52.35
  persistentVolumeReclaimPolicy: Retain
status:
  phase: Available
$ 


提前感谢您的帮助

PVC是命名空间资源,但不是PV。也就是说,您可以在不同的名称空间中拥有多个同名的PVC

您配置pv的方式可能存在问题

您能否确保在pv配置中,在
nfs
属性下使用正确的ip地址:

nfs:
path: /nfs_server/prod01/db
server: 158.87.52.35

在OpenShift文档的以下链接中找到问题的原因:

事实证明,该问题与用于创建prod-02pv的yaml文件中错误使用claimRefs有关,以下是完整的解释:

在PVC中指定volumeName不会阻止使用不同的PVC 从绑定到指定的PV。你的索赔将被驳回 在PV可用之前保持挂起状态

在PV中指定claimRef不会阻止指定的PVC 绑定到不同的PV。PVC可自由选择另一个PV来 根据正常的绑定过程绑定到。因此,要避免 这些场景并确保您的声明绑定到您需要的卷 如果需要,必须确保同时指定volumeName和claimRef


因此,在修复了claimRefs并重新创建了我的pv之后,pvc开始像预期的那样结合起来,即使在其他名称空间上使用了相同的名称:-)

你看到了什么
kubectl descripe pvc应用程序db--namespace=prod-02
在问题的底部包含了一个命令结果的更新。是的,IP是正确的。如前所述,当我创建一个具有不同名称的PVC时,它们会按预期绑定,当使用与其他命名空间相同的名称时,它们只会保持挂起状态。只是想知道为什么prod02 pv具有路径/nfs_server/prod01/dbSorry,我屏蔽了原始数据并插入了错误的信息,修复了它,谢谢
nfs:
path: /nfs_server/prod01/db
server: 158.87.52.35