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

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

v0.2.32

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

Инструменты iSCSI, multipath и NVMe на узле теперь всегда берутся из собственных пакетов модуля, а не из репозиториев дистрибутива, а доступ к ресурсам модуля выдается через роли RBACv2 из DKP 1.78.

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

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

  • NodeGroupConfiguration больше не обращается к пакетному менеджеру узла за open-iscsi, multipath-tools и nvme-cli: узел без доступа к своим репозиториям больше не ждет их при каждом запуске bashible, а недостающие на узле инструменты ставятся из пакетов модуля iscsi-tools и nvme-tools.
  • В DKP 1.78 и новее модуль поставляет роли d8:system-capability:csi-yadro-tatlin-unified:view и d8:system-capability:csi-yadro-tatlin-unified:edit для YadroTatlinUnifiedStorageClass и YadroTatlinUnifiedStorageConnection.

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

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

  • Модуль поставляет роли RBACv2 для своих кластерных ресурсов YadroTatlinUnifiedStorageClass и YadroTatlinUnifiedStorageConnection: view дает get, list и watch, edit — create, update, patch, delete и deletecollection. В DKP 1.78 и новее это capability (право доступа в новой ролевой модели) d8:system-capability:csi-yadro-tatlin-unified:view и d8:system-capability:csi-yadro-tatlin-unified:edit с rbac.deckhouse.io/scope: system; в более ранних версиях DKP те же правила поставляются как d8:manage:permission:module:csi-yadro-tatlin-unified:view и d8:manage:permission:module:csi-yadro-tatlin-unified:edit. view агрегируется в роль хранилища viewer, а edit — в роль хранилища manager.

Улучшения

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

  • NodeGroupConfiguration ставит пакет iscsi-tools на каждый обслуживаемый модулем узел, а nvme-tools — на каждый такой узел, где настроен NVMe-TCP, вместо того чтобы сначала пробовать open-iscsi, multipath-tools и nvme-cli из дистрибутива. iscsi-tools теперь решает по каждой паре отдельно: пара iscsiadm/iscsid или multipath/multipathd, которая на узле уже есть, остается узловой, и включается только ее юнит из дистрибутива, а недостающая пара размещается в /var/lib/deckhouse/sds/csi-yadro-tatlin-unified с собственным юнитом d8-csi-yadro-tatlin-unified-*. Узел с open-iscsi, но без multipath-tools теперь получает multipathd модуля; раньше пакет модуля отступал, как только на узле находился любой iscsiadm. nvme-tools по-прежнему ставит nvme только на узел, где своего нет.
  • spec.controlPlane.nodeSelector и spec.dataPlane.nodeSelector в YadroTatlinUnifiedStorageConnection теперь атомарны для server-side apply (применение изменений на стороне API-сервера): селектор заменяется целиком, а не сливается по полям между двумя источниками изменений. Каждый элемент matchExpressions теперь обязан содержать key и operator; элемент без них и раньше ничего не выбирал.

Исправления

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

  • Узел, на котором собственные инструменты изменились после установки пакета модуля, настраивается заново при следующем запуске bashible. Шаг установки пакета выполнялся только один раз на версию модуля, поэтому инструмент, позднее пропавший с узла, оставался недоступным до следующего релиза, а установленный позже пакет дистрибутива запускал своего демона рядом с демоном модуля. Теперь NodeGroupConfiguration для iscsiadm, multipathd и nvme сравнивает, есть ли инструмент на узле и в пакете, и переустанавливает пакет, если это больше не согласуется.
  • Файлы, которые прежняя версия iscsi-tools или nvme-tools положила вне собственного каталога, — обертки /usr/local/sbin/iscsiadm и /usr/local/sbin/nvme, ссылки и модули multipath, — после обновления больше не принимаются за файлы узла и удаляются при удалении пакета.

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

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

  • Ничего не нужно делать вручную. Узлы, где уже работают iscsid, multipathd или nvme из дистрибутива, сохраняют их; узел, который использует пакеты модуля, тоже сохраняет их. Если узлу теперь нужны инструменты дистрибутива, их должен установить администратор: при следующем запуске bashible модуль их обнаружит и уступит эту пару узлу.

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

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

  • Раздел FAQ про open-iscsi, multipath-tools и nvme-cli теперь описывает, откуда берется каждый инструмент на узле, какие файлы пакеты модуля кладут на узел и как проверить, какая пара откуда взята.
  • В справочнике YadroTatlinUnifiedStorageClass теперь описано поле spec, а в справочнике YadroTatlinUnifiedStorageConnection — элементы matchExpressions обоих селекторов узлов, на английском и русском языках.

