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]()