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 и более продвинутого альтернативного варианта.