Краткая инструкция по настройке NFS драйвера Kubernetes для автоматического создания kuberntes Volumes в кластере из одной или нескольких нод.
Настраиваем NFS сервер
Для начала установим сам сервер:
apt install nfs-kernel-server
Создаем каталог для шары:
mkdir /srv/nfs
Настраиваем публикацию каталога, открываем для редактирования /etc/exports и дописываем:
/srv/nfs 10.0.100.0/24(rw,sync,insecure_locks,insecure,no_root_squash,no_all_squash)
Где:
- 10.0.100.0/24 — подсеть в которой располагаются nfs клиенты (ноды кубера в нашем случае)
- /srv/nfs — каталог который будет шарится
- rw (ro) — разрешить чтение запись или (только чтение)
- sync (async) — синхронный (асинхронный) метод работы. Будет отвечать на запросы только после сохранения данных на диск или разрешить параллельные чтение \ запись
- insecure_locks — доверять любым клиентам, не выполнять проверку подлинности (авторизацию)
- insecure (secure) — использовать для соединения любые порты (выше 1023) или (только порты ниже 1024)
- no_root_squash (root_squash) — транслировать или не транслировать привилегии root с клиентской на серверную машину. При использовании no_root_squash пользователь root на клиенте не сопоставляется с анонимным пользователем на сервере, вместо этого, пользователь root клиента рассматривается как root сервера.
- no_all_squash — отключить маппинг uid для всех пользователей. (тоже самое что no_root_squash, но для всех остальных)
Перечитываем конфигурацию nfs сервера с помощью команды:
exportfs -a
И проверяем что nfs сервер запущен:
systemctl status nfs-server
Настраиваем Kubernetes Storage Class
Все дальнейшие действия необходимо выполнять в кластере Kubernetes
Устанавливаем nfs драйвер:
curl -skSL https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/v4.6.0/deploy/install-driver.sh | bash -s v4.6.0 --
Создаем StorageClass.yaml с параметрами подключения к nfs серверу:
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:
server: 10.0.100.8
share: /srv/nfs
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- nfsvers=4.1
Где параметры:
- server: ip — адрес сервера с запущенным nfs
- share: путь для шареного каталога
И применяем манифест:
kubectl apply -f StorageClass.yaml
Патчим созданный Storage Class с помощью команды:
kubectl patch storageclass nfs-csi -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
В целом на этом всё. Для проверки можно создать PVC и проверить что он применится и создастся. Для этого создаем тестовый PVC манифест test-pvc.yaml с содержимым:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 1Gi
storageClassName: nfs-csi
Применяем и проверяем:
kubectl apply -f test-pvc.yaml
kubectl get pvc -A
Если всё прошло успешно вы увидите вашу pvc в статусе Bound — значит всё ок.
Полезные статьи по теме:
Отправить ответ