Стадия жизненного цикла модуля: Предварительная версия (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
- Стартовый релиз, базовая функциональность работает