在 Kubernetes 中使用不同的 PV 时,是否可以在不同的命名空间中使用相同名称的 PVC?

sil*_*exf 4 storage namespaces kubernetes persistent-volumes persistent-volume-claims

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

它看起来是这样的:

$ kubectl get ns | grep prod
prod-01          Active    178d
prod-02          Active    8d
$ 
Run Code Online (Sandbox Code Playgroud)

如下所示,每个命名空间有 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
$ 
Run Code Online (Sandbox Code Playgroud)

以下是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
$ 
Run Code Online (Sandbox Code Playgroud)

这就是我想要实现的目标:

$ 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
$ 
Run Code Online (Sandbox Code Playgroud)

如上所示,prod-02命名空间的 pvc 永远处于待处理状态。

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

这让我认为我不能在 pvc 上使用相同的名称,即使它们位于不同的命名空间并指向不同的 pv ...但是,在搜索文档时,我找不到任何关于此问题的证据,并且想知道如果我可能会错过一些东西。

简而言之,我可以在不同的命名空间中拥有多个具有相同名称的 pvc(考虑到它们使用不同的 pv)吗?


更新:结果kubectl describe 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>
$ 
Run Code Online (Sandbox Code Playgroud)

这也是以下的输出kubectl get pvc

$ kubectl get pvc app-db --namespace=prod-02  -o yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  creationTimestamp: 2018-09-22T22:00:34Z
  name: app-db
  namespace: prod-02
  resourceVersion: "43027607"
  selfLink: /api/v1/namespaces/prod-02/persistentvolumeclaims/app-db
  uid: ee81b951-beb2-11e8-b972-005056bbded7
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 50Gi
  volumeName: prod-02-db-pv
status:
  phase: Pending
$ 
Run Code Online (Sandbox Code Playgroud)

以下是有关光伏的一些详细信息:

$ 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
$ 
Run Code Online (Sandbox Code Playgroud)

先谢谢您的帮助!

Har*_*chu 6

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

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

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

nfs:
path: /nfs_server/prod01/db
server: 158.87.52.35
Run Code Online (Sandbox Code Playgroud)