v0.2.31

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

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

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

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

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

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

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

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

v0.2.30

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

Модуль сам устанавливает userspace iSCSI и NVMe там, где репозитории узла этого не могут, отдаёт метрики контроллера и scheduler extender и больше не оставляет суперпользователю 5 % каждого тома ext4.

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

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

  • Узел, репозитории которого не могут предоставить open-iscsi, multipath-tools или nvme-cli, больше не остаётся неспособным подключить том: модуль ставит их из собственных пакетных образов.
  • Контроллер и scheduler extender отдают метрики, их забирают через kube-rbac-proxy того же пода; ServiceMonitor и PodMonitor поставляются вместе с модулем.
  • Том ext4 больше не резервирует 5 % своего объёма для суперпользователя, а YadroTatlinUnifiedStorageClass может запросить долю обратно через аннотацию.

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

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

  • Там, где пакетный менеджер узла не может установить open-iscsi и multipath-tools, NodeGroupConfiguration откатывается на собственный образ модуля iscsi-tools: содержимое распаковывается в /var/lib/deckhouse/sds, демоны поднимаются юнитами d8-csi-yadro-tatlin-unified-iscsid.service и d8-csi-yadro-tatlin-unified-multipathd.service. Узел, на котором уже есть свой open-iscsi, остаётся нетронутым: клиент одной версии не разговаривает с демоном другой.
  • У nvme-cli появился собственный пакетный образ nvme-tools и собственный откат, который используется только там, где модуль настроен на NVMe-TCP. Он не зависит от отката для iSCSI: дистрибутив может дать один набор пакетов и не дать другой. Без nvme-cli на узле не сохранялось NVMe Qualified Name, и драйвер сообщал initiators is empty для каждого тома, который его просили опубликовать на таком узле.
  • Контроллер и scheduler extender отдают метрики за kube-rbac-proxy: компонент слушает на 127.0.0.1, а прокси публикует их по TLS за проверкой прав. ServiceMonitor для контроллера и PodMonitor для extender входят в модуль, а порты настраиваются значениями модуля controllerMetricsPort, controllerMetricsProxyPort, schedulerExtenderMetricsPort и schedulerExtenderMetricsProxyPort.
  • Аннотация storage.deckhouse.io/ext4-reserved-percent на YadroTatlinUnifiedStorageClass задаёт долю тома, оставляемую суперпользователю: целое число от 0 до 50. Она действует только на тома, созданные после её установки, класс с fsType: xfs её игнорирует, а при недопустимом значении YadroTatlinUnifiedStorageClass остаётся с Ready=False и причиной в статусе — вместо отказа при создании тома позже. Смена аннотации заставляет контроллер пересоздать StorageClass, потому что parameters существующего в Kubernetes неизменяемы.

Улучшения

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

  • Том ext4 теперь форматируется вообще без резерва для суперпользователя. Все тома, созданные этим модулем раньше, отдавали root стандартные 5 % ext4, поскольку при форматировании не передавался -m; тома, создаваемые с этого момента, отдают это место нагрузке.
  • Контроллер и scheduler extender пишут логи через один общий логгер в том же структурированном формате, что и остальные модули.
  • Значение logLevel по умолчанию теперь INFO, а не DEBUG — его получит кластер, в котором параметр не задан явно.

Исправления

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

  • Поды CSI больше не ждут появления YadroTatlinUnifiedStorageConnection, чтобы запуститься. Оба Secret, которые они монтируют, пишет контроллер при обработке подключения, а чарт требовал эти тома обязательными, поэтому на свежей установке все поды CSI стояли в ContainerCreating с secret not found, и драйвер не работал, пока кто-нибудь не объявит подключение. Теперь монтирования необязательные, и kubelet наполняет тома, как только Secret появляются.

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

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

  • Руками делать ничего не нужно. Новые пакеты ставятся только на узлы, где нельзя установить пакеты дистрибутива, а узлы со своим стеком не затрагиваются.
  • Резерв ext4 для суперпользователя меняется только у томов, созданных после обновления. Уже существующие файловые системы сохраняют те 5 %, с которыми были отформатированы; чтобы резерв остался и у новых томов, поставьте на класс аннотацию storage.deckhouse.io/ext4-reserved-percent=5.
  • Кластеру, который полагался на прежнюю подробность логов, следует явно задать logLevel: DEBUG в конфигурации модуля, поскольку значение по умолчанию теперь INFO.

