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: