Kubernetes - Том не монтируется при масштабировании модулей развертывания
У меня есть deployment.yaml, и в нем используется постоянная заявка на объем, например
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mautic-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: standard
Я пытаюсь масштабировать свое развертывание по горизонтали с помощью (Горизонтальный планировщик модулей), но когда я масштабирую развертывание, остальные модули находятся в
ContainerCreating
процесса, и это ошибка, которую я получаю, когда
describe the pod
Unable to attach or mount volumes: unmounted volume
Что я здесь делаю не так?
1 ответ
Использование развертывания отлично, если ваше приложение может масштабироваться по горизонтали. Однако использование постоянного тома с
PersistentVolumeClaim
может быть проблематичным при горизонтальном масштабировании.
Заявление о постоянном томе - режимы доступа
А
PersistentVolumeClaim
могут быть запрошены для нескольких различных режимов доступа:
- ReadWriteOnce (наиболее часто)
- ReadOnlyMany
- ЧитатьЗаписать
где
ReadWriteOnce
является наиболее доступным и типичным поведением для локального диска. Но чтобы масштабировать ваше приложение по горизонтали - вам нужен том, который доступен с нескольких узлов одновременно, поэтому только
ReadOnlyMany
и
ReadWriteMany
есть жизнеспособные варианты. Вам необходимо проверить, какие режимы доступа доступны для вашей системы хранения.
Кроме того, вы используете региональный кластер от облачного провайдера, он охватывает три зоны доступности, а том обычно находится только в одной зоне доступности, поэтому даже если вы используете
ReadOnlyMany
или же
ReadWriteMany
В режимах доступа он делает ваш том доступным на нескольких узлах в одной зоне доступности, но не во всех трех зонах доступности кластера. Вы можете рассмотреть возможность использования класса хранилища от вашего облачного провайдера, который реплицируется в несколько зон доступности, но обычно он стоит дороже и работает медленнее.
Альтернативы
Поскольку только
ReadWriteOnce
общедоступен, вы можете поискать лучшие альтернативы для своего приложения.
Хранилище объектов
Объектное хранилище или сегменты - это распространенный способ управления файловым хранилищем в облаке вместо использования томов файловой системы. С Object Storage вы получаете доступ к файлам через API через HTTP. См., Например, AWS S3 или Google Cloud Storage.
StatefulSet
Вы также можете рассмотреть StatefulSet, где каждый экземпляр вашего приложения получает свой собственный том. Это делает ваше приложение распределенным, но обычно не масштабируемым по горизонтали. Здесь ваше приложение обычно должно реализовать репликацию данных, обычно с использованием Raft и более продвинутого альтернативного варианта.