Невозможно подключить или смонтировать тома для реплик подов Postgres в OpenShift

У меня есть модуль postgres, развернутый на OpenShift, и PVC, который, я думаю, я правильно подключил, но могу ошибаться. Это мой ПВХ, и он правильно привязан -

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: postgres-pvc
spec:
 accessModes:
   - ReadWriteOnce
 resources:
   requests:
     storage: 1Gi
 storageClassName: xxxxx

Я создал поды postgres с PGDATA env, установленным на /var/lib/postgresql/pgdata, и смонтировал PVC следующим образом:

oc set volume dc/postgres --add --name=postgres-pvc --type=persistentVolumeClaim \
    --claim-name=postgres-pvc --mount-path=/var/lib/postgresql/pgdata --containers=postgres

Первоначально я пытался прикрепить PVC к /var/lib/postgresql/data, перезаписав исходный том контейнера, но он сказал, что есть проблемы с чем-то вроде подключения непосредственно к этому пути data папки, поэтому я использовал pgdata.

oc set volume dc/postgres --add --overwrite --name=postgres-volume-1 --type=persistentVolumeClaim \
  --claim-name=postgres-pvc --mount-path=/var/lib/postgresql/data --containers=postgres

Ошибка, которую я получаю сейчас, заключается в том, что когда я пытаюсь масштабировать модуль / добавлять реплику через DC, это дает следующие ошибки:

Unable to attach or mount volumes: unmounted volumes=[postgres-pvc], unattached volumes=[postgres-volume-1 postgres-pvc postgres-token-h7jvr]: timed out waiting for the condition

а также

Error while attaching the device pv pvc-b87b49ff-2bce-495c-b17f-b45f51eab27b cannot be attached to the node xx.xx.xxx.xx. Error: PV pvc-b87b49ff-2bce-495c-b17f-b45f51eab27b is already attached to another node xx.xx.xxx.x and there are active pods [postgres-7-6p6sz] using that

Это потому, что я неправильно смонтировал ПВХ? Или мне нужно создать новый PVC, а затем вручную обновить новый модуль для этого вновь созданного PVC?


person animusdx    schedule 28.04.2021    source источник


Ответы (1)


как вы видите ошибку

уже прикреплен к другому узлу xx.xx.xxx.x, и есть активные поды [postgres-7-6p6sz], использующие этот

вы используете блочное хранилище как pv, которое имеет accessModes ReadWriteOnce, что означает, что в любой момент времени том может быть присоединен к одному узлу Kubernetes, тогда на этом узле его может смонтировать под. Теперь, если вы хотите подключиться к другому модулю, вам нужно удалить существующий модуль, что заставит pv отключиться от предыдущего узла и повторно подключиться к новому узлу.

для получения дополнительных сведений постоянные тома /

person Suresh Vishnoi    schedule 28.04.2021
comment
Да, теперь, покопавшись, я вижу это. Я пытался создать новый PVC с ReadWriteMany, но оказалось, что класс блочного хранилища поддерживает только ReadWriteOnce. Хм, у вас случайно нет ясности в том, что я должен делать для целей HA? Должен ли я просто создавать новые ReadWriteOnce PVC, а затем вручную присоединять их к каждой новой реплике? - person animusdx; 28.04.2021
comment
Я думаю, это оговорка с ReadWriteOnce, я думаю, я бы посоветовал вам проверить набор состояний, который создает модуль и собственный ПВХ. - person Suresh Vishnoi; 28.04.2021
comment
Спасибо, думаю, мне нужно еще много прочитать, чтобы понять технические детали. По сути, при использовании StatefulSets эти реплики - это просто резервные реплики, правильно? Поскольку каждый из них использует свой собственный PVC, нужно ли мне писать какой-то боковой контейнер или что-то, что реплицирует данные между этими модулями? - person animusdx; 28.04.2021
comment
no worreis :) вот где важен интеллект приложения. Если само приложение с отслеживанием состояния не может реплицировать данные среди своего однорангового узла или кластера, тогда существует какое-то метаприложение, которое помогает достичь этой цели. Я предлагаю вам прочитать о шаблоне оператора и конкретном операторе для postgres. - person Suresh Vishnoi; 29.04.2021
comment
Это может быть полезно postgres-operator.readthedocs.io/en/latest - person Suresh Vishnoi; 29.04.2021