Стадия жизненного цикла модуля: Общедоступная версия

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

v0.2.28

Дата релиза: 2026-10-01

HPE CSI Driver и оба CSP обновлены до v3.3.0, каждый узел теперь получает недостающий стек iSCSI из собственного пакета модуля, не обращаясь к репозиториям дистрибутива, а права доступа модуль выдаёт в модели capability/scope из DKP 1.78.

Ключевые изменения

Изменения в этом релизе:

  • HPE CSI Driver и оба Container Storage Provider (поставщика хранилища для CSI-драйвера) — alletra-9000-primera-and-3par-csp и alletra-6000-and-nimble-csp — обновлены с v3.1.0 до v3.3.0; в апстриме (исходном проекте) исправлены подключение и отключение томов, работа с multipath и потребление памяти CSP.
  • NodeGroupConfiguration больше не просит у пакетного менеджера узла open-iscsi, multipath-tools и sg3-utils. Каждый узел получает пакет модуля iscsi-tools, который оставляет то, что уже есть на хосте, и доставляет только недостающее, поэтому узел без доступа к своим репозиториям больше не ждёт пакетный менеджер при каждом запуске bashible.
  • В DKP 1.78 и новее роли доступа к модулю — d8:system-capability:csi-hpe:view и d8:system-capability:csi-hpe:edit модели capability/scope; в версиях ниже 1.78 модуль сохраняет d8:manage:permission:module:csi-hpe:view и d8:manage:permission:module:csi-hpe:edit.

Новый функционал

В этом релизе добавлено:

  • В DKP 1.78 и новее модуль создаёт ClusterRole d8:system-capability:csi-hpe:view (чтение HPEStorageClass и HPEStorageConnection) и d8:system-capability:csi-hpe:edit (их создание, изменение и удаление) с метками rbac.deckhouse.io/kind: capability и rbac.deckhouse.io/scope: system, и DKP агрегирует их в роли просмотра и управления хранилищем своей новой модели RBAC. Модель модуль выбирает по версии DKP в кластере; в кластерах ниже 1.78 роли остаются прежними — d8:manage:permission:module:csi-hpe:view и d8:manage:permission:module:csi-hpe:edit.

Улучшения

В этом релизе улучшено:

  • Стек iSCSI на узел приходит только из собственного пакета модуля iscsi-tools. Пакет решает отдельно для каждой пары — iscsiadm с iscsid, multipath с multipathd: пара, которая у хоста есть своя, остаётся хостовой, и включается только юнит дистрибутива; недостающая пара ставится в /var/lib/deckhouse/sds/csi-hpe со своим юнитом модуля. Поэтому хост с open-iscsi, но без multipath-tools получает multipathd модуля, тогда как раньше пакет отступал, как только у хоста находился iscsiadm. Настройка find_multipaths no и блок устройств 3PAR доходят до каждого узла, какой бы multipathd там ни работал. sg3-utils больше не ставится: драйвер не вызывает ни одной его утилиты.
  • Если инструменты узла меняются после установки пакета — хост лишился iscsiadm или multipathd либо рядом с пакетом модуля поставили пакет дистрибутива, — NodeGroupConfiguration запускает установку пакета заново, и узел не остаётся без инструмента и не держит два демона рядом до следующего релиза модуля.

Исправления

В этом релизе исправлено:

  • Обновление пакета iscsi-tools больше не теряет учёт файлов, которые прежняя версия положила вне своего каталога, — обёртки iscsiadm в /usr/local/sbin и модулей проверки путей multipath в /usr/lib/multipath. После обновления их принимали за собственные файлы хоста и не удаляли при удалении пакета; теперь они обновляются и удаляются вместе с пакетом.

Обновления безопасности

Обновления безопасности в этом релизе:

  • Бинарный файл csi-driver собирается с google.golang.org/grpc v1.83.2 (было v1.82.1), что закрывает CVE-2026-84303, CVE-2026-84304 и CVE-2026-84445, и с golang.org/x/crypto v0.56.0 (было v0.53.0), что закрывает CVE-2026-56854, CVE-2026-56855 и CVE-2026-78662.

Рекомендации по обновлению

