Kubernetes несколько pvc с набором состояний для каждого модуля против одного pvc для всех модулей?

Я развернул кластер Kubernetes с модулем с отслеживанием состояния для mysql. для каждой капсулы у меня разный ПВХ.

например: если 3 pod thn 3 5GB EBS PVC

Итак, какой способ лучше использовать один ПВХ для всех модулей или использовать разные ПВХ для каждого модуля.


person Harsh Manvar    schedule 26.12.2018    source источник
comment
Обычно вам НЕ требуется 1 ПВХ для каждой капсулы. Подразумевается, что блок примечаний является динамическим.   -  person Leon    schedule 26.12.2018
comment
Я использую statefulset с Dynamic Volume Provisioning для моего кластера репликации sql.   -  person Harsh Manvar    schedule 26.12.2018


Ответы (2)


StatefulSet должен использовать volumeClaimTemplates, если вы хотите иметь выделенное хранилище для каждого модуля набора. На основе этого шаблона создается PersistentVolumeClaim для каждого модуля и настраивается том, который будет привязан к этому утверждению. Сгенерированные имена PersistentVolumeClaims состоят из имени volumeClaimTemplate + имени модуля + порядкового номера. Итак, если вы добавите часть volumeClaimTemplate в свой StatefulSet YAML (и удалите определенные ссылки на persistentVolumeClaim), что-то вроде этого:

volumeClaimTemplates:
  - metadata:
      name: mysql-data    
    spec:
      resources:
        requests:
          storage: 10Gi
      accessModes:
      - ReadWriteOnce

Затем идите и создайте свой StatefulSet, и после того, как изучите один из его модулей (kubectl get pods pod-name-0 yaml), вы увидите что-то вроде этого (часть объема вывода):

volumes:
- name: mysql-data
  persistentVolumeClaim:
    claimName: mysql-data-pod-name-0.  | dynamically created claim based on the template 

Таким образом, с помощью volumeClaimTemplates вам не нужно создавать отдельные PVC самостоятельно, а затем в каждом отдельном StatefulSet ссылаться на этот PVC, который будет монтироваться в вашем контейнере по определенному mountPath (помните, что каждый модуль набора должен ссылаться на другой PVC, 1PVC- 1PV): Часть определения «контейнеров» вашего YAML Statefulset:

volumeMounts:
        - name: mysql-data   || references your PVC by -name(not PVC name itself) 
          mountPath: /var/lib/mysql

Таким образом, стремление к тому, чтобы каждый модуль набора имел выделенное хранилище и не использовал volumeClaimTemplates, приводит к множеству проблем и чрезмерных сложностей, связанных с управлением и масштабированием.

person Alexz    schedule 26.12.2018
comment
Большое спасибо за ответ, поэтому я не сомневаюсь, какой из них лучше использовать. стручки, имеющие ПВХ, или только один единственный ПВХ между стручками. - person Harsh Manvar; 26.12.2018
comment
Могу ли я использовать один общий том для набора состояний для моего кластера репликации mysql? - person Harsh Manvar; 27.12.2018
comment
PersistentVolumes поддерживают следующие различные режимы доступа, такие как accessModes: - ReadWriteOnce - ReadOnlyMany и т. Д. (Количество узлов, а не модулей). Поставщики хранилищ (EBS, GCE) будут иметь разные возможности, и режимы доступа каждого PV настроены на определенные режимы, поддерживаемые этим конкретным томом. В вашем случае с динамической подготовкой фактическое хранилище предоставляется динамически, PV создается и привязан к PVC (по крайней мере, так, как должно быть). - person Alexz; 27.12.2018
comment
Большое спасибо за ответ ..! это очень поможет - person Harsh Manvar; 27.12.2018

PVC привязывается к определенному PV. Для StatefulSet в большинстве мыслимых случаев вы хотите иметь PV, к которому может получить доступ только определенный модуль, чтобы данные не были повреждены попыткой записи из параллельного процесса / модуля (RWO, а не режим RWX).

Имея это в виду, вам понадобится PVC для каждой реплики в StatefulSet. Создание PVC для реплик очень быстро станет проблематичным, если будет сделано вручную, поэтому правильный способ сделать это - использовать volumeClaimTemplates, который будет динамически создавать PVC для вас по мере масштабирования вашего набора.

person Radek 'Goblin' Pieczonka    schedule 26.12.2018
comment
Большое спасибо за ваш ответ, он очень помогает развеять сомнения. Я новичок в Docker Kubernetes. - person Harsh Manvar; 26.12.2018
comment
Я знаю, что это старовато, но хочу прояснить одно сомнение. Если у меня есть две реплики модуля и я определил pvc в разделе шаблона модуля. Кроме того, я определил один том hostPath. Итак, будет ли здесь создано более одного тома (соответствующего каждому ПВХ) на каждом узле ?. В противном случае, как можно использовать hostPath pv для нескольких модулей. - person NumeroUno; 23.07.2019