Стадия жизненного цикла модуля: Предварительная версия (preview)

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

v0.3.18

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

Модуль теперь берёт стек iSCSI только из собственного пакета, его метрики действительно собираются, блочные тома больше не отдают устаревшие данные предыдущего тома, а для DKP 1.78 добавлены роли доступа по схеме capability/scope.

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

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

  • NodeGroupConfiguration больше не запрашивает open-iscsi, multipath-tools и sg3-utils у пакетного менеджера узла: он всегда ставит собственный пакет модуля iscsi-tools, который оставляет хосту уже имеющиеся у него пары утилит и добавляет только недостающую.
  • Метрики контроллера и CSI-драйвера, появившиеся в v0.3.16, теперь действительно собираются: sidecar kube-rbac-proxy в подах модуля не мог проверить подлинность запросов Prometheus, поэтому каждый сбор метрик получал 401, а цели оставались недоступными с постоянным алертом TargetDown.
  • При подготовке (stage) блочного тома (volumeMode: Block) теперь сбрасывается страничный кеш его multipath-устройства, поэтому под больше не читает закешированные данные другого тома, который раньше был на этом узле под тем же именем multipath-карты.

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

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

  • В DKP 1.78 и новее модуль поставляет роли доступа по схеме capability/scope (возможность/область действия): d8:system-capability:csi-scsi-generic:view и d8:system-capability:csi-scsi-generic:edit для кластерных ресурсов SCSIStorageClass, SCSITarget и SCSIDevice, а также d8:namespace-capability:csi-scsi-generic:view и d8:namespace-capability:csi-scsi-generic:edit для PendingResizeRequest. Версия берётся из global.deckhouseVersion; ниже 1.78 по-прежнему создаются прежние роли d8:manage:permission:module:csi-scsi-generic:* и d8:use:capability:module:csi-scsi-generic:* без изменений.

Улучшения

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

  • Стек iSCSI берётся только из пакета модуля iscsi-tools; узел без доступа к репозиториям дистрибутива больше не ждёт пакетный менеджер на каждом запуске bashible. Пакет решает отдельно для каждой пары, iscsiadm с iscsid и multipath с multipathd: пара, которая есть у хоста, остаётся за хостом, и включается только её юнит (служба systemd) из дистрибутива; недостающая пара ставится в /var/lib/deckhouse/sds/csi-scsi-generic и работает как d8-csi-scsi-generic-iscsid.service или d8-csi-scsi-generic-multipathd.service. Хост с open-iscsi, но без multipath-tools, теперь получает multipathd модуля, чего раньше не было.
  • Если набор утилит на узле изменился после установки пакета (утилита хоста удалена или рядом с утилитой модуля поставлен пакет дистрибутива), NodeGroupConfiguration повторно запускает установку пакета, поэтому узел не остаётся без утилиты и не запускает две копии одного демона. Юнит модуля, оставшийся от пары, которую теперь предоставляет хост, отключается и удаляется.

Исправления

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

  • Sidecar kube-rbac-proxy контроллера, CSI-контроллера и CSI-узла привязаны к роли d8:rbac-proxy, поэтому могут проверять подлинность запросов Prometheus. Раньше каждый сбор метрик получал 401, up оставался равным 0, а TargetDown срабатывал постоянно; менять конфигурацию модуля не нужно.
  • При подготовке блочного тома (volumeMode: Block) для его multipath-устройства выполняется blockdev --flushbufs, как это уже делалось для томов с файловой системой. Имя multipath-карты на узле используется повторно, и страничный кеш хоста, через который читают loop-устройство kubelet и любой контейнер, открывающий устройство без O_DIRECT, мог хранить данные другого тома. Неудачный сброс записывается в лог и не прерывает подготовку тома.
  • CSI-драйвер на узле больше не падает с паникой, если сессия iSCSI завершилась между двумя опросами списка сессий при подключении тома; подключение теперь завершается ошибкой not all sessions exist for IQN ..., but no portal is reported missing и повторяется.
  • При обновлении модуля проверщики путей multipath, которые предыдущая версия пакета iscsi-tools положила в /usr/lib/multipath, больше не принимаются за собственные файлы хоста, поэтому удаление пакета их убирает.

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

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

  • На узлах, где open-iscsi или multipath-tools из дистрибутива не установлены, теперь используется копия модуля, а пакеты дистрибутива не ставятся. Уже установленные пакеты не удаляются и продолжают использоваться. sg3-utils модуль больше не ставит; если его утилиты нужны на узлах, установите пакет самостоятельно.
  • В DKP 1.78 и новее прежние ClusterRole d8:manage:permission:module:csi-scsi-generic:{view,edit} и d8:use:capability:module:csi-scsi-generic:{view,edit} заменяются ролями d8:system-capability:* и d8:namespace-capability:*. RoleBinding или ClusterRoleBinding, которые ссылаются на прежнюю роль по имени, нужно перевести на новую.

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

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

  • Раздел FAQ про open-iscsi и multipath-tools теперь описывает, откуда на узле берётся стек iSCSI, как выбирается каждая пара и как проверить, какой источник использует узел.

