Доступно в некоторых коммерческих редакциях: EE

Подробнее см. в разделе Условия и цены.

Deckhouse поддерживает управление хранилищами, подключёнными через iSCSI или Fibre Channel, обеспечивая возможность работы с томами на уровне блоковых устройств. Это позволяет интегрировать системы хранения данных с Kubernetes и управлять ими через CSI-драйвер.

На этой странице представлены инструкции по подключению SCSI-устройств в Deckhouse, созданию SCSITarget, StorageClass, а также проверке работоспособности системы.

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

  • Обнаружение LUN через iSCSI/FC;
  • Создание PersistentVolume из заранее подготовленных LUN;
  • Удаление PersistentVolume и очистка данных на LUN;
  • Подключение LUN к узлам через iSCSI/FC;
  • Создание multipath-устройств и их монтирование в поды;
  • Отключение LUN от узлов.

Ограничения

  • Невозможно создать LUN на СХД;
  • Нельзя изменить размер LUN;
  • Снимки (snapshots) не поддерживаются.

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

  • Настроенная и доступная СХД с подключением через iSCSI/FC;
  • Уникальные IQN на каждом узле Kubernetes в файле /etc/iscsi/initiatorname.iscsi.

Настройка и конфигурация

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

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

Для работы с хранилищами, подключёнными через SCSI, включите модуль csi-scsi-generic. Это приведет к:

  • Регистрации CSI-драйвера;
  • Запуску сервисных подов csi-scsi-generic.
1d8 k apply -f - <<EOF
2apiVersion: deckhouse.io/v1alpha1
3kind: ModuleConfig
4metadata:
5  name: csi-scsi-generic
6spec:
7  enabled: true
8  version: 1
9EOF

Дождитесь, пока модуль перейдет в состояние Ready.

1d8 k get module csi-scsi-generic -w

Создание SCSITarget

Для работы с SCSI-устройствами создайте ресурсы SCSITarget.

1d8 k apply -f -<<EOF
2apiVersion: storage.deckhouse.io/v1alpha1
3kind: SCSITarget
4metadata:
5  name: hpe-3par-1
6spec:
7  deviceTemplate:
8    metadata:
9      labels:
10        my-key: some-label-value
11  iSCSI:
12    auth:
13      login: ""
14      password: ""
15    iqn: iqn.2000-05.com.3pardata:xxxx1
16    portals:
17    - 192.168.1.1
18---
19apiVersion: storage.deckhouse.io/v1alpha1
20kind: SCSITarget
21metadata:
22  name: hpe-3par-2
23spec:
24  deviceTemplate:
25    metadata:
26      labels:
27        my-key: some-label-value
28  iSCSI:
29    auth:
30      login: ""
31      password: ""
32    iqn: iqn.2000-05.com.3pardata:xxxx2
33    portals:
34    - 192.168.1.2
35EOF

Пример команд для FC ресурса:

1d8 k apply -f -<<EOF
2apiVersion: storage.deckhouse.io/v1alpha1
3kind: SCSITarget
4metadata:
5  name: scsi-target-2
6spec:
7  fibreChannel:
8    WWNs:
9      - 00:00:00:00:00:00:00:00
10      - 00:00:00:00:00:00:00:01
11  deviceTemplate:
12    metadata:
13      labels:
14        some-label-key: some-label-value1
15EOF

Обратите внимание, что в примере выше используются два SCSITarget. Таким образом можно создать несколько SCSITarget как для одного, так и для разных СХД. Это позволяет использовать multipath для повышения отказоустойчивости и производительности.

Проверить создание объекта можно командой (Phase должен быть Created):

1d8 k get scsitargets.storage.deckhouse.io <имя scsitarget>

Создание StorageClass

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

1d8 k apply -f -<<EOF
2apiVersion: storage.deckhouse.io/v1alpha1
3kind: SCSIStorageClass
4metadata:
5  name: scsi-all
6spec:
7  scsiDeviceSelector:
8    matchLabels:
9      my-key: some-label-value
10  reclaimPolicy: Delete
11EOF

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

Проверить создание объекта можно командой (Phase должен быть Created):

1d8 k get scsistorageclasses.storage.deckhouse.io <имя scsistorageclass>

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

Проверьте состояние подов в пространстве d8-csi-scsi-generic. Все поды должны быть в состоянии Running или Completed и запущены на всех узлах.

1d8 k -n d8-csi-scsi-generic get pod -owide -w