Установка NFS сервера и NFS Provioner в Kubernetes

Kubernetes logo
Kubernetes logo

Краткая инструкция по настройке 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 — значит всё ок.

Полезные статьи по теме:

Оставьте первый комментарий

Отправить ответ

Ваш e-mail не будет опубликован.


*