v0.3.17

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

Обновление безопасности: CSI-драйвер и контроллер пересобраны с google.golang.org/grpc v1.83.2.

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

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

  • google.golang.org/grpc обновлён с v1.82.1 до v1.83.2 в CSI-драйвере и контроллере, что закрывает CVE-2026-84303, CVE-2026-84304 и CVE-2026-84445.

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

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

  • google.golang.org/grpc обновлён с v1.82.1 до v1.83.2 в CSI-драйвере и контроллере, что закрывает CVE-2026-84303, CVE-2026-84304 и CVE-2026-84445.

v0.3.16

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

Модуль отдаёт метрики контроллера и CSI-драйвера, сам ставит iSCSI-стек там, где репозитории узла его дать не могут, и позволяет задать в StorageClass резерв ext4 для суперпользователя.

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

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

  • Контроллер и CSI-драйвер отдают метрики своих операций, их забирают через kube-rbac-proxy того же пода; PodMonitor для каждого поставляется вместе с модулем.
  • Там, где пакетный менеджер узла не может установить open-iscsi и multipath-tools, модуль ставит их из собственного образа iscsi-tools, а не оставляет узел без iSCSI-стека.
  • Аннотация storage.deckhouse.io/ext4-reserved-percent на SCSIStorageClass задаёт долю файловой системы ext4, которая остаётся суперпользователю.

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

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

  • Контроллер и CSI-драйвер учитывают, что они обслуживают. CSI-драйвер отдаёт csi_scsi_generic_csi_operations_total и csi_scsi_generic_csi_operation_duration_seconds; и контроллер, и драйвер опрашиваются по TLS через kube-rbac-proxy своего пода, PodMonitor для каждого входит в модуль.
  • Метрики отдаются на трёх портах, каждый настраивается в values модуля: controllerMetricsPort (8080) для контроллера, csiControllerMetricsPort (4266) и csiNodeMetricsPort (4267) для CSI-контроллера и CSI-узла. Поды CSI работают в hostNetwork, поэтому последние два — порты уровня узла.
  • Когда пакетный менеджер узла не может установить open-iscsi и multipath-tools, модуль откатывается на собственный пакетный образ iscsi-tools: содержимое распаковывается в /var/lib/deckhouse/sds/csi-scsi-generic, демоны поднимаются юнитами d8-csi-scsi-generic-iscsid.service и d8-csi-scsi-generic-multipathd.service. Узел, у которого уже есть свой стек, остаётся нетронутым, а существующий /etc/iscsi/initiatorname.iscsi не перезаписывается — узел сохраняет тот IQN, под которым его знает массив.
  • Аннотация storage.deckhouse.io/ext4-reserved-percent на SCSIStorageClass задаёт процент тома, оставляемый суперпользователю: целое число от 0 до 50, по умолчанию по-прежнему 0. Она действует только на тома, созданные после её установки, для fsType: xfs игнорируется с предупреждением в логе узла, а при недопустимом значении SCSIStorageClass переходит в фазу Failed с причиной в status.reason — вместо отказа при создании тома позже. Смена аннотации заставляет контроллер пересоздать StorageClass, потому что parameters существующего в Kubernetes неизменяемы; на существующие тома и PVC это не влияет.

Улучшения

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

  • Контроллер и CSI-драйвер пишут логи через один логгер по единой шкале LOG_LEVEL, поэтому одно и то же значение означает одну и ту же подробность во всех компонентах модуля.
  • Значение logLevel по умолчанию теперь INFO, а не DEBUG — его получит кластер, в котором параметр не задан явно.

Исправления

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

  • SCSI-устройство с идентификатором EUI (WWID с префиксом 6) больше не роняет контроллер паникой в реконсайлере фильтра блочных устройств.

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

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

  • Руками делать ничего не нужно. Кластеру, который полагался на прежнюю подробность логов, следует явно задать logLevel: DEBUG в конфигурации модуля, поскольку значение по умолчанию теперь INFO.
  • Поды CSI работают в hostNetwork и теперь занимают на каждом своём узле порты 4266 и 4267. Оба зарегистрированы в реестре портов Deckhouse; менять их в values модуля стоит только если на узле эти порты уже кем-то заняты.

v0.3.15

  • libiscsi обновлён до 0.0.6 на базе upstream 1.20.3: закрыты удалённо триггерируемые ошибки работы с памятью при разборе data-in, добавлена поддержка CHAP-SHA1, iscsi-ls больше не обрезает JSON, если цель публикует недоступный портал
  • Исправление: сервис iscsi-command (0.0.10) читает stdout iscsi-ls отдельно от stderr, поэтому диагностическая строка рядом с корректным листингом больше не ломает разбор JSON; дочерний процесс завершается по отмене или таймауту запроса
  • Из образа контроллера удалён неиспользуемый артефакт libiscsi (исходники, дерево сборки и разделяемые библиотеки) — вместе с ним из образа ушла и его CVE-поверхность
  • Исправление: релизный образ больше не собирается из кэша с устаревшим changelog.yaml — зависимости git-маппинга привязаны к стадии install, на которой файл и копируется
  • Обновление базовых образов до v2.1.4
  • Внутренние изменения в сборке модуля

