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

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

v0.1.27

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

Стек iSCSI на узле теперь всегда берётся из собственного пакета модуля, а не из репозиториев узла, Trident обновлён до v26.06.1, а на DKP 1.78 и новее роли доступа модуля переведены на схему RBACv2 с capability (возможность) и scope (область действия).

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

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

  • NodeGroupConfiguration больше не запрашивает open-iscsi и multipath-tools у пакетного менеджера узла: каждый узел с меткой storage.deckhouse.io/csi-netapp-node получает пакет модуля iscsi-tools, поэтому узел без доступа к своим репозиториям больше не ждёт пакетный менеджер при каждом запуске bashible, а стек больше не зависит от версии, которая лежит в репозиториях.
  • NetApp Trident обновлён с v26.02.1 до v26.06.1.
  • На DKP 1.78 и новее модуль выдаёт доступ к NetappStorageClass и NetappStorageConnection через роли d8:system-capability:csi-netapp:view и d8:system-capability:csi-netapp:edit; ниже 1.78 роли остаются прежними.

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

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

  • На DKP 1.78 и новее модуль поставляет ClusterRole d8:system-capability:csi-netapp:view (чтение NetappStorageClass и NetappStorageConnection) и d8:system-capability:csi-netapp:edit (их создание, изменение и удаление) с метками rbac.deckhouse.io/kind: capability и rbac.deckhouse.io/scope: system, чтобы DKP агрегировал их по новой схеме RBACv2. На таких кластерах они заменяют d8:manage:permission:module:csi-netapp:view и d8:manage:permission:module:csi-netapp:edit; на кластере ниже 1.78 старые роли остаются без изменений.

Улучшения

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

  • Стек iSCSI берётся только из пакета модуля iscsi-tools. Его установочный скрипт решает отдельно для каждой пары — iscsiadm с iscsid, multipath с multipathd: пара, которая у хоста уже есть своя, остаётся хостовой, и модуль только включает для неё unit (служба systemd) дистрибутива; недостающая пара ставится в /var/lib/deckhouse/sds/csi-netapp со своим unit — d8-csi-netapp-iscsid.service или d8-csi-netapp-multipathd.service. Поэтому хост с open-iscsi, но без multipath-tools, теперь получает multipathd от модуля, а раньше не получал ничего: пакет отступал, как только находил на хосте iscsiadm. Настройка multipath, блок устройств NetApp ONTAP, модули ядра и метка storage.deckhouse.io/csi-netapp-node-ready применяются одинаково на всех узлах.
  • Если после установки пакета модуля инструменты узла изменились — пакет дистрибутива удалили или поставили рядом с пакетом модуля, — при следующем запуске bashible пакет устанавливается заново, и решение о том, какая пара откуда берётся, принимается снова. Раньше оно принималось один раз на версию модуля: потерянный хостом инструмент оставался недоступным до следующего релиза, а демон дистрибутива работал рядом с демоном модуля.

