Стадия жизненного цикла модуля: Экспериментальная версия
У модуля есть требования для установки
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, теперь сообщает об этом: conditionStorageReadyназывает узлы без агента 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-узлов.