v0.3.14

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

v0.3.13

  • Исправление: цели снова обнаруживаются повторно — из-за TTL, продлевавшегося при каждом чтении, цель обнаруживалась один раз за время жизни контроллера, и LUN, предъявленный после старта, не подхватывался никогда. Интервал повторного обнаружения вынесен в отдельный параметр TARGET_RESCAN_INTERVAL со значением по умолчанию 5 минут
  • SCSIStorageClass, SCSITarget и SCSIDevice публикуют status.conditions и status.observedGeneration, добавлена колонка Ready
  • SCSIDevice: собственный тип условия и поле status.aggregatedStatus заменены на стандартный metav1.Condition, поле status.phase теперь вычисляется из условий, публикуются условия Attached, Mounted и Error
  • Ошибки контроллеров больше не подавляются фиксированным повтором через 3 секунды, а возвращаются в controller-runtime — это включает экспоненциальную задержку повторов и учёт ошибок в метриках
  • Обновление базовых образов до v1.3.25, Go 1.26.5 и lib-helm до 1.72.13

v0.3.12

  • Исправлен запуск компонентов модуля — возвращено монтирование hostPath /sys/fs/cgroup, удалённое в v0.3.11 как избыточное, и добавлено в контроллер модуля, где его не было. Монтирование нужно не драйверу, а среде запуска контейнеров — при монтировании хостового /sys подстановка sysfs для privileged-контейнеров вытесняется, а cgroup монтируется раньше /sys, в каталог distroless-образа (образа без пакетного окружения), где /sys/fs отсутствует и не может быть создан из-за readOnlyRootFilesystem
  • Исправлено монтирование initiatorname.iscsi — вместо hostPath типа File монтируется каталог /etc/iscsi. Раньше на узле с ненастроенным open-iscsi под контроллера навсегда оставался в ContainerCreating, и единственной диагностикой было событие kubelet; теперь контроллер запускается и сообщает об отсутствии имени инициатора в своём логе
  • Удалено ненужное монтирование /etc/iscsi в контейнер iscsi-command-service — сервис получает имя инициатора по gRPC и к файлу не обращается, а под непривилегированным пользователем файл и не был читаем
  • Обновление базовых образов v1.3.21, Go 1.26.5 и lib-helm до 1.72.12

v0.3.11

  • Исправлено обновление статуса SCSIDevice — устройство в состоянии Bound больше не теряет список SCSI-таргетов, если фоновое сканирование их не обнаружило (это обнуляло размер устройства, переводило его в Degraded и ломало удаление тома)
  • Исправлена гонка при подключении устройства — модуль ожидает появления symlink (символической ссылки) /dev/disk/by-id/scsi-, которую udev создаёт асинхронно, вместо однократной попытки её прочитать
  • Удалены избыточные монтирования hostPath /sys/fs/cgroup из контейнеров CSI-контроллера и CSI-узла — драйвер не работает с cgroups, а хостовый /sys уже смонтирован целиком
  • Устранена уязвимость GHSA-hrxh-6v49-42gf в google.golang.org/grpc, зависимость обновлена до 1.82.1
  • Обновление базовых образов v1.3.10, Go 1.26.5 и lib-helm до 1.72.10
  • Внутренние изменения в сборке модуля

v0.3.10

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

v0.3.9

  • Исправлено формирование секрета доступа к registry (deckhouse-registry): теперь в него попадают данные авторизации только активного источника образов
  • Добавлены примеры настройки Fibre Channel в документацию
  • Обновление базовых образов container-base до v1.1.8, Go 1.26.4 и lib-helm до 1.72.4

v0.3.8

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

v0.3.7

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

v0.3.6

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

v0.3.5

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

v0.3.4

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

v0.3.3

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

v0.3.2

  • Добавлены недостающие точки монтирования в distroless-образах csi-scsi-generic
  • Обновление базовых образов, Go и lib-helm
  • Перевод документации по ресурсам

v0.3.1

  • Фиксы CVE

v0.3.0

  • Обновление базовых образов и версии golang для фиксов CVE
  • Рефакторинг сборки образов для перевода на distroless

v0.2.10

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

v0.2.9

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

v0.2.8

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

v0.2.7

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

v0.2.6

  • Фиксы CVE

v0.2.5

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

v0.2.4

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

v0.2.3

  • Изменения для поддержки containerd v2

v0.2.2

  • Добавлен readonlyRootFilesystem для большей безопасности модуля

v0.2.1

  • Фиксы CVE

v0.2.0

  • Рефакторинг модуля
  • Добавлена поддержка режима HA
  • Добавлено сокрытие используемых устройств от модуля sds-node-configurator
  • Правка багов связанных с multipathd
  • Расширение документации

v0.1.2

  • Поддержка автоматического resize файловой системы при изменении размера тома (и полуавтоматический запрос расширения томов)

v0.1.1

  • Множественные доработки и исправления в работе с FibreChannel

v0.1.0

  • Стартовый релиз, базовая функциональность работает