Я полностью согласен с комментариями @Jonas и @David Maze:
Вы можете это сделать, это должно сработать. Нет необходимости использовать volumeClaimTemplates, если это не требуется вашему приложению.
Две очевидные проблемы заключаются в том, что ReadWrite Многие тома на самом деле немного сложно получить (такие вещи, как тома AWS EBS, доступны только для ReadWriteOnce), и что многие вещи, которые вы хотите запускать в StatefulSets (например, базы данных), требуют монопольного использования пространства своей файловой системы и блокировки файлов. чтобы обеспечить это.
Отвечая на вопрос:
Есть ли какие-либо технические проблемы, если у меня есть один PVC для совместного использования одного тома для всех реплик с отслеживанием состояния?
Я бы сказал, что это в основном будет зависеть от:
- Как приложение будет обрабатывать такой сценарий, когда у него есть единственный PVC (параллелизм записи).
- Какие решения хранения поддерживаются вашим кластером Kubernetes (или могут быть реализованы).
Субъективно говоря, я не думаю, что должна быть проблема, когда вышеуказанные пункты подтверждаются и согласовываются с требованиями и конфигурацией, которые допускают кластер / приложения.
С точки зрения приложений, тому программному обеспечению, о котором мы говорим, присуща нехватка. Каждое приложение может вести себя по-разному и требовать разной настройки (см. Комментарий Дэвида Мейза).
Мы также ничего не знаем о вашей инфраструктуре, поэтому может быть сложно указать вам на потенциальные проблемы. С точки зрения аппаратного обеспечения (кластер Kubernetes) это, по сути, приведет к исследованию конкретного решения для хранения данных, которое вы хотели бы использовать. Он может отличаться от поставщика облачных услуг к поставщику облачных услуг, а также от локальных решений. Вам нужно будет проверить требования вашего приложения, чтобы согласовать его с имеющимися у вас параметрами.
Продолжая тему Volumes
, я считаю, что одной из важных вещей будет accessModes
.
Ссылаясь на официальные документы:
Режимы доступа
PersistentVolume может быть установлен на хосте любым способом, поддерживаемым поставщиком ресурсов. Как показано в таблице ниже, провайдеры будут иметь разные возможности, и режимы доступа каждого PV установлены на определенные режимы, поддерживаемые этим конкретным томом. Например, NFS может поддерживать несколько клиентов чтения / записи, но конкретный PV NFS может быть экспортирован на сервер как доступный только для чтения. Каждый PV получает свой собственный набор режимов доступа, описывающих возможности этого конкретного PV.
Доступны следующие режимы:
- ReadWriteOnce - том может быть смонтирован как чтение-запись одним узлом
- ReadOnlyMany - том может быть установлен в режиме только для чтения многими узлами.
- ReadWriteMany - том может быть смонтирован как чтение-запись многими узлами
В CLI режимы доступа сокращены до:
- RWO - ReadWriteOnce
- ROX - ReadOnlyMany
- RWX - ReadWriteMany
Одна из проблем, с которой вы можете столкнуться, связана с ReadWriteOnce
, когда PVC
смонтирован на Node
, а sts-X
(Pod
) запланирован на другой Node
, но, судя по вопросу, я думаю, вы уже знаете об этом.
Однако я хотел бы использовать один и тот же том для всех реплик с отслеживанием состояния.
Пример StatefulSet
с Volume
, который будет использоваться всеми репликами, может быть следующим (измененный пример из документации Kubernetes):
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx # has to match .spec.template.metadata.labels
serviceName: "nginx"
replicas: 3 # by default is 1
template:
metadata:
labels:
app: nginx # has to match .spec.selector.matchLabels
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
# VOLUME START
volumeMounts:
- name: example-pvc
mountPath: /usr/share/nginx/html
volumes:
- name: example-pvc
persistentVolumeClaim:
claimName: pvc-for-sts
# VOLUME END
Дополнительные ресурсы:
person
Dawid Kruk
schedule
05.05.2021
volumeClaimTemplates
, если это не требуется вашему приложению. - person Jonas   schedule 04.05.2021