Исправления

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

  • При обновлении файлы, которые прежняя версия пакета iscsi-tools разложила вне своего каталога — обёртки для PATH в /usr/local/sbin и плагины multipath в /usr/lib/multipath, — больше не принимаются за собственные файлы хоста. Обновление пакета выбрасывало их из его списка файлов, и они не удалялись, когда узел получал пару дистрибутива; теперь они распознаются как файлы пакета, снова попадают в список и убираются вместе с ним.
  • На узлах CentOS и РЕД ОС, когда модуль заново генерирует пустое или шаблонное имя инициатора в /etc/iscsi/initiatorname.iscsi, он теперь перезапускает не только iscsid дистрибутива, но и d8-csi-netapp-iscsid.service. Узел, на котором работает iscsid модуля, раньше сохранял прежнее имя инициатора, пока демон не перезапускали вручную.

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

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

  • В бинарных файлах Trident golang.org/x/mod обновлён с v0.38.0 до v0.40.0, что закрывает CVE-2026-56864 и CVE-2026-56865; google.golang.org/grpc остаётся на v1.83.2.

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

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

  • Вручную на узлах ничего делать не нужно. Узел, на котором уже работают iscsid и multipathd дистрибутива, сохраняет их; узел, у которого нет какой-либо из пар, получает её из пакета модуля при следующем запуске bashible. На новые узлы пакеты дистрибутива больше не ставятся.
  • На DKP 1.78 и новее роли d8:manage:permission:module:csi-netapp:view и d8:manage:permission:module:csi-netapp:edit заменяются на d8:system-capability:csi-netapp:view и d8:system-capability:csi-netapp:edit. Доступ, выданный через агрегацию ролей DKP, сохраняется; ClusterRoleBinding, который ссылается на старую роль по имени, нужно перенаправить на новую.

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

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

  • Страница настройки модуля описывает, откуда на узле берутся open-iscsi и multipath-tools: решение по каждой паре, что и куда модуль кладёт на хост и как по узлу понять, какая пара откуда взята.
  • Русский справочник NetappStorageClass и NetappStorageConnection теперь охватывает поля status.conditions, а у NetappStorageClass.spec появилось описание на обоих языках.

Зависимости

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

  • NetApp Trident: 26.02.1 → 26.06.1 (changelog)
    • Добавлен CRD tridentvolumemoves.trident.netapp.io, который модуль устанавливает и к которому выдаёт доступ Trident. Патч модуля, запускающий multipath и multipathd на хосте через nsenter, теперь охватывает также multipathd -kadd path, multipathd -kfail path, перезагрузку карты multipath -r для iSCSI и проверку find_multipaths для FCP.

v0.1.26

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

Обновление безопасности: бинарные файлы Trident и хуки модуля пересобраны с исправленными grpc и x/crypto.

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

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

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

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

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

  • google.golang.org/grpc обновлён с v1.82.1 до v1.83.2 в trident_orchestrator и node_prep, что закрывает CVE-2026-84303, CVE-2026-84304 и CVE-2026-84445.
  • golang.org/x/crypto обновлён с v0.53.0 до v0.57.0 в trident_orchestrator, node_prep и хуках модуля (go-hooks), что закрывает CVE-2026-56854 (обход аутентификации по адресу источника в x/crypto/ssh), CVE-2026-56855 и CVE-2026-78662.

v0.1.25

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

