Kubernetes несколько ПВХ с Statefulset для каждого модуля против одного ПВХ для всех модулей?

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

например: если 3 под 3 5GB EBS PVC

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

2 ответа

Решение

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

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

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

Другие вопросы по тегам