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

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

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)