Можно ли использовать PVC с одинаковым именем в разных пространствах имен при использовании разных PV в Kubernetes? - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть 2 разных пространства имен: prod-01 и prod-02 . Я хочу создать копию моего prod-01 в prod-02 пространство имен с одинаковыми именами для своих pvcs, так что мне не нужно поддерживать 2 набора диаграмм для каждого отдельного пространства имен.

Вот как это выглядит:

$ 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
$ 

Вот как pvc для prod-01 отображаются:

$ 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 пространство имен застряло навсегда с состоянием Pending .

Когда я меняю имена пвх на prod-02 на что-то другое, они связываются, как и ожидалось.

Что заставляет меня думать, что я не могу использовать то же самоеимена на пвх, даже если они находятся в разных пространствах имен и указывают на разные пв ... Однако при поиске документации я не смог найти никаких доказательств этой проблемы, и мне было интересно, не могу ли я что-то упустить.

Проще говоря, могу ли я иметь несколько пвх с одинаковым именем в разных пространствах имен (учитывая, что они используют разные пвх)?


Обновление: результат 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>
$ 

Также вот вывод 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
$ 

И вот некоторые подробности о 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
$ 

Заранее спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Обнаружил причину моей проблемы по следующей ссылке из документации OpenShift:

Оказывается, проблема связананеправильное использование demandRefs в файле yaml, используемом для создания prod-02 pv, вот полное объяснение:

Указание имени тома в вашемPVC не предотвращает связывание другого PVC с указанным PV раньше, чем ваш.Ваша заявка останется в ожидании до тех пор, пока PV не станет доступным.

Указание requestRef в PV не предотвращает привязку указанного PVC к другому PV.PVC может выбрать другой PV для связывания в соответствии с обычным процессом связывания.Поэтому, чтобы избежать этих сценариев и убедиться, что ваша заявка связана с нужным томом, вы должны убедиться, что указаны и volumeName, и demandRef.и воссоздавая мои pv, pvc начал связываться, как и ожидалось, даже с тем же именем, используемым в других пространствах имен: -)

0 голосов
/ 23 сентября 2018

PVC - это ресурс пространства имен, но не PV.то есть, вы можете иметь несколько PVC с одинаковыми именами в разных пространствах имен.

Могут возникнуть проблемы с настройкой pv.

Можете ли вы убедиться, что используете правильный ipадрес в конфигурации pv под атрибутом nfs:

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