Kubernetes: подготовка динамического постоянного тома с использованием NFS

У меня есть многоузловая настройка kubernetes. Я пытаюсь выделить постоянный том динамически, используя классы хранения с плагином тома NFS. Я нашел примеры классов хранения для glusterfs, aws-ebs и т. Д., Но я не нашел ни одного примера для NFS. Если я создаю PV и PVC только тогда, NFS работает очень хорошо (без класса хранения). Я пытался написать файл класса хранения для NFS, ссылаясь на другие плагины. пожалуйста, отошлите это ниже,

NFS-хранения-class.yaml

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
  namespace: kube-system
  name: my-storage
  annotations:
    storageclass.beta.kubernetes.io/is-default-class: "true"
  labels:
    kubernetes.io/cluster-service: "true"

provisioner: kubernetes.io/nfs
parameters:
  path: /nfsfileshare
  server: <nfs-server-ip> 

NFS-ру-claim.yaml

apiVersion: v1
metadata:
  name: demo-claim
  annotations:
    volume.beta.kubernetes.io/storage-class: my-storage
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

Это не сработало. Итак, мой вопрос: можем ли мы написать класс хранения для NFS? Это поддерживает динамическое обеспечение?

6 ответов

По состоянию на август 2020 года, вот как выглядит постоянство NFS в Kubernetes:

Вы можете

  • Поместите том NFS в Pod напрямую:
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    nfs:
      path: /foo/bar
      server: wherever.dns
  • Вручную создайте постоянный том, поддерживаемый NFS, и смонтируйте его с помощью утверждения постоянного тома (спецификация PV показана ниже):
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: slow
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path: /tmp
    server: 172.17.0.2
  • Используйте (теперь устаревший) NFS PV Provisioner отexternal-storage. Последний раз он обновлялся два года назад и был официально завершен, так что удачи. С помощью этого маршрута вы можете создать класс хранилища, такой как приведенный ниже, для выполнения PVC с вашего сервера NFS.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: example-nfs
provisioner: example.com/nfs
mountOptions:
  - vers=4.1
  • Очевидно, будущее за CSI, и есть драйвер NFS CSI.Однако он еще не поддерживает динамическую подготовку, поэтому не особо полезен.
  • Возможно, вы сможете заменить external-storageпровайдер NFS с чем-то от сообщества или с тем, что вы пишете. Исследуя эту проблему, я наткнулся на провайдер, написанный, например, кем-то на GitHub. Работают ли такие средства обеспечения хорошо или имеют те же функции, что и средство обеспечения без замены, которое не рекомендуется.external-storage вне меня, но они существуют.

Динамическое выделение памяти с использованием NFS не работает, лучше используйте glusterfs. Есть хороший учебник с исправленными общими проблемами при настройке. http://blog.lwolf.org/post/how-i-deployed-glusterfs-cluster-to-kubernetes/

Я также попытался включить поставщика NFS в моем кластере kubernetes, и сначала он не работал, потому что в руководстве по быстрому запуску не упоминается, что вам также необходимо применить rbac.yaml (я открыл PR, чтобы это исправить).

Поставщик nfs отлично работает для меня, если я выполняю следующие шаги в своем кластере: https://github.com/kubernetes-incubator/external-storage/tree/master/nfs

$ kubectl create -f deploy/kubernetes/deployment.yaml
$ kubectl create -f deploy/kubernetes/rbac.yaml
$ kubectl create -f deploy/kubernetes/class.yaml

Тогда вы должны быть в состоянии создать PVC, как это:

$ kubectl create -f deploy/kubernetes/claim.yaml

Возможно, вы захотите изменить папки, используемые для монтирования тома в deployment.yaml сопоставить его с вашим кластером.

Я пытаюсь сделать то же самое. Я нашел https://github.com/kubernetes-incubator/external-storage/tree/master/nfs, на чем, я думаю, вы основали своего провайдера?

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

Возможно, это лучше, чем проблема github на репо kubernetes.

Цель StorageClass заключается в создании хранилища, например, от облачных провайдеров (или "Provisioner", как они его называют в документах kubernetes). В случае NFS вы хотите получить доступ только к существующему хранилищу, а создание не требуется. Таким образом, вам не нужно StorageClass, Пожалуйста, обратитесь к этому блогу.

Если вы используете AWS, я считаю, что вы можете использовать этот образ для создания сервера NFS:

https://hub.docker.com/r/alphayax/docker-volume-nfs

Другие вопросы по тегам