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

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

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

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

Требования

  • Используйте стоковые ядра, поставляемые вместе с поддерживаемыми дистрибутивами;
  • Убедитесь в наличии развернутого и настроенного NFS-сервера;
  • Для поддержки 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, а остальное место будет перезаписано нулями.

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

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