Узел, репозитории которого не могут дать стек iSCSI, теперь получает его из собственного пакетного образа модуля, NetappStorageConnection задаёт, сколько тома оставлять суперпользователю — по умолчанию нисколько, тогда как раньше ext4 забирал 5%, — а контроллер модуля отдаёт метрики и берёт уровень логирования из настройки модуля.

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

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

  • Модуль сам ставит open-iscsi и multipath-tools из собственного пакетного образа, если репозитории узла их не дают. Раньше такой узел оставался как есть, и любое подключение тома на нём падало с ошибкой nsenter: failed to execute iscsiadm.
  • NetappStorageConnection умеет запросить долю файловой системы под суперпользователя — классический резерв ext4 — аннотацией storage.deckhouse.io/ext4-reserved-percent. Без такого запроса тома форматируются без резерва, тогда как раньше каждый том ext4 отдавал root’у стандартные 5%.
  • Перезапуск node-driver-registrar больше не заклинивает узловой плагин. Из-за этой взаимной блокировки один-два узла кластера оставались без csi.trident.netapp.io в своём CSINode и не могли подключить том, пока соседние узлы работали нормально.

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

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

  • Узел, на котором пакеты open-iscsi и multipath-tools (в RPM-дистрибутивах — iscsi-initiator-utils и device-mapper-multipath) не устанавливаются из репозиториев, теперь получает их из собственного пакетного образа модуля iscsi-tools: содержимое разворачивается в /var/lib/deckhouse/sds/csi-netapp, каждый исполняемый файл запускается со своим путём поиска библиотек, и для демонов поднимаются два юнита — d8-csi-netapp-iscsid.service и d8-csi-netapp-multipathd.service. Пакеты дистрибутива остаются предпочтительным путём, и два пути никогда не смешиваются: узел, у которого есть свой iscsiadm, целиком сохраняет своё, потому что клиент одной версии не разговаривает с iscsid другой. Всё, что NodeGroupConfiguration делает после установки, выполняется на таком узле точно так же, как на любом другом: переопределение find_multipaths no, блок устройств NetApp ONTAP, модули ядра и метка storage.deckhouse.io/csi-netapp-node-ready, которой дожидается узловой компонент CSI.
  • Аннотация storage.deckhouse.io/ext4-reserved-percent на NetappStorageConnection задаёт долю файловой системы, оставляемую суперпользователю: целое число процентов от 0 до 50, по умолчанию 0. Обратите внимание на ресурс: в отличие от остальных модулей хранения, значение задаётся на соединении, а не на StorageClass, — Trident держит опции mkfs на бэкенде, поэтому оно действует на все StorageClass, обслуживаемые этим соединением. Резерв действует на тома, созданные после этого; уже существующая файловая система сохраняет тот резерв, с которым была создана. Некорректное значение оставляет NetappStorageConnection с Ready=False и причиной в статусе, вместо того чтобы сломать создание тома позже.
  • Настройка модуля logLevel задаёт, насколько подробно пишет логи контроллер: ERROR, WARN, INFO, DEBUG или TRACE. По умолчанию INFO, тогда как раньше контроллер писал на уровне DEBUG и изменить это было нельзя.
  • Контроллер отдаёт метрики, а PodMonitor подставляет их основному Prometheus кластера: это то, что controller-runtime сообщает о каждом контроллере модуля — число и длительность реконсиляций, глубина очереди задач, задержки client-go. Сам контроллер слушает метрики на 127.0.0.1, а каждый сбор авторизует kube-rbac-proxy в том же поде.

Улучшения

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

  • Release notes пишутся по локалям в .release-notes/<тег>.yaml и <тег>.ru.yaml с разделами summary, highlights, new_features, improvements, fixes, security, breaking, upgrade_notes, known_issues, docs и dependencies. В кластер попадают обе локали, поэтому консоль показывает описание на языке читателя; релизы, выпущенные до этого, остаются в прежнем плоском формате и отображаются на той же странице точно так же, как раньше.

Исправления

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

  • Опции форматирования formatOptions, которые модуль записывает в бэкенд Trident, наконец до него доходят. Раньше они лежали на верхнем уровне спеки TridentBackendConfig, где у драйвера такого поля нет: Trident читает их из-под defaults, поэтому значение с верхнего уровня разбиралось в ничто и молча отбрасывалось. Из-за этого -E nodiscard, который модуль запрашивал всегда, ни разу не применялся, и каждый том форматировался с полным discard устройства.
  • Перезапуск node-driver-registrar больше не уносит с собой CSI-драйвер. Проба liveness у csi-node смотрела на порт, который отдаёт регистратор, но была прикреплена к контейнеру драйвера, и они вставали в клинч: регистратор по своей логике завершается при неудачной регистрации, вместе с ним исчезает порт, проба убивает драйвер, пропадает сокет CSI, и перезапущенный регистратор до него уже не дотягивается. Узел поднимался с заклиненным узловым плагином — десяток перезапусков и отсутствие csi.trident.netapp.io в его CSINode, то есть подключить том на таком узле было нельзя, — пока другие узлы того же кластера работали нормально. Теперь проба находится на том контейнере, который её обслуживает.
  • Изменение конфигурации multipath больше не падает на узле, где multipathd включён, но не запущен: такой юнит наотрез отказывает в перезагрузке конфигурации, шаг настройки узла после этого ретраился бесконечно, и find_multipaths no от модуля оставался неприменённым — а его читают собственные предполётные проверки Trident, прежде чем согласиться подключить том. Обработчик перезапускает юнит, если перезагрузить конфигурацию не удаётся, и охватывает также собственный юнит модуля d8-csi-netapp-multipathd.service.
  • Релизный тег без release notes публиковал пустой changelog.yaml, оставляя ModuleRelease.spec.changelog пустым при зелёной сборке. Теперь такой тег роняет сборку.

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

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

  • Тома, созданные после обновления, не несут резерва под суперпользователя, поэтому весь том доступен нагрузке; уже существующая файловая система сохраняет те 5%, с которыми была создана. Руками делать ничего не нужно: контроллер сам перезаписывает TridentBackendConfig каждого соединения, а существующие тома и PVC не затрагиваются.
  • После обновления контроллер пишет логи на уровне INFO, тогда как раньше писал на DEBUG безусловно. Чтобы вернуть прежнюю подробность, задайте settings.logLevel значение DEBUG или TRACE.
  • Узел, чей под csi-node застрял во взаимной блокировке при регистрации, восстановится сам по мере раскатки исправленного пода DaemonSet — удалять поды руками не требуется.

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

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

  • Страница настроек модуля описывает два способа, которыми стек iSCSI попадает на узел, — из репозиториев самого узла и из пакетного образа модуля: какой путь предпочтителен и почему, что и куда кладёт запасной путь, как по узлу понять, какой из двух он выбрал, и какие два механизма остаются незаметными, пока том не откажется монтироваться.
  • Там же описана доля тома, оставляемая суперпользователю: аннотация, то, что её место — на соединении, а не на StorageClass, диапазон значений и то, что резерв действует только на тома, созданные после этого.

