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, приводит к множеству проблем и усложняет управление и масштабирование.