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

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

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

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