v0.1.24

  • Исправление: релизный образ больше не собирается из кэша с устаревшим changelog.yaml — зависимости git-маппинга привязаны к стадии install, на которой файл и копируется
  • Обновление базовых образов до v2.1.4
  • Внутренние изменения в сборке модуля

v0.1.23

  • Исправление: успешное монтирование NFS больше не считается ошибкой — в образ добавлен /etc/mtab (симлинк на /proc/self/mounts), из-за отсутствия которого mount возвращал код 16
  • Исправление: контроллеру выданы права patch на events вместо list — повторная запись события больше не отклоняется по правам
  • Фиксы CVE
  • Обновление базовых образов до v2.1.2, Go до 1.26.6 и lib-helm до 1.72.14

v0.1.22

  • Исправление: секрет с учётными данными создаётся раньше TridentBackendConfig, который на него ссылается, иначе Trident отклонял backend с ошибкой «backend credentials not found»; при удалении порядок обратный. Заодно устранён ранний выход из reconcile, при котором Ready=True публиковался до создания секрета, StorageClass и VolumeSnapshotClass
  • Обновление базовых образов до v1.3.25, Go 1.26.5 и lib-helm до 1.72.13
  • Внутренние изменения: работа с условиями переведена на общую библиотеку

v0.1.21

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

v0.1.20

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

v0.1.19

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

v0.1.18

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

v0.1.17

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

v0.1.16

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

v0.1.15

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

v0.1.14

  • csi-netapp переведён на distroless-сборку Trident (host-бинарники через nsenter), повышена устойчивость node-плагина к рестартам
  • В CRD NetappStorageClass и NetappStorageConnection добавлены status.conditions и printer columns
  • Добавлены NodeGroupConfiguration для установки iscsi/multipath на Altlinux, RedOS-like и Ubuntu-like
  • Исправлены уязвимости (CVE) в зависимостях бинарей Trident

v0.1.13

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

v0.1.12

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

v0.1.11

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

v0.1.10

  • Фикс HA-mode, теперь он работает корректно

v0.1.9

  • Обновлена версия базовых образов
  • Исправления в документации

v0.1.8

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

v0.1.7

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

v0.1.6

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

v0.1.5

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

v0.1.4

  • Фиксы CVE

v0.1.3

  • Добавлены фиксы для поддержки containerd v2
  • Добавлена зависимость от snapshot-controller

v0.1.1

  • Закрытие CVE
  • Рефакторинг модуля, правка ошибок в манифестах
  • Улучшения в документации