Перед обновлением учтите следующее:

  • Узел, на котором уже есть open-iscsi и multipath-tools из дистрибутива, сохраняет их и их юниты; с него ничего не удаляется, включая sg3-utils. Узел, добавленный после обновления, больше не получает эти пакеты из репозиториев дистрибутива: всё недостающее приходит из пакета модуля, и вместо iscsid или multipathd дистрибутива там работает d8-csi-hpe-iscsid.service или d8-csi-hpe-multipathd.service.
  • В DKP 1.78 и новее ClusterRole d8:manage:permission:module:csi-hpe:view и d8:manage:permission:module:csi-hpe:edit заменяются на d8:system-capability:csi-hpe:view и d8:system-capability:csi-hpe:edit. Доступ, выданный через роли хранилища DKP, продолжает работать; RoleBinding или ClusterRoleBinding, в котором старая роль указана напрямую, нужно переключить на новое имя.

Документация

Изменения в документации:

  • Раздел FAQ описывает, откуда на узле берутся open-iscsi и multipath-tools: как пакет решает для каждой пары, какие файлы он кладёт вне своего каталога и когда забирает их обратно, и как по узлу понять, какие демоны хостовые, а какие — модуля.
  • У поля spec в HPEStorageClass появилось английское описание в справочнике CRD; раньше оно было только в русском.

Зависимости

Обновления зависимостей:

  • HPE CSI Driver for Kubernetes: 3.1.0 → 3.3.0 (changelog)
    • Среди исправлений апстрима: отключение или подключение PVC больше не отключает и не перенумеровывает постороннее multipath-устройство на узле; карта multipath без групп путей, оставшаяся после отказа SAN-коммутатора, сбрасывается через multipath -f, а не принудительным dmsetup remove; узловой плагин расходует меньше памяти при получении списка multipath-устройств.
  • alletra-9000-primera-and-3par-csp: 3.1.0 → 3.3.0 (changelog)
    • Обслуживает HPEStorageConnection с storageType: Primera3Par. Среди исправлений апстрима: публикация тома, которая не удалась из-за одновременного удаления объекта хоста на СХД, больше не записывает LunId=-1 и не блокирует все последующие подключения тома; ControllerUnpublishVolume больше не оставляет устаревший экспорт, мешающий удалить том; устранены повторяющиеся OOM-завершения (по нехватке памяти) пода CSP из-за избыточного логирования; клонирование PVC в больший размер, чем у исходного, теперь работает.
  • alletra-6000-and-nimble-csp: 3.1.0 → 3.3.0 (changelog)
    • Обслуживает HPEStorageConnection с storageType: NimbleAlletra.

v0.2.27

Дата релиза: 2026-09-09

Узел, репозитории которого не могут поставить стек iSCSI, теперь получает его из собственного пакетного образа модуля, HPEStorageClass умеет резервировать долю файловой системы под суперпользователя, а взаимная блокировка, оставлявшая отдельные узлы без работающего узлового плагина, исправлена.

Ключевые изменения

Изменения в этом релизе:

  • Модуль сам ставит open-iscsi и multipath-tools из собственного пакетного образа, если репозитории узла их не дают. Раньше такой узел оставался как есть, и любое подключение тома на нём падало через несколько минут монтирования с ошибкой chroot: failed to run command 'iscsiadm'.
  • HPEStorageClass умеет запросить долю файловой системы под суперпользователя — классический резерв ext4 — аннотацией storage.deckhouse.io/ext4-reserved-percent. Без такого запроса тома ext4 теперь форматируются вообще без резерва, тогда как раньше теряли стандартные 5% ext4.
  • Перезапуск node-driver-registrar больше не заклинивает узловой плагин. Из-за этой взаимной блокировки один-два узла кластера оставались без csi.hpe.com в своём CSINode и не могли подключить том, пока соседние узлы работали нормально.

Новый функционал

