возможно ли иметь две разные папки для монтирования в одном экземпляре хранилища файлов?

# #google-cloud-platform #devops #google-kubernetes-engine #nfs #google-cloud-filestore

Вопрос:

Я пытаюсь подключить экземпляр хранилища файлов к моему кластеру GKE. У меня есть два развертывания в моем кластере GKE, запись в два отдельных тома. требования. Что я хочу знать, так это:

  • возможно ли, чтобы у меня была центральная nfs с моим единственным экземпляром хранилища файлов Google?
  • как я могу создавать папки внутри экземпляра filestore и чтобы мои модули взаимодействовали с ним без помех?

Другой вариант, который я вижу, это создать два разных хранилища файлов — это, кажется, решает мою проблему, но в настоящее время я настраиваю свою кластерную архитектуру, и это кажется огромной тратой ресурсов (у меня ~ 1 ТБ данных, но мои модули используют около 50 ГБ каждый — поэтому я думал о разделении, нодокументы GCP слишком загадочны)

Любые другие предложения по поводу того, чего я пытаюсь достичь, также приветствуются 🙂

Комментарии:

1. Вы пробовали эту ссылку для доступа к общим файлам из кластеров движка Google Kubernetes .

2. попробовал, не получилось

Ответ №1:

Тома хранилища файлов поддерживают функцию ReadWriteMany, поэтому вы можете смонтировать один и тот же PV на нескольких модулях для доступа на запись. Вы бы создали один PersistentVolumeClaim с режимами доступа, установленными на ReadWriteMany:

 kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: sharedpvc
spec:
  accessModes:
  - ReadWriteMany
  storageClassName: standard-rwx
  resources:
    requests:
      storage: 1Ti
 

а затем смонтировать его в каждом из ваших развертываний

 volumes:
  - name: shared
    persistentVolumeClaim:
      claimName: sharedpvc
 

Таким образом, один и тот же экземпляр хранилища файлов теперь смонтирован в модулях / развертываниях, но вам все равно нужно использовать свой собственный механизм, чтобы гарантировать, что модули не будут перегружать данные друг друга. Здесь я бы рассмотрел два варианта:

  • используйте отдельный префикс для всех файлов, записанных для каждого развертывания
  • создайте каталог внутри тома для каждого развертывания

Вы не можете создавать отдельные разделы и не можете ограничить размер хранилища для каждого развертывания. Но таким образом вы можете иметь несколько модулей, записывающих в один и тот же экземпляр, а не создавать несколько экземпляров объемом 1 ТБ.

Комментарии:

1. да, хорошо — я только что решил это сегодня с помощью того, что вы предложили — мне также удалось заставить часть подкаталогов работать, используя виртуальную машину bastion из gce

2. У меня есть несколько папок в хранилище файлов, по одной для каждого модуля. Я хочу смонтировать одну папку в один модуль по местоположению /mnt/data ? Возможно ли это? Скажем filestore/pod1 , монтируется /mnt/data для pod1, а filestore/pod2 папка монтируется /mnt/data в pod2.

Ответ №2:

В дополнение к ответу Гари, причина, по которой невозможно выполнить разделение:

Просто чтобы уточнить, Google Cloud Filestore — это NFS-сервер. Таким образом, он не является «разделенным» (им являются только блочные устройства), скорее у него есть концепция «экспорта общих ресурсов», и каждый общий ресурс может быть смонтирован одним или несколькими клиентами. При монтировании общий ресурс отображается для клиента как единый каталог файловой системы.

Ваши варианты следующие:

  1. используйте один общий ресурс, прикрепите его как PV в Kubernetes, затем создайте каталоги в этом одном общем ресурсе в соответствии с их структурой Pod (ответ Гари); или
  2. используйте несколько общих ресурсов, каждый из которых соответствует группе модулей или служб, и прикрепите каждый общий ресурс к K8s как отдельный PV (не идеально, исходя из вашего варианта использования).

Ключевым моментом здесь является то, что все общие ресурсы хранилища файлов экспортируются в NFS, поэтому их можно увидеть из K8s как PV соответствующего типа.