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

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

v0.0.5

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

Сети ElasticCluster описываются списками CIDR (обратно несовместимое изменение схемы, существующие ресурсы переводит миграция), ElasticStorageClass умеет резервировать долю файловой системы под суперпользователя, а release notes состоят из разделов вместо одного плоского списка.

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

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

  • ElasticCluster.spec.network.public и .cluster принимают несколько CIDR, поэтому можно описать Ceph-кластер, storage-узлы которого расположены более чем в одной хостовой подсети. Оба поля стали списками — это обратно несовместимое изменение схемы ресурса; уже существующие ресурсы переводит миграция при обновлении.
  • ElasticStorageClass умеет запросить долю файловой системы под суперпользователя — классический резерв ext4 — аннотацией storage.deckhouse.io/ext4-reserved-percent. Без такого запроса тома форматируются без резерва.
  • У релиза теперь есть краткое описание и разделы по типам изменений — новые возможности, улучшения, исправления, безопасность, обратно несовместимые изменения, примечания к обновлению — на странице release notes модуля и в ModuleRelease.spec.changelog, откуда их отображает консоль Deckhouse.

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

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

  • ElasticCluster.spec.network.public и .cluster принимают по одному или несколько CIDR — именно это нужно кластеру, storage-узлы которого расположены в нескольких хостовых подсетях: каждый демон Ceph биндится на хостовый интерфейс и обязан иметь адрес внутри одного из указанных диапазонов.
  • Аннотация storage.deckhouse.io/ext4-reserved-percent на ElasticStorageClass задаёт долю тома, оставляемую суперпользователю: целое число процентов от 0 до 50, по умолчанию 0. Модуль переносит итоговое значение на генерируемый CephStorageClass, поэтому снятие аннотации возвращает класс к значению по умолчанию. Резерв действует на тома, созданные после этого — уже существующая файловая система сохраняет тот резерв, с которым была создана, — и только для type: RBD, потому что том CephFS является подкаталогом существующей файловой системы и не форматируется. Некорректное значение оставляет ElasticStorageClass с несработавшей стадией storage class и причиной в статусе, вместо того чтобы сломать создание тома позже.

Улучшения

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

  • ElasticCluster, чей spec.storage.nodeSelector выбирает узлы, исключённые настройкой модуля settings.dataNodes.nodeSelector, теперь сообщает об этом: condition StorageReady называет узлы без агента sds-node-configurator и настройку, которую надо расширить, вместо сообщения о том, что ни один BlockDevice не подходит под селекторы. Селектор, не совпавший ни с одним узлом, сообщается отдельно от пустого набора BlockDevice.
  • Release notes пишутся по локалям в .release-notes/<тег>.yaml и <тег>.ru.yaml с разделами summary, highlights, new_features, improvements, fixes, security, breaking, upgrade_notes, known_issues, docs и dependencies. В кластер попадают обе локали, поэтому консоль показывает описание на языке читателя.
  • История релизов до этой версии остаётся в прежнем плоском формате и отображается на той же странице точно так же, как раньше; переписывать ничего не потребовалось.

Исправления

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

  • Релизный тег без release notes публиковал пустой changelog.yaml, оставляя ModuleRelease.spec.changelog пустым при зелёной сборке. Теперь такой тег роняет сборку.

Несовместимые изменения

Изменения, влияющие на обратную совместимость:

  • ElasticCluster.spec.network.public и .cluster — это списки CIDR, а не отдельные строки. Манифест, который вы держите для повторного применения, нужно перевести на форму списка; уже существующие ресурсы миграция переводит при обновлении.

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

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

  • ElasticCluster, созданный до этой версии, миграция переводит автоматически при обновлении: каждое из полей spec.network.public и .cluster становится списком из одного элемента с тем же адресом. Демоны не перезапускаются, руками ничего делать не нужно.

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

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

  • Появился раздел о резервировании части тома под суперпользователя: аннотация, диапазон значений и то, на что резерв не распространяется.
  • Документация settings.dataNodes.nodeSelector теперь говорит, чем на самом деле управляет лейбл data-узла — запускается ли на узле агент sds-node-configurator, а значит, есть ли на этом узле хоть один BlockDevice, — как он соотносится с ElasticCluster.spec.storage.nodeSelector и что пустое значение по умолчанию охватывает и узлы control-plane.

v0.0.4

  • Исправление: caBundle вебхуков приводится к CA из секрета webhooks-https-certs, а сервис-аккаунты модуля исключены из валидации — сломанный вебхук больше не оставляет ElasticCluster без статуса и Ceph неразвёрнутым
  • Исправление: свежий кластер больше не уходит в HEALTH_WARN RECENT_MGR_MODULE_CRASH — из образа удалены mgr-модули, которые не могут загрузиться (dashboard, restful, cephadm, diskprediction_local, rook)
  • Метрики контроллера публикуются через kube-rbac-proxy и собираются ServiceMonitor’ом
  • Модуль переведён на общий логгер, уровень логирования берётся из настроек модуля, как и описано в документации
  • Исправление: пересборка того же тега больше не оставляет в релизном образе устаревший changelog
  • Обновление базовых образов до v2.1.7, Go до 1.27.0 и lib-helm до 1.72.18
  • Внутренние изменения в сборке модуля и e2e-тестах

v0.0.3

  • Изменения в сборке

v0.0.2

  • Добавлена возможность управления Rook object-store CRs со стороны контроллера sds-object (вебхуки)
  • ElasticClusterCredential публикует status.conditions с условием Ready; статус формируется через общую библиотеку conditions, статус.conditions в CRD объявлен как keyed list для корректного server-side apply
  • Исправление: гейт VPA на наличие CRD, а не на список включённых модулей
  • Исправление: Ceph-кластер больше не уходит в HEALTH_WARN — отключён нерабочий mgr-модуль restful, добавлена зависимость для загрузки mgr-модуля telemetry
  • Сборка образов Ceph переведена на container-base + pm; поддерживаемые версии — 19.2.5 (squid) и 20.2.3 (tentacle)
  • Уточнена документация: spec.network.public/cluster должны быть хостовыми подсетями
  • Обновление базовых образов до v2.1.2, Go до 1.26.6 и lib-helm до 1.72.14
  • Внутренние изменения в сборке модуля

v0.0.1

  • Первоначальный релиз модуля
  • Добавлена настройка модуля settings.dataNodes.nodeSelector. Контроллер проставляет лейбл storage.deckhouse.io/sds-elastic-node="" на каждый подходящий по селектору узел Kubernetes и снимает лейбл с узлов, переставших ему соответствовать. Downstream-компоненты (агент sds-node-configurator, размещение ElasticCluster) могут использовать этот лейбл как nodeAffinity (правило сродства подов с узлами) для выбора data-узлов.