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

Стадия жизненного цикла модуля: Preview
У модуля есть требования для установки

Модуль предоставляет CSI-драйвер для управления томами c использованием систем хранения данных (СХД), подключаемых через SCSI.

Поддерживаемые возможности:

  • обнаружение логических томов хранения данных (Logical Unit Number, LUN) через iSCSI или Fibre Channel;
  • создание PersistentVolume (PV) из заранее подготовленных LUN;
  • удаление PV и обнуление данных на LUN;
  • подключение LUN к узлам через iSCSI или Fibre Channel;
  • создание multipath-устройств и их монтирование в поды;
  • отключение LUN от узлов.

Не поддерживается:

  • создание LUN на СХД;
  • изменение размера LUN;
  • создание снимков.

Доступные режимы доступа для модуля: RWO, RWX — только в DVP.

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

Требования

  • Развёрнутая и настроенная СХД, предоставляющая доступ к LUN по iSCSI или Fibre Channel.

  • Для подключения по iSCSI:

    • на каждом узле Kubernetes должен быть настроен уникальный идентификатор iSCSI-инициатора (iSCSI Qualified Name, IQN) в файле /etc/iscsi/initiatorname.iscsi;
    • на узлах должен быть установлен пакет multipath-tools.
  • Для подключения по Fibre Channel:

    • на узлах кластера должны быть установлены и доступны адаптеры Fibre Channel (Fibre Channel Host Bus Adapter, FC HBA) (/sys/class/fc_host/host*);
    • в сети хранения данных (Storage Area Network, SAN) должны быть настроены зонирование и маскирование LUN, обеспечивающие доступ инициаторов узлов к портам СХД;
    • необходимые LUN должны быть заранее созданы в СХД. Модуль не создаёт LUN;
    • на узлах должен быть установлен пакет multipath-tools.

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

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

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

  • Включить модуль csi-scsi-generic. Это приведет к тому, что на всех узлах кластера будет:
    • зарегистрирован CSI драйвер;
    • запущены служебные поды компонентов csi-scsi-generic.
kubectl apply -f - <<EOF
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: csi-scsi-generic
spec:
  enabled: true
  version: 1
EOF
  • Дождаться, когда модуль перейдет в состояние Ready.
kubectl get module csi-scsi-generic -w

Создание SCSITarget (iSCSI)

Ресурс SCSITarget описывает подключение к одной SCSI-цели. В spec укажите один из способов подключения: iSCSI или fibreChannel.

Далее приведён пример конфигурации для подключения по iSCSI. В этом примере создаются два ресурса SCSITarget. Можно создать несколько ресурсов как для одной, так и для разных СХД, что позволяет использовать multipath для повышения отказоустойчивости и производительности.

kubectl apply -f -<<EOF
apiVersion: storage.deckhouse.io/v1alpha1
kind: SCSITarget
metadata:
  name: hpe-3par-1
spec:
  deviceTemplate:
    metadata:
      labels:
        my-key: some-label-value
  iSCSI:
    auth:
      login: ""
      password: ""
    iqn: iqn.2000-05.com.3pardata:xxxx1
    portals:
    - 192.168.1.1

---
apiVersion: storage.deckhouse.io/v1alpha1
kind: SCSITarget
metadata:
  name: hpe-3par-2
spec:
  deviceTemplate:
    metadata:
      labels:
        my-key: some-label-value
  iSCSI:
    auth:
      login: ""
      password: ""
    iqn: iqn.2000-05.com.3pardata:xxxx2
    portals:
    - 192.168.1.2
EOF

Создание SCSITarget (Fibre Channel)

Для подключения по Fibre Channel в поле spec.fibreChannel.WWNs ресурса SCSITarget укажите World Wide Port Name (WWPN) портов СХД, через которые доступны необходимые LUN. Модуль обнаруживает устройства, сопоставляя указанные WWPN с путями в директории /dev/disk/by-path/.

WWPN следует указывать в одном из следующих форматов:

  • 16 шестнадцатеричных символов (2001c89f1acd6117);
  • с двоеточиями (20:01:c8:9f:1a:cd:61:17);
  • с префиксом 0x (0x2001c89f1acd6117).

Перед созданием ресурса SCSITarget настройте на SAN зонирование и маскирование LUN, чтобы узлы кластера получили доступ к необходимым томам.

При обнаружении и подключении тома модуль выполняет сканирование FC-хостов. При этом он не настраивает коммутаторы и не выполняет вход на целевые устройства.

Пример конфигурации с двумя портами СХД для организации multipath:

kubectl apply -f -<<EOF
apiVersion: storage.deckhouse.io/v1alpha1
kind: SCSITarget
metadata:
  name: hpe-3par-fc-1
spec:
  deviceTemplate:
    metadata:
      labels:
        my-key: some-label-value
  fibreChannel:
    WWNs:
    - 2001c89f1acd6117

---
apiVersion: storage.deckhouse.io/v1alpha1
kind: SCSITarget
metadata:
  name: hpe-3par-fc-2
spec:
  deviceTemplate:
    metadata:
      labels:
        my-key: some-label-value
  fibreChannel:
    WWNs:
    - 2001c89f1acd6118
EOF

Перед применением ресурса убедитесь, что FC-пути доступны на узлах кластера:

# FC-хосты присутствуют.
ls /sys/class/fc_host/

# WWPN целевых устройств и LUN доступны после настройки зонирования.
ls -l /dev/disk/by-path/ | grep -E 'fc-|/fc-'

После создания SCSITarget контроллер обнаружит доступные LUN и создаст объекты SCSIDevice. В дальнейшем используйте тот же ресурс SCSIStorageClass и селектор scsiDeviceSelector, что и для iSCSI.

Проверить создание объекта можно следующей командой:

kubectl get scsitargets.storage.deckhouse.io <scsitarget name>

Объект считается успешно созданным, если в колонке его состояния (Phase) в выводе указано Created.

Создание StorageClass

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

kubectl apply -f -<<EOF
apiVersion: storage.deckhouse.io/v1alpha1
kind: SCSIStorageClass
metadata:
  name: scsi-all
spec:
  scsiDeviceSelector:
    matchLabels:
      my-key: some-label-value
  reclaimPolicy: Delete
EOF

Обратите внимание на scsiDeviceSelector. Этот параметр позволяет выбрать SCSITarget для создания PV по меткам. В примере выше выбираются все SCSITarget с меткой my-key: some-label-value. Эта метка будет выставлена на все девайсы, которые будут обнаружены в указанных SCSITarget.

  • Проверить создание объекта можно командой (Phase должен быть Created):
kubectl get scsistorageclasses.storage.deckhouse.io <scsistorageclass name>

Очистка PV

Поскольку модуль не управляет СХД и повторно использует заранее подготовленные LUN с SCSI-целей, после удаления PV тома нужно очищать.

Изменение режима очистки PV происходит автоматически и зависит от поддержки операции trim.

Процесс очистки включает следующие этапы:

  1. Проверка поддержки операции trim. Для этого анализируется значение файла /sys/block/${device name}/queue/discard_max_bytes. Если размер discard_max_bytes больше нуля, операция поддерживается.
  2. Очистка:
    • Если trim поддерживается, выполняется следующая команда: blkdiscard ${device name}
    • Если trim не поддерживается, выполняется следующая команда: blkdiscard -z ${device name}. Параметр -z означает, что устройство будет обнулено (полностью заполнено нулями).