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