Kubernetes PVC с ReadWriteMany на AWS

Я хочу настроить PVC на AWS, где мне нужен ReadWriteMany режим доступа. К сожалению, EBS поддерживает только ReadWriteOnce.

Как я мог это решить?

  • Я видел, что есть бета-провайдер AWS EFS, который поддерживает ReadWriteMany, но, как уже говорилось, это все еще бета-версия, и его установка выглядит несколько нестабильной.
  • Я мог бы использовать привязку узлов, чтобы принудительно привязать все поды, которые полагаются на том EBS, к одному узлу и остаться с ReadWriteOnce, но это ограничивает масштабируемость.

Есть ли другие способы решить эту проблему? По сути, мне нужен способ постоянного хранения данных, чтобы делиться ими между подами, которые не зависят друг от друга.


person Golo Roden    schedule 06.07.2018    source источник


Ответы (3)


Использование EFS без автоматической подготовки

Поставщик EFS может быть бета-версией, но сама EFS - нет. Поскольку тома EFS могут быть смонтированы через NFS, вы можете просто создать PersistentVolume с источником тома NFS вручную - при условии, что автоматическая подготовка не является жестким требованием с вашей стороны:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-efs-volume
spec:
  capacity:
    storage: 100Gi # Doesn't really matter, as EFS does not enforce it anyway
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  mountOptions:
    - hard
    - nfsvers=4.1
    - rsize=1048576
    - wsize=1048576
    - timeo=600
    - retrans=2
  nfs:
    path: /
    server: fs-XXXXXXXX.efs.eu-central-1.amazonaws.com

Затем вы можете потребовать этот том с помощью PersistentVolumeClaim и использовать его в модуле (или нескольких модулях) как обычно.

Альтернативные решения

Если автоматическое выделение ресурсов является жестким требованием для вас, вы можете рассмотреть альтернативные решения: есть несколько распределенных файловых систем, которые вы можете развернуть на своем кластере, которые предлагают ReadWriteMany хранилище поверх Kubernetes и / или AWS. Например, вы можете взглянуть на Rook (который по сути является оператором Kubernetes для Ceph). Он также официально все еще находится на стадии предварительного выпуска, но я уже немного поработал с ним, и он работает достаточно хорошо. Также существует оператор GlusterFS, у которого, похоже, уже есть несколько стабильных выпусков.

person helmbert    schedule 06.07.2018
comment
этот пример хорошо сработал для меня, когда я явно установил для storageClassName в PersistentVolumeClaim значение. Если явно не задано, предполагается, что gp2 приведет к сообщению об ошибке, например Failed to provisional volume with StorageClass gp2: invalid AccessModes [ReadWriteMany]: поддерживаются только AccessModes [ReadWriteOnce] - person Johanned Nicolai; 14.03.2021

Вы можете использовать Amazon EFS для создания PersistentVolume с ReadWriteMany режимом доступа.

Amazon EKS Объявлено о поддержке драйвера Amazon EFS CSI Driver 19 сентября 2019 г., что упрощает настройку эластичного файлового хранилища как для EKS, так и для самоуправляемых кластеров Kubernetes, работающих на AWS, с использованием стандартных интерфейсов Kubernetes.

Приложения, работающие в Kubernetes, могут использовать файловые системы EFS для обмена данными между модулями в горизонтально масштабируемой группе или с другими приложениями, работающими внутри или вне Kubernetes.

EFS также может помочь приложениям Kubernetes быть высокодоступными, поскольку все данные, записываемые в EFS, записываются в несколько зон доступности AWS. Если модуль Kubernetes завершен и перезапущен, драйвер CSI повторно подключит файловую систему EFS, даже если модуль перезапустится в другой зоне доступности AWS.

Вы можете развернуть драйвер CSI Amazon EFS в кластере Amazon EKS, следуя Руководство пользователя EKS-EFS-CSI, примерно так:

Шаг 1. Разверните драйвер Amazon EFS CSI.

kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"

Примечание. Для этой команды требуется версия 1.14 или более поздняя версия kubectl.

Шаг 2. Создайте файловую систему Amazon EFS для кластера Amazon EKS.

Шаг 2.1. Создайте группу безопасности, которая разрешает входящий трафик NFS для ваших точек монтирования Amazon EFS.

Шаг 2.2. Добавьте правило в свою группу безопасности, чтобы разрешить входящий трафик NFS из диапазона CIDR VPC.

Шаг 2.3. Создайте файловую систему Amazon EFS, настроенную с помощью только что созданной группы безопасности.

Теперь вы можете использовать EFS с ReadWriteMany режимом доступа в своем проекте EKS Kubernetes со следующими примерами файлов манифеста:

1. efs-storage-class.yaml: создайте класс хранилища.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: efs-sc
provisioner: efs.csi.aws.com

kubectl apply -f efs-storage-class.yaml

2. efs-pv.yaml: создать PersistentVolume.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: ftp-efs-pv
spec:
  storageClassName: efs-sc
  persistentVolumeReclaimPolicy: Retain
  capacity:
    storage: 10Gi # Doesn't really matter, as EFS does not enforce it anyway
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  csi:
    driver: efs.csi.aws.com
    volumeHandle: fs-642da695

Примечание. Вам необходимо заменить значение volumeHandle идентификатором вашей файловой системы Amazon EFS.

3. efs-pvc.yaml: создать PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ftp-pv-claim
  labels:
    app: ftp-storage-claim
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: efs-sc

Так и должно быть. Для подробное объяснение, где вы также можете найти пример приложения для проверки вашей настройки.

person Yuci    schedule 09.01.2020

Как вы упомянули, объем EBS с affinity & node selector прекратит масштабирование, однако с EBS будет работать только ReadWriteOnce.

По своему опыту могу сказать, что если вы выполняете много операций с файловой системой и часто загружаете и извлекаете файлы, это может быть медленным с EFS, что может снизить производительность приложения. скорость работы EFS низкая.

Тем не менее, вы можете использовать GlusterFs, поскольку он будет предоставлять том EBS. GlusterFS также поддерживает ReadWriteMany, и он будет быстрее по сравнению с EFS, поскольку это блочное хранилище (SSD).

person Harsh Manvar    schedule 10.01.2020