v0.2.29

  • Исправление: успешное монтирование больше не считается ошибкой — в образ добавлен /etc/mtab (симлинк на /proc/self/mounts), из-за отсутствия которого mount возвращал код 16. Обёртка wrap-mount сужена до iscsiadm и больше не подменяет mount
  • Исправление: релизный образ больше не собирается из кэша с устаревшим changelog.yaml — зависимости git-маппинга привязаны к стадии install, на которой файл и копируется
  • Внутренние изменения в сборке модуля

v0.2.28

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

v0.2.27

  • YadroTatlinUnifiedStorageClass и YadroTatlinUnifiedStorageConnection публикуют status.conditions и status.observedGeneration, добавлена колонка Ready. Поле status.phase сохраняет прежний набор значений, но теперь вычисляется из условия Ready
  • Обновление базовых образов до v1.3.25, Go 1.26.5 и lib-helm до 1.72.13

v0.2.26

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

v0.2.25

  • Обновление драйвера до вендорской версии v26.06
  • Исправление: многочисленные правки в работе режима NVMe-over-TCP
  • Исправление: область видимости secret deckhouse-registry ограничена активным источником образов
  • Устранены уязвимости в сторонних зависимостях
  • Внутренние изменения в сборке модуля

v0.2.24

  • Обновление базовых образов container-base до v1.1.2

v0.2.23

  • Исправлены пути монтирования в образе scheduler-extender
  • Добавлена инструкция по настройке NQN хостов для NVMe-over-TCP в документацию

v0.2.22

  • При пробросе меток из YadroTatlinUnifiedStorageClass в StorageClass теперь исключаются метки с заданными игнорируемыми префиксами
  • Обновлён CSI-драйвер до версии yadro/tatlin-unified v26.02

v0.2.21

  • Добавлена поддержка протокола NVMe-over-TCP в YadroTatlinUnifiedStorageConnection (требуется Tatlin Unified Gen2 с прошивкой 3.2.0 или новее и предварительно созданная группа доступа типа nvme)
  • Обновление базовых образов и lib-helm до 1.72.0

v0.2.20

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

v0.2.19

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

v0.2.18

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

v0.2.17

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

v0.2.16

  • Установка пакетов в NodeGroupConfiguration больше не приводит к падению скрипта при ошибках
  • Замена yum на bb-dnf, разделение NGC для Debian и Altlinux, унификация именований

v0.2.15

  • Добавлены недостающие точки монтирования в distroless-образе csi-yadro-tatlin-unified
  • Обновление базовых образов, Go и lib-helm

v0.2.14

  • Фиксы CVE
  • Правки документации

v0.2.13

  • Обновление базовых образов и версии golang
  • Обновление хуков, работающих при удалении модуля

v0.2.12

  • Переработка манифестов модуля
  • Обновление версии CSI до 25.12

v0.2.11

  • Правки CVE
  • Правки манифестов модуля

v0.2.10

  • Обновлена версия базовых образов
  • Обновлена версия Go до 1.24.11
  • Обновлена версия lib-helm до deckhouse_lib_helm-1.64.10
  • Добавление аннотации volumesnapshotclass для StorageClass для совместимости
  • Правки в сборку CSI
  • Обновление CSI

v0.2.9

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

v0.2.8

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

v0.2.7

  • Обновлены исходники для исправления CVE

v0.2.6

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

v0.2.5

  • Добавлены файлы release notes
  • Рефакторинг модуля
  • Переключение csi на service account csi
  • Добавлена поддержка containerd v2
  • Переключение на distroless образ

v0.2.4

  • Добавлен postStop хук для очистки файла сокета при остановке csi-node
  • Добавлена поддержка HA mode для CSI controller

v0.2.3

  • Добавлен параметр nodeSelector для указания node с полезной нагрузкой

v0.2.0

  • Обновление CSI на версию 25.04
  • Некоторое количество багфиксов

v0.1.1

  • Множественные правки для соответствия style guides
  • Перевод хуков на Golang

v0.1.0

  • Выкат модуля после переименования (старый пока что оставлен с пометкой deprecated)