Стадия жизненного цикла модуля: Общедоступная версия
У модуля есть требования для установки
v0.3.26
Дата релиза: 2026-10-01
Драйвер Huawei CSI обновлён до v4.12.1, узлы получают стек iSCSI и multipath из собственного пакета модуля без обращения к репозиториям дистрибутива, а модуль поставляет роли доступа к своим ресурсам.
Ключевые изменения
Изменения в этом релизе:
- Ресурсы
NodeGroupConfigurationмодуля больше не запрашиваютopen-iscsi,multipath-toolsиsg3-utilsу пакетного менеджера узла. Каждый узел получает пакет модуляiscsi-tools, который ставит только те пары, которых нет на хосте (iscsiadmсiscsid,multipathсmultipathd); узел без доступа к своим репозиториям больше не ждёт их при каждом запуске bashible. - Драйвер Huawei CSI (eSDK) обновлён с v4.10.1 до v4.12.1.
- Модуль поставляет ClusterRole для просмотра и управления
HuaweiStorageClassиHuaweiStorageConnection, агрегированные в роль администратора хранилища.
Новый функционал
В этом релизе добавлено:
- Модуль поставляет две ClusterRole для своих кластерных ресурсов
HuaweiStorageClassиHuaweiStorageConnection: просмотр (get,list,watch) и изменение (create,update,patch,delete,deletecollection); обе агрегируются в роль администратора хранилища (rbac.deckhouse.io/aggregate-to-storage-as: manager). В DKP 1.78 и новее это capability (возможности) RBACv2d8:system-capability:csi-huawei:viewиd8:system-capability:csi-huawei:edit, в более ранних версиях —d8:manage:permission:module:csi-huawei:viewиd8:manage:permission:module:csi-huawei:edit.
Улучшения
В этом релизе улучшено:
- Ресурсы
NodeGroupConfiguration(узлы ALT Linux, семейства РЕД ОС и семейства Ubuntu) ставят пакет модуляiscsi-toolsна каждый узел, а не пробуют сначалаopen-iscsiиmultipath-toolsиз дистрибутива. Пакет решает для каждой пары отдельно: пара, которая на хосте уже есть, остаётся хостовой, и модуль только включает для неё unit (юнит systemd) дистрибутива и запускаетmpathconf; недостающая пара ставится из пакета со своим юнитом (d8-csi-huawei-iscsid.service,d8-csi-huawei-multipathd.service). Хост сopen-iscsi, но безmultipath-tools, теперь получаетmultipathdмодуля; раньше пакет ничего не делал на любом хосте, где былiscsiadm. Настройки multipathdeferred_remove/flush_on_last_delзаписываются для тогоmultipathd, который работает на узле. sg3-utilsбольше не ставится на узлы: драйвер нигде не вызывает его утилиты. Уже установленные пакеты не удаляются.- Если набор утилит на узле изменился после установки пакета модуля (с хоста пропал
iscsiadmилиmultipathлибо позже поставили пакет дистрибутива с ними),NodeGroupConfigurationпереустанавливает пакет: узел снова получает недостающую пару, а демон пакета уступает место демону дистрибутива. Раньше это решение принималось один раз на версию модуля.
Исправления
В этом релизе исправлено:
- При обновлении пакета
iscsi-toolsплагины multipath в/usr/lib/multipathи обёрткаiscsiadmв/usr/local/sbin, оставленные предыдущей версией, принимались за собственные файлы хоста: обёртка оставалась старой версии, и ни то, ни другое не удалялось вместе с пакетом. Теперь они распознаются как файлы пакета и заменяются.
Рекомендации по обновлению
Перед обновлением учтите следующее:
- Ручных действий не требуется. При первом запуске bashible после обновления узлы с
open-iscsiиmultipath-toolsиз дистрибутива продолжают использовать их; узлы без какой-либо из пар получают её из пакета модуля. Уже смонтированные тома не затрагиваются.
Документация
Изменения в документации:
- Раздел FAQ о том, откуда на узле берутся
open-iscsiиmultipath-tools, переписан под установку по парам из пакета модуля, в том числе как определить, какая пара на узле откуда взята. В разделе README про FC указано, чтоmultipathиmultipathdставятся из пакета модуля на узлы без собственногоmultipath-tools. - У поля
specресурсаHuaweiStorageClassв CRD появилось описание.
Зависимости
Обновления зависимостей:
Huawei CSI (eSDK_K8S_Plugin):4.10.1→4.12.1(changelog)- Патчи модуля перенесены без изменения поведения;
google.golang.org/grpcостаётся на v1.83.2. Новые возможности апстрима (NVMe over TCP, мониторинг состояния томов, восстановление из снимка поверхностным копированием, тома Hyper-Metro) черезHuaweiStorageConnectionиHuaweiStorageClassнедоступны.
- Патчи модуля перенесены без изменения поведения;
v0.3.25
Дата релиза: 2026-09-24
Обновление безопасности: бинарные файлы Huawei CSI и хуки модуля пересобраны с исправленными grpc и x/crypto.
Ключевые изменения
Изменения в этом релизе:
google.golang.org/grpcобновлён с v1.82.1 до v1.83.2 во всех четырёх бинарных файлах Huawei eSDK (huaweicsi,oceanctl,storage-backend-controller,storage-backend-sidecar), что закрывает CVE-2026-84303, CVE-2026-84304 и CVE-2026-84445.
Обновления безопасности
Обновления безопасности в этом релизе:
google.golang.org/grpcобновлён с v1.82.1 до v1.83.2 во всех четырёх бинарных файлах Huawei eSDK (huaweicsi,oceanctl,storage-backend-controller,storage-backend-sidecar), что закрывает CVE-2026-84303, CVE-2026-84304 и CVE-2026-84445.golang.org/x/cryptoобновлён с v0.53.0 до v0.57.0 в хуках модуля (go-hooks), что закрывает CVE-2026-56854 (обход аутентификации по адресу источника вx/crypto/ssh), CVE-2026-56855 и CVE-2026-78662.
v0.3.24
Дата релиза: 2026-09-14
Обслуживающий релиз: модуль пересобран тулчейном Go 1.27.1 на базовых образах v2.1.17, поведение не меняется.
Ключевые изменения
Изменения в этом релизе:
- Все компоненты модуля собраны с Go 1.27.1 на базовых образах v2.1.17. Поведение модуля, его ресурсы и настройки не меняются.
Рекомендации по обновлению
Перед обновлением учтите следующее:
- Обновление не требует действий руками. Ресурсы, настройки модуля и существующие тома не затрагиваются, поды контроллера и узлов только перезапускаются на пересобранных образах.
v0.3.23
Дата релиза: 2026-09-09
Модуль научился сам устанавливать стек iSCSI на узлы, репозитории которых его не дают, позволяет ресурсу HuaweiStorageClass задать долю тома ext4, остающуюся суперпользователю, и отдаёт метрики контроллера.
Ключевые изменения
Изменения в этом релизе:
- Узел, у которого в репозиториях нет
open-iscsiиmultipath-tools, больше не остаётся непригодным: модуль разворачивает на нём собственный образ-пакет и запускает демоны из него. - Том с ext4 больше не удерживает 5 % своего объёма под суперпользователя; вернуть себе долю можно аннотацией на ресурсе
HuaweiStorageClass. - Контроллер модуля отдаёт метрики, и Prometheus допущен до их сбора.
Новый функционал
В этом релизе добавлено:
- Узел, который не может установить
open-iscsiиmultipath-toolsиз своих репозиториев, получает их от модуля: ресурсNodeGroupConfigurationраспаковывает образiscsi-toolsмодуля в/var/lib/deckhouse/sds/csi-huaweiи запускаетd8-csi-huawei-iscsid.serviceиd8-csi-huawei-multipathd.service. Пакеты самого узла остаются предпочтительным путём, и узел, на котором они есть, модуль не трогает. - Аннотация
storage.deckhouse.io/ext4-reserved-percentна ресурсеHuaweiStorageClassзадаёт долю тома, удерживаемую под суперпользователя: целое число процентов от 0 до 50. Она действует только на файловые системы семейства ext, класс сfsType: xfsеё игнорирует, а при некорректном значенииHuaweiStorageClassостаётся сReady=Falseи причиной в статусе, вместо того чтобы позже сломать создание тома. - Контроллер модуля отдаёт метрики через kube-rbac-proxy: число и длительность реконсиляций, глубину очереди, задержки client-go, вместе с ресурсом ServiceMonitor для Prometheus. Порты настраиваются параметрами модуля
controllerMetricsPortиcontrollerMetricsProxyPort.
Улучшения
В этом релизе улучшено:
- Когда СХД отказывается создать том, событие
ProvisioningFailedтеперь несёт сообщение и рекомендацию, которые вернул массив, а не только числовой код ошибки DeviceManager. - Строки лога контроллера содержат поля парами ключ-значение и называют компонент, из которого пришли, вместо префикса внутри текста сообщения.
Исправления
В этом релизе исправлено:
- Prometheus не мог собирать метрики контроллера модуля: стоящему перед ними kube-rbac-proxy не было позволено создавать
TokenReviewиSubjectAccessReview, поэтому каждый сбор отвергался, а цель оставалась недоступной. - Узел мог остаться с
csi-nodeвCrashLoopBackOffи без драйвера в своём объектеCSINode, из-за чего тома на нём не подключались. Проба liveness контейнера узла смотрела на порт, который держит соседний контейнер-регистратор, поэтому выход регистратора уводил за собой и драйвер.
Рекомендации по обновлению
Перед обновлением учтите следующее:
- Изменение резерва ext4 под суперпользователя применяется к томам, созданным после обновления; уже существующие файловые системы сохраняют тот резерв, с которым были созданы. Руками делать ничего не нужно, а классу, которому резерв нужен, требуется аннотация.
- Метрики контроллера начинают собираться после того, как обновление пересоздаст поды модуля. Алерт
TargetDown, поднятый на контроллер модуля, гаснет сам.
Документация
Изменения в документации:
- Два новых раздела FAQ: что произойдёт, если репозитории узла не могут предоставить стек iSCSI, и сколько места тома резервируется под суперпользователя.
Зависимости
Обновления зависимостей:
deckhouse_lib_helm:1.72.18→1.72.22- Приносит исправление пробы liveness для csi-node и контракт RBAC для прокси метрик.
v0.3.22
- Перед монтированием уже отформатированного тома выполняется проверка файловой системы ext2/3/4 (e2fsck -p): исправимые ошибки устраняются автоматически, том с неустранимыми ошибками больше не монтируется до ручного восстановления
- В FAQ добавлена процедура восстановления тома, который не монтируется из-за ошибок файловой системы
- Обновление базовых образов до v2.1.5, Go до 1.26.6 и lib-helm до 1.72.17
- Внутренние изменения в сборке модуля
v0.3.21
- Исправление: релизный образ больше не собирается из кэша с устаревшим changelog.yaml — зависимости git-маппинга привязаны к стадии install, на которой файл и копируется
- Обновление базовых образов до v2.1.4
- Внутренние изменения в сборке модуля
v0.3.20
- Исправление: контроллеру выданы права patch на events вместо list — повторная запись события больше не отклоняется по правам
v0.3.19
- Исправление: multipath перестаёт удерживать I/O после удаления последнего пути к LUN (добавлена настройка flush_on_last_del) — устраняет зависание узла в NotReady
- В документации убран устаревший пример volumeBindingMode в HuaweiStorageClass, добавлен пример подключения по Fibre Channel
- Обновление базовых образов до v2.1.2, Go до 1.26.6 и lib-helm до 1.72.14
- Внутренние изменения в сборке модуля
v0.3.18
- HuaweiStorageClass и HuaweiStorageConnection публикуют status.conditions и status.observedGeneration, добавлена колонка Ready. Поле status.phase сохраняет прежний набор значений, но теперь вычисляется из условия Ready
- Обновление базовых образов до v1.3.25, Go 1.26.5 и lib-helm до 1.72.13
v0.3.17
- Исправление: устранён сбой запуска pod’а csi-node на узлах с containerd v2 — добавлено монтирование hostPath /sys/fs/cgroup
v0.3.16
- Модуль snapshot-controller больше не обязательная зависимость: VolumeSnapshotClass создаётся только при наличии API snapshot.storage.k8s.io
- Обновление базовых образов, Go 1.26.5 и lib-helm до 1.72.12
- Устранена уязвимость в gRPC (GHSA-hrxh-6v49-42gf)
- Внутренние изменения в сборке модуля
v0.3.15
- Обновление базовых образов, Go 1.26.5 и lib-helm до 1.72.10
- Внутренние изменения в сборке модуля
v0.3.14
- Исправление: устранён циклический перезапуск pod’а csi-node, вызванный синхронной очисткой устаревших устройств
- Исправление: секреты доступа к registry Deckhouse теперь ограничены активным источником образов
- Обновление базовых образов, Go 1.26.5 и lib-helm до 1.72.9
- Внутренние изменения в сборке модуля
v0.3.13
- Добавлено автоматическое восстановление недоступных бэкендов хранилища Huawei
- При пробросе меток из HuaweiStorageClass в StorageClass теперь исключаются метки с заданными игнорируемыми префиксами
- Обновление базовых образов и lib-helm до 1.72.0
v0.3.12
- Метки из HuaweiStorageClass теперь пробрасываются в управляемый StorageClass Kubernetes
- Обновление базовых образов, Go 1.25.10 и lib-helm 1.71.12
v0.3.11
- Внутренние изменения в структуре и сборке модуля
v0.3.10
- Обновление базовых образов, Go 1.25.10 и lib-helm 1.71.11
- Внутренние изменения в сборку модуля
v0.3.9
- Исправления в структуру модуля
v0.3.8
- Обновлена документация (ревью, исправлены битые ссылки)
- Изменения в CI: DistroPackagesProxy и env прокси в werf, доработки CVE-сканов (role_name, checkout)
- Добавлены кластерные роли user-authz в шаблонах
v0.3.7
- Установка пакетов в NodeGroupConfiguration больше не приводит к падению скрипта при ошибках
v0.3.6
- Добавлены недостающие точки монтирования в distroless-образах csi-huawei
- Обновление базовых образов, Go и lib-helm (фикс CVE)
- Уточнения в документации
v0.3.5
- Добавлен список поддерживаемых СХД
v0.3.4
- Изменения для distroless (полный отказ от nsenter, где это возможно)
v0.3.3
- Правки регрессии при ресайзе тома, возникшей в результате перехода на distroless (исправлено слишком узкое монтирование /sys с хоста)
v0.3.2
- Правки регрессии при перемонтировании тома, возникшей в результате перехода на distroless (в некоторых случаях не совпадаю WWN у томов)
v0.3.1
- Правки регрессии при перемонтировании тома, возникшей в результате перехода на distroless (в некоторых случаях не совпадаю WWN у томов)
v0.3.0
- Перевод модуля в distroless (с активным патчингом оригинального CSI, для этого не приспособленного)
- Правки в документации
- Обновление базовых образов и версии golang
- Обновление хуков, работающих при удалении модуля
- Отключен запрос Capacity со стороны k8s (CSI не поддерживает выдачу Capacity)
v0.2.9
- Исправления логики работы с volume snapshots
v0.2.8
- Правки в документацию
- Правки в манифестах
- Исправления логики работы с volume snapshots
- Обновление базовых образов
v0.2.7
- Обновлена версия базовых образов
v0.2.6
- Обновлена версия Go до 1.24.9
- Обновлена lib-helm до deckhouse_lib_helm-1.64.1
v0.2.5
- Добавлены файлы release notes
v0.2.4
- Добавлена информация о необходимости snapshot-controller для работы модуля
- Добавлен readonlyRootFilesystem для большей безопасности модуля
v0.2.3
- Добавлена зависимость от snapshot-controller
v0.2.2
- Добавлена инструкция по использованию СХД Huawei в нескольких Kubernetes кластерах
v0.2.1
- Обновление CSI до версии v4.11.0
- Фикс CVE
- Добавлен хук, удаляющий ненужные ресурсы, остающиеся после удаления модуля
v0.1.1
- Обновление golang на 1.23.6
- Убран статус Experimental
v0.1.0
- Стартовый релиз, базовая функциональность работает