Стадия жизненного цикла модуля: General Availability
У модуля есть требования для установки
Как проверить работоспособность модуля?
Для этого необходимо проверить состояние подов в namespace d8-csi-huawei. Все поды должны быть в состоянии Running или Completed и запущены на всех узлах.
d8 k -n d8-csi-huawei get pod -owide -wКакие СХД поддерживаются?
- OceanStor V5 (V500R007, V500R007 Kunpeng)
- OceanStor (6.1.x / V700R001C00 / V700R001C10)
- OceanStor Dorado
- OceanStor A series / A Series
- OceanStor Pacific series
- FusionStorage block
- OceanDisk 1500T (NAS)
- OceanDisk 1500/1600 series
Как я могу использовать одну физическую СХД для разных кластеров независимо?
В СХД Huawei есть такое понятие, как vStore. Это виртуальная СХД — по сути хранилище в хранилище.
Не поддерживается использование двух vStore в одном и том же кластере. Ограничение связано с маппингом хостов к vStore — у разных vStore не может быть хостов с одинаковыми именами, а также одинаковых iSCSI-инициаторов.
В качестве примера рассмотрим настройку СХД для двух кластеров, в каждом из которых развёрнут модуль csi-huawei.
Настройка СХД
Создание vStore
-
Войдите в СХД под суперадмином, который был создан на этапе инициализации СХД.
-
Перейдите в пункт меню (сверху)
Services - vStores.
-
Нажмите кнопку
Createи заполните форму:
Где:
Name— имя vStore (например, vStore_2);Associate with Storage Pool— возможность привязать vStore к конкретным Storage Pool. В этом случае vStore сможет использовать только их;Associate with FC Port— возможность привязать vStore к конкретным физическим портам FibreChannel.
Нажмите кнопку ОК — vStore создан.
-
Создайте пользователя для управления vStore.
В списке vStore выберите нужный vStore одиночным щелчком, в открывшемся окне перейдите на вкладку
User managementи нажмите кнопкуCreate:
Заполните форму:
Где:
Username— имя пользователя, например,admin_2;PasswordиConfirm Password— пароль пользователя;Role— выберите vStore Administrator (пользователю нужны права на управление ресурсами vStore).
Нажмите кнопку ОК — пользователь создан.
-
Создайте management-порт для vStore.
Чтобы к vStore можно было подключаться, ему необходим собственный порт для управления. Системные management-порты не используются для входа администраторов vStore.
Перейдите в
Services - Logical ports, нажмите кнопкуCreateи заполните форму:
Где:
Name— название порта, например data-management-port-2;Role— management или service+management. В первом случае это будет порт только для control plane и потребуется создать ещё один логический порт для data plane; во втором — порт и для управления, и для данных;Owning vStore— имя vStore, созданного выше;IP address,subnet mask,gateway— сетевые настройки порта;Port type— Ethernet port/Bond/VLAN;Home port— физический порт СХД, который будет использоваться для управления vStore (или и для данных тоже).
Нажмите кнопку ОК — порт создан, можно подключаться к консоли управления vStore.
-
Подключитесь к консоли управления vStore.
Откройте в браузере адрес
https://[IP-адрес логического порта]:8088(например:https://10.220.0.101:8088). Введите логин и пароль пользователя. СХД предложит сменить пароль — задайте новый постоянный пароль, который будет использоваться для последующих подключений.
СХД настроена.
Аналогичным образом создайте второй vStore — с другим названием, пользователем и логическим портом для управления.
Подключение к СХД из кластера
Разверните модуль csi-huawei в кластере (подробную информацию можно прочитать в руководстве по настройке csi-huawei).
Создайте HuaweiStorageConnection, например такой:
apiVersion: storage.deckhouse.io/v1alpha1
kind: HuaweiStorageConnection
metadata:
name: hsconn-220
spec:
storageType: OceanStorSAN
pools:
- prod # Имя StoragePool
urls:
- https://10.220.0.101:8088 # IP-адрес логического порта
login: "admin_2" # Логин администратора vStore
password: '<your-password>' # Его пароль
protocol: ISCSI
portals:
- 10.220.0.101 # Data-plane address
maxClientThreads: 30Далее создайте HuaweiStorageClass, после чего уже можно создавать поды и PVC, используя имя StorageClass, который вы создали.
Что делать, если том не монтируется из-за ошибок файловой системы?
Перед монтированием уже отформатированного тома драйвер проверяет файловую систему командой e2fsck -p. Если проверка нашла ошибки, которые не может исправить самостоятельно, том не монтируется, а в событиях пода появляется ошибка вида:
device /dev/dm-11 carries filesystem errors that e2fsck could not correct on its own, exit code: 4Это означает, что файловая система была повреждена раньше — как правило, когда блочное устройство пропало из-под смонтированной файловой системы: потеря путей SAN, переключение контроллера СХД, отключение питания. Ошибки, которые e2fsck исправляет сам (например, незавершённый журнал), устраняются автоматически, и том монтируется.
Проверка не выполняется для файловых систем xfs и для томов с режимами доступа ReadWriteMany и ReadOnlyMany.
Чтобы восстановить такой том, файловую систему нужно проверить в размонтированном виде. Драйвер отключает LUN от узла, когда останавливается последний использующий его под, поэтому нужен под-держатель, который удерживает том подключённым:
Перед восстановлением сделайте снимок тома на СХД: e2fsck может перенести повреждённые данные в lost+found.
-
Остановите нагрузку:
d8 k -n <namespace> scale deploy/<app> --replicas=0 -
Запустите под-держатель на узле, к которому есть доступ по SSH. Параметр
mountPropagation: HostToContainerобязателен: без него контейнер сохранит собственную копию монтирования и файловая система останется смонтированной внутри него.apiVersion: v1 kind: Pod metadata: name: fsck-holder namespace: <namespace> spec: nodeName: <worker-node> terminationGracePeriodSeconds: 1 containers: - name: holder image: <образ с sleep> command: ["sleep", "infinity"] volumeMounts: - name: data mountPath: /data mountPropagation: HostToContainer volumes: - name: data persistentVolumeClaim: claimName: <pvc> -
На узле найдите оба монтирования тома и сохраните опции монтирования
globalmount:findmnt -rn -o TARGET,SOURCE,FSTYPE,OPTIONS | grep -F "<pv-name>" -
Размонтируйте их и убедитесь, что устройство никем не занято (вывод последней команды должен быть пустым):
umount /var/lib/kubelet/pods/<pod-uid>/volumes/kubernetes.io~csi/<pv-name>/mount umount /var/lib/kubelet/plugins/kubernetes.io/csi/csi.huawei.com/<hash>/globalmount grep -H " $(lsblk -no MAJ:MIN /dev/dm-11 | tr -d ' ') " /proc/*/mountinfo -
Проверьте и исправьте файловую систему. Сообщение
Device or resource busyозначает, что она где-то ещё смонтирована — вернитесь к предыдущему шагу:e2fsck -fy /dev/dm-11 dumpe2fs -h /dev/dm-11 | grep -iE 'state|error' -
Верните монтирование
globalmountс теми же опциями, удалите под-держатель и запустите нагрузку:mount -t ext4 -o <сохранённые опции> /dev/dm-11 /var/lib/kubelet/plugins/kubernetes.io/csi/csi.huawei.com/<hash>/globalmount d8 k -n <namespace> delete pod fsck-holder d8 k -n <namespace> scale deploy/<app> --replicas=<N>
После восстановления проверьте каталог lost+found на томе и целостность данных средствами самого приложения: e2fsck восстанавливает метаданные файловой системы, но не содержимое файлов.