Доступно в редакциях:  CE, SE, SE+, EE, CSE Pro (1.67)

Модуль предоставляет CSI для управления NFS-томами и позволяет создавать StorageClass в Kubernetes через пользовательские ресурсы Kubernetes NFSStorageClass.

Предостережение про использовании снапшотов (Volume Snapshots)

При создании снапшотов NFS-томов важно понимать схему их создания и связанные ограничения. Мы рекомендуем по возможности избегать использования snapshots в csi-nfs:

  1. CSI-драйвер создает снапшот на уровне NFS-сервера.
  2. Для этого используется tar, которой упаковывается содержимое тома, со всеми ограничениями, могущими возникнуть из-за этого.
  3. Перед созданием снапшота обязательно остановите рабочую нагрузку (pods), использующую NFS-том.
  4. NFS не обеспечивает атомарность операций на уровне файловой системы при создании снапшота.

Для работы с снапшотами требуется подключенный модуль snapshot-controller.

Создание StorageClass для CSI-драйвера nfs.csi.k8s.io пользователем запрещено.

Системные требования и рекомендации

Для работы NFS как хранилища виртуальных дисков в Deckhouse Virtualization Platform настройте NFS-сервер с опцией no_root_squash (см. ниже).

Требования

  • Используйте стоковые ядра, поставляемые вместе с поддерживаемыми дистрибутивами;
  • Убедитесь, что NFS-сервер корректно настроен и запущен:
    • Для модулей DKP, в настройках которых используется StorageClass может потребоваться разрешить доступ клиентам с root-правами. В Linux это реализуется через опцию no_root_squash, а на других системах (например, BSD или СХД) аналогичная настройка может иметь иное название;
    • Для хранилища виртуальных дисков в Deckhouse Virtualization Platform опция no_root_squash обязательна!.
  • Для поддержки RPC-with-TLS включите в ядре Linux опции CONFIG_TLS и CONFIG_NET_HANDSHAKE.

Рекомендации

Чтобы поды модуля перезапускались при изменении параметра tlsParameters в настройках модуля, должен быть включен модуль pod-reloader (включен по умолчанию).

Ограничения режима RPC-with-TLS

  • Для политики безопасности mtls поддерживается только один сертификат клиента.
  • Один NFS-сервер не может одновременно работать в разных режимах безопасности: tls, mtls и стандартный режим (без TLS).
  • На узлах кластера не должен быть запущен демон tlshd, иначе он будет конфликтовать с демоном нашего модуля. Для предотвращения конфликтов при включении TLS на узлах автоматически останавливается сторонний tlshd и отключается его автозапуск.

Быстрый старт

Все команды следует выполнять на машине, имеющей доступ к API Kubernetes с правами администратора.

Включение модуля

  1. Включите модуль csi-nfs. Это приведет к тому, что на всех узлах кластера будет:

    • Зарегистрирован CSI драйвер;
    • Запущены служебные поды компонентов csi-nfs.
    kubectl apply -f - <<EOF
    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: csi-nfs
    spec:
      enabled: true
      version: 1
    EOF
    
  2. Дождитесь, когда модуль перейдет в состояние Ready:

    kubectl get module csi-nfs -w
    

Создание StorageClass

Для создания StorageClass необходимо использовать ресурс NFSStorageClass. Пример создания ресурса:

kubectl apply -f -<<EOF
apiVersion: storage.deckhouse.io/v1alpha1
kind: NFSStorageClass
metadata:
  name: nfs-storage-class
spec:
  connection:
    host: 10.223.187.3
    share: /
    nfsVersion: "4.1"
  reclaimPolicy: Delete
  volumeBindingMode: WaitForFirstConsumer
EOF

Для каждого PV будет создаваться каталог <директория из share>/<имя PV>.

Проверка работоспособности модуля

Процесс проверки работоспособности модуля описан в разделе FAQ Как проверить работоспособность модуля

Выбор метода очистки тома перед удалением PV

На удаляемом томе могут остаться файлы с пользовательскими данными. Эти файлы будут удалены и не будут доступны другим пользователям через NFS.

Однако данные удаленных файлов могут оказаться доступными другим клиентам, если сервер предоставит доступ к своему хранилищу на уровне блочных устройств.

Выбрать метод очистки тома перед удалением поможет параметр volumeCleanup.

Внимание. Эта опция не влияет на файлы, уже удаленные клиентским приложением.

Внимание. Эта опция влияет только на команды отправляемые по протоколу NFS. Проведение этих команд на стороне сервера определено:

  • сервисом NFS сервера;
  • файловой системой;
  • уровнем блочных устройств и их виртуализации (например LVM);
  • самими физическими устройствами.

Убедитесь в доверенности сервера. Не отправляйте деликатные данные на сервера, в которых нет уверенности.

Метод SinglePass

Используется, если для параметра volumeCleanup задано значение RandomFillSinglePass.

Содержимое файлов переписывается случайной последовательностью перед удалением. Случайная последовательность передается по сети.

Метод ThreePass

Используется, если для параметра volumeCleanup задано значение RandomFillThreePass.

Содержимое файлов трижды переписывается случайной последовательностью перед удалением. Три случайных последовательности передаются по сети.

Метод Discard

Используется, если для параметра volumeCleanup задано значение Discard.

Многие файловые системы реализуют поддержку твердотельных накопителей, позволяя освободить место, занятое файлом, на блочном уровне без записи новых данных для увеличения срока службы твердотельного накопителя. Однако не все накопители гарантируют недоступность данных освобожденных блоков.

Если для volumeCleanup установлено значение Discard, содержимое файлов помечается как свободное через системный вызов falloc с флагом FALLOC_FL_PUNCH_HOLE. Файловая система освободит полностью используемые файлом блоки, через вызов blkdiscard, а остальное место будет перезаписано нулями.

Преимущества этого метода:

  • объем трафика не зависит от размера файлов, а только от их количества;
  • метод может обеспечить недоступность старых данных при некоторых конфигурациях сервера;
  • работает как для жестких дисков, так и для твердотельных накопителей;
  • позволяет увеличить время жизни твердотельного накопителя.