Kubernetes: Динамическое сохранение постоянного объема с использованием NFS

У меня есть multi node настройка kubernetes. Я пытаюсь распределить постоянный том динамически, используя классы хранения с плагином тома NFS. Я нашел примеры классов хранения для glusterfs, aws-ebs и т.д., Но я не нашел ни одного примера для NFS. Если я создаю только PV и ПВХ, тогда 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? Поддерживает ли он динамическое резервирование?

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

$ 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 чтобы они соответствовали вашему кластеру.

Ответ 5

Вы можете напрямую создать PV, показанный ниже. Это пример PV и PVC для частного реестра, он должен работать для большинства приложений. Обязательно установите сервер nfs и настройте записи монтирования в сервере nfs/etc/exports для доступа.

example:
/mnt/disks/vol1 <IP ADDRESS OF THE NODE>(rw,sync,no_root_squash,no_all_squash)

registry-pv.yml -

apiVersion: v1
kind: PersistentVolume
metadata:
  name: registry-pv
  namespace: kube-system
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 50Gi
  nfs:
    path: /mnt/disks/vol1
    server: <IP-Address of NFS SERVER>
  persistentVolumeReclaimPolicy: Retain
  storageClassName: registry-storage

registry-pvc.yml -

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: registry-pvc
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: registry-storage
  volumeName: registry-pv
  resources:
    requests:
      storage: 50Gi

создать пвх, пвх -

kubectl create -f registry-pv.yml 
kubectl create -f registry-pvc.yml

После создания вы должны увидеть PV привязанный к ПВХ -

enter image description here