Проблема с подключением тома EFS к модулям Kubernetes

Я запускаю свои док-контейнеры с помощью кластера kubernetes на AWS EKS. Два моих контейнера-докера используют общий том, и оба этих контейнера работают внутри двух разных модулей. Поэтому мне нужен общий том, который может использоваться обоими модулями на aws.

Я создал том EFS и смонтировал. Я перехожу по ссылке для создания PersistentVolumeClaim. Но я получаю ошибку тайм-аута, когда efs-provider pod пытается подключить смонтированное пространство тома EFS. VolumeId, верны только регионы.

Подробное сообщение об ошибке для Pod описывает:

истекло время ожидания, пока тома будут подключены или смонтированы для модуля pod «default» / «efs-provisioner-55dcf9f58d-r547q». список неустановленных томов = [pv-volume]. список неприсоединенных томов = [pv-volume default-token-lccdw]
MountVolume.SetUp не удалось для тома «pv-volume»: сбой при монтировании: статус выхода 32


person Pruthviraj    schedule 27.07.2018    source источник


Ответы (3)


AWS EFS использует подключаемый модуль тома типа NFS и в соответствии с Классами хранилища Kubernetes NFS Плагин volume не имеет встроенного Provisioner, такого как EBS.

Итак, шаги будут такими:

  1. Создайте внешний Provisioner для подключаемого модуля тома NFS.
  2. Создайте класс хранения.
  3. Создайте одно требование тома.
  4. Используйте требование объема в развертывании.

    • В разделе configmap измените file.system.id: и aws.region: в соответствии с деталями созданной вами EFS.

    • В разделе развертывания измените сервер: на конечную точку DNS созданной вами файловой системы EFS.


---
apiVersion: v1
kind: ConfigMap
metadata:
  name: efs-provisioner
data:
  file.system.id: yourEFSsystemid
  aws.region: regionyourEFSisin
  provisioner.name: example.com/aws-efs

---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: efs-provisioner
spec:
  replicas: 1
  strategy:
    type: Recreate 
  template:
    metadata:
      labels:
        app: efs-provisioner
    spec:
      containers:
        - name: efs-provisioner
          image: quay.io/external_storage/efs-provisioner:latest
          env:
            - name: FILE_SYSTEM_ID
              valueFrom:
                configMapKeyRef:
                  name: efs-provisioner
                  key: file.system.id
            - name: AWS_REGION
              valueFrom:
                configMapKeyRef:
                  name: efs-provisioner
                  key: aws.region
            - name: PROVISIONER_NAME
              valueFrom:
                configMapKeyRef:
                  name: efs-provisioner
                  key: provisioner.name
          volumeMounts:
            - name: pv-volume
              mountPath: /persistentvolumes
      volumes:
        - name: pv-volume
          nfs:
            server: yourEFSsystemID.efs.yourEFSregion.amazonaws.com
            path: /

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

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: efs
  annotations:
    volume.beta.kubernetes.io/storage-class: "aws-efs"
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi

Для получения дополнительных объяснений и подробностей перейдите на https://github.com/kubernetes-incubator/external-storage/tree/master/aws/efs.

person Sumit    schedule 27.07.2018
comment
Привет, Сумит, спасибо за ответ. Но вышеуказанное решение работает для томов EBS. Я использую том EFS - person Pruthviraj; 28.07.2018
comment
Я пробовал приведенный выше пример, но получаю ту же ошибку, что и в вопросе. Том EFS успешно подключен к экземпляру EC2, но не подключается к модулю. Он ждет 2 минуты и начинает выдавать ошибку тайм-аута. Я правильно настроил входящий и исходящий трафик в группе безопасности, которая назначена тому EFS. - person Pruthviraj; 29.07.2018
comment
Может быть потому, что ваш efs зашифрован ?? - person Shahar Hamuzim Rajuan; 13.08.2018
comment
Нет, не зашифровано - person Pruthviraj; 13.08.2018
comment
Проблема заключалась в том, что я подключил том EFS к одному из экземпляров ec2, но kubectl всегда развертывал модули на другом экземпляре ec2, у которого нет подключенного тома. У меня никогда не работал провайдер EFS. Я использовал ПВХ и ПВХ, и он работает нормально - person Pruthviraj; 13.08.2018

Для меня проблема заключалась в том, что я указывал в своем PV путь, отличный от /. И каталог на сервере NFS, на который ссылались за пределами этого пути, еще не существовал. Сначала мне пришлось вручную создать этот каталог.

person TJ Zimmerman    schedule 21.01.2019

Проблема заключалась в том, что у меня было запущено 2 экземпляра ec2, но я смонтировал том EFS только на один из экземпляров ec2, а kubectl всегда развертывал модули на экземпляре ec2, у которого нет смонтированного тома. Теперь я смонтировал один и тот же том к обоим экземплярам и использовал PVC, PV, как показано ниже. Работает нормально.

Монтаж ec2: Монтаж AWS EFS с EC2

PV.yml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs
spec:
  capacity:
    storage: 100Mi
  accessModes:
    - ReadWriteMany
  nfs:
    server: efs_public_dns.amazonaws.com
    path: "/"

PVC.yml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: efs
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100Mi

replicaset.yml

----- только раздел томов -----

 volumes:
  - name: test-volume
    persistentVolumeClaim:
      claimName: efs
person Pruthviraj    schedule 13.08.2018