Kubernetes несколько ПВХ с Statefulset для каждого модуля против одного ПВХ для всех модулей? - PullRequest
0 голосов
/ 26 декабря 2018

У меня развернут кластер kubernetes с модулем отслеживания состояния для mysql.для каждого модуля у меня есть разные PVC.

, например: если 3 контейнера 3 5GB EBS PVC

SO Какой способ лучше использовать один PVC для всех модулей или использовать разные PVC для каждого модуля.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

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

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

Затем идите и создайте свой StatefulSet и after для проверки одного из его модулей (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 вам не нужно создавать отдельные PVCs самостоятельно, а затем в каждом отдельномStatefulSet ссылается на то, что PVC должен быть смонтирован в вашем контейнере с определенным mountPath (помните, что каждый модуль набора должен ссылаться на отдельный PVC, 1PVC-1PV): часть определения «контейнеров» вашего Statefulset YAML:

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

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

0 голосов
/ 26 декабря 2018

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

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

...