В этом релизе добавлено:

  • Узел, на котором пакеты open-iscsi и multipath-tools не устанавливаются из репозиториев, теперь получает их из собственного пакетного образа модуля iscsi-tools: содержимое разворачивается в /var/lib/deckhouse/sds/csi-hpe, каждый исполняемый файл запускается со своим путём поиска библиотек, и для демонов поднимаются два юнита — d8-csi-hpe-iscsid.service и d8-csi-hpe-multipathd.service. Пакеты дистрибутива остаются предпочтительным путём, и два пути никогда не смешиваются: узел, у которого есть свой iscsiadm, целиком сохраняет своё, потому что клиент одной версии не разговаривает с iscsid другой. Уже имеющийся на узле /etc/iscsi/initiatorname.iscsi не трогается, поэтому узел сохраняет тот IQN, под которым его знает СХД. Всё остальное, что настраивает модуль, применяется к такому узлу точно так же, как к любому другому, включая find_multipaths no, без которого драйвер вообще не видит карту device-mapper.
  • Аннотация storage.deckhouse.io/ext4-reserved-percent на HPEStorageClass задаёт долю файловой системы, оставляемую суперпользователю: целое число процентов от 0 до 50, по умолчанию 0. Значение доходит до драйвера как параметр fsCreateOptions управляемого StorageClass, потому что CSI-драйвер не видит аннотаций StorageClass. Без аннотации модуль теперь явно указывает -m0, тогда как обычный mkfs.ext4 оставлял стандартные 5% ext4. Резерв действует на тома, созданные после этого, — уже существующая файловая система сохраняет тот резерв, с которым была создана, — и только для ext4: класс с fsType: xfs не затрагивается, так как XFS не оставляет блоков суперпользователю. Некорректное значение оставляет HPEStorageClass с Ready=False и причиной в статусе, вместо того чтобы сломать создание тома позже.
  • Настройка модуля logLevel задаёт, насколько подробно пишет логи контроллер: ERROR, WARN, INFO, DEBUG или TRACE, по умолчанию INFO.
  • Контроллер отдаёт метрики, а ServiceMonitor подставляет их основному Prometheus кластера: это то, что controller-runtime сообщает о каждом контроллере модуля — число и длительность реконсиляций, глубина очереди задач, задержки client-go. Сам контроллер слушает метрики на 127.0.0.1, а каждый сбор авторизует kube-rbac-proxy в том же поде.

Исправления

В этом релизе исправлено:

  • Перезапуск node-driver-registrar больше не уносит с собой CSI-драйвер. Проба liveness у csi-node смотрела на порт, который отдаёт регистратор, но была прикреплена к контейнеру драйвера, и они вставали в клинч: регистратор по своей логике завершается при неудачной регистрации, вместе с ним исчезает порт, проба убивает драйвер, пропадает сокет CSI, и перезапущенный регистратор до него уже не дотягивается. Узлы поднимались с заклиненным узловым плагином — десяток перезапусков и отсутствие csi.hpe.com в их CSINode, то есть подключить том на таком узле было нельзя, — пока другие узлы того же кластера работали нормально. Теперь проба находится на том контейнере, который её обслуживает.
  • Изменение конфигурации multipath больше не падает на узле, где multipathd включён, но не запущен: такой юнит наотрез отказывает в перезагрузке конфигурации, шаг настройки узла после этого ретраился бесконечно, и find_multipaths no от модуля так и не доходил до демона — а именно он решает, получит ли LUN с единственным путём карту device-mapper вообще. Обработчик перезапускает юнит, если перезагрузить конфигурацию не удаётся, и охватывает также собственный юнит модуля d8-csi-hpe-multipathd.service.

Рекомендации по обновлению

Перед обновлением учтите следующее:

  • Каждый StorageClass, управляемый HPEStorageClass с fsType ext4, при обновлении получает параметр fsCreateOptions: -m0. Так как parameters существующего StorageClass в Kubernetes неизменяемы, контроллер один раз пересоздаёт такой класс сам. Существующие тома, PVC и данные в них не затрагиваются, а том, созданный до обновления, сохраняет тот резерв, с которым была создана его файловая система. Руками делать ничего не нужно.

Документация

Изменения в документации:

  • Появился раздел FAQ о двух способах, которыми стек iSCSI попадает на узел, — из репозиториев самого узла и из пакетного образа модуля: какой путь предпочтителен и почему, что и куда кладёт запасной путь, как по узлу понять, какой из двух он выбрал, и какие две вещи запасной путь намеренно не меняет.
  • Появился раздел FAQ о доле тома, оставляемой суперпользователю: аннотация, диапазон значений, то, что резерв действует только на тома, созданные после этого, и то, что класс с fsType: xfs не затрагивается.
  • Русский справочник по HPEStorageClass снова соответствует схеме: поля называются storageConnectionName и fsType, а accessProtocol и cpg в нём вовсе отсутствовали. Поле spec.controlPlane.address у HPEStorageConnection теперь описано как устаревшее в пользу backendAddress. Оба манифеста CRD генерируются из Go-типов API, поэтому схема и её описание больше не смогут разойтись.

v0.2.26

  • Исправление: контроллеру выданы права patch на events вместо list — повторная запись события больше не отклоняется по правам
  • Опциональные ресурсы включаются по наличию CRD в API, а не по списку включённых модулей — проверки переведены на helm_lib_api_version_exists
  • Фиксы CVE
  • Обновление базовых образов до v2.1.2, Go до 1.26.6 и lib-helm до 1.72.14

v0.2.25

  • HPEStorageClass и HPEStorageConnection публикуют status.conditions и status.observedGeneration, добавлена колонка Ready. Поле status.phase сохраняет прежний набор значений, но теперь вычисляется из условия Ready
  • Исправление: на узлах принудительно выставляется find_multipaths no отдельным файлом /etc/multipath/conf.d/99-deckhouse-csi-hpe-defaults.conf, поэтому LUN, доступный по одному пути, всё равно получает multipath-устройство, и подключение тома больше не завершается ошибкой “device not found with serial”
  • Исправление: поды primera3par-csp и nimble-csp больше не закрепляются на вышедшем из строя узле — убраны tolerations, бессрочно допускавшие not-ready и unreachable, поэтому Deployment переезжает на живой узел
  • Обновление базовых образов до v1.3.25, Go 1.26.5 и lib-helm до 1.72.13

v0.2.24

  • Модуль snapshot-controller больше не обязательная зависимость: VolumeSnapshotClass создаётся только при наличии CRD snapshot.storage.k8s.io, иначе HPEStorageConnection обрабатывается без снапшотной части
  • Обновление базовых образов, Go 1.26.5 и lib-helm до 1.72.12
  • Устранена уязвимость в gRPC (GHSA-hrxh-6v49-42gf)
  • Внутренние изменения в сборке модуля

v0.2.23

  • Обновление базовых образов, Go 1.26.5 и lib-helm до 1.72.10
  • Внутренние изменения в сборке модуля

v0.2.22

  • Исправление: секреты доступа к registry Deckhouse теперь ограничены активным источником образов
  • Обновление базовых образов, Go 1.26.5 и lib-helm до 1.72.9
  • Внутренние изменения в сборке модуля

v0.2.21

  • Обновление базовых образов container-base до v1.1.2

v0.2.20

  • Переход runtime-образа csi-hpe на distroless-базу

v0.2.19

  • При пробросе меток из HPEStorageClass в StorageClass теперь исключаются метки с заданными игнорируемыми префиксами
  • Обновление базовых образов и lib-helm до 1.72.0

v0.2.18

  • Метки из HPEStorageClass теперь пробрасываются в управляемый StorageClass Kubernetes
  • Обновление базовых образов, Go 1.25.10 и lib-helm 1.71.12

v0.2.17

  • Внутренние изменения в структуре и сборке модуля

v0.2.16

  • Обновление базовых образов, Go 1.25.10 и lib-helm 1.71.11
  • Внутренние изменения в сборку модуля

v0.2.15

  • Исправления в структуру модуля

v0.2.14

  • Изменения в CI: DistroPackagesProxy и env прокси в werf, доработки CVE-сканов (role_name, checkout)
  • Добавлены кластерные роли user-authz в шаблонах

v0.2.13

  • Установка пакетов в NodeGroupConfiguration больше не приводит к падению скрипта при ошибках

v0.2.12

  • Добавлены инфраструктура и недостающие точки монтирования для distroless-образов
  • Обновление базовых образов, Go и lib-helm (фикс CVE)

v0.2.11

  • Обновление базовых образов и версии golang
  • Обновление хуков, работающих при удалении модуля
  • Отключен запрос Capacity со стороны k8s (CSI не поддерживает выдачу Capacity)
  • Исправления в NGC, подготавливающих ноды
  • Исправления в манифестах модуля

v0.2.10

  • Обновление версии CSI до v3.0.0
  • Переключение с yum на dnf для установки пакетов на дистрибутивах CentOS
  • Исправление CVE
  • Обновление документации
  • Исправление аннотации VolumeSnapshotClass в StorageClasses

v0.2.9

  • Обновлена версия базовых образов

v0.2.8

  • Обновлена версия Go до 1.24.9
  • Обновлена lib-helm до deckhouse_lib_helm-1.64.1

v0.2.7

  • Технический релиз, внутренние доработки в модуле

v0.2.6

  • Технический релиз, внутренние доработки в модуле

v0.2.5

  • Добавлены файлы release notes

v0.2.4

  • Добавлена дополнительные монтирования для поддержки containerd v2

v0.2.3

  • Добавлена информация о необходимости snapshot-controller для работы модуля
  • Добавлен readonlyRootFilesystem для большей безопасности модуля

v0.2.2

  • Добавлена зависимость от snapshot-controller

v0.2.1

  • Технический релиз, внутренние доработки в модуле

v0.2.0

  • Тотальный рефакторинг модуля
  • Правки в документации
  • Фикс CVE, кроме GHSA-m425-mq94-257g в CSI, требующего длительного разбора зависимостей (в плане)
  • CVE-2025-22869 в проприетарном бинарном файле

v0.1.4

  • Добавлены требования к версии Deckhouse (>= 1.67)