Модуль NFS оператора (shturval-nfs-csi)

О сервисе

Параметр Значение
Название в интерфейсе Модуль NFS оператора
Системное название (идентификатор) shturval-nfs-csi
Назначение в кластере Динамическое создание PersistentVolume из NFS-шары по запросу (PersistentVolumeClaim); NFS Provisioner.
Критический Нет
Публичный репозиторий NFS subdir external provisioner
Зависимости shturval-networking
Неймспейс nfs

Назначение

shturval-nfs-csi — драйвер NFS CSI (NFS Provisioner). Обеспечивает статическое и динамическое предоставление PersistentVolume на основе NFS и совместный доступ к данным нескольким приложениям.

По умолчанию в кластере управления модуль устанавливается в отключённом состоянии; в клиентские кластеры не устанавливается. Для установки в клиентский кластер: Доступные чарты → чарт shturval-nfs-csiУстановить (рекомендуемый неймспейс — nfs).

Обратите внимание! на узлах кластера должен быть установлен NFS-клиент (nfs-utils для RPM, nfs-common для DEB).

Astra Linux до 1.7.6 (включительно): при использовании NFS Provisioner возможна утечка памяти и OOM. Варианты:

  1. В customvalues задайте монтирование с NFSv3 (nfsvers=3 в mountOptions StorageClass) — см. пример ниже.
  2. Обновите ОС на узлах до 1.7.7 и новее по документации Astra Linux.

У NFSv4.1 в ряде сборок также наблюдались повышенные накладные расходы; при проблемах со стабильностью предпочтительнее nfsvers=3, если это допустимо для вашей инфраструктуры.

После обновления ОС на шаблонах узлов обновите шаблоны виртуальных машин в используемом провайдере инфраструктуры (vSphere, oVirt, OpenStack и т.д.), чтобы новые узлы получали актуальные образы.

Debian: после перезагрузки worker-узла PVC на NFS может не смонтироваться: служба rpc.statd не запущена, а при монтировании с удалённой блокировкой файлов (типично для NFSv3) она требуется.

  1. В customvalues сервиса shturval-nfs-csi добавьте опцию nolock в mountOptions StorageClass — она отключает удалённую блокировку файлов (блокировки остаются локальными на узле). См. пример ниже.
  2. Тома, созданные до изменения StorageClass, получают mountOptions из PersistentVolume, а не из StorageClass. Отредактируйте соответствующие PV и вручную добавьте nolock в spec.mountOptions (например, kubectl edit pv <имя-pv>).
Пример ошибки монтирования после перезагрузки узла
Warning  FailedMount  ...  kubelet  MountVolume.SetUp failed for volume "pvc-..." :
rpc error: code = Internal desc = mount failed: exit status 32
...
Output: mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.

Где настраивать

Сервисы и репозиторииУстановленные сервисы → найдите Модуль NFS оператора (shturval-nfs-csi) → Управлять. В блоке Спецификация сервиса задайте параметры для создания StorageClass с provisioner nfs.csi.k8s.io или добавьте StorageClass после включения модуля. Для корректной работы модуля должен быть включён Модуль управления сетями кластера (shturval-networking).

Настройка классов хранилища: StorageClasses (классы хранилища).

Кастомные настройки (customvalues)

Пример customvalues для shturval-nfs-csi
storageClass:
  create: true
  name: nfs-csi
  parameters:
    server: 10.11.12.13
    share: /exported/path
  mountOptions:
    - nfsvers=3
    - nolock          # для Debian: после перезагрузки узла без nolock возможен FailedMount
  reclaimPolicy: Delete
  volumeBindingMode: Immediate

Как развернуть этот сервис — Как развернуть новый сервис.