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

Deckhouse Kubernetes Platform устанавливает CRD, но не удаляет их при отключении модуля. Если вам больше не нужны созданные CRD, удалите их.

ElasticCluster

Scope: Cluster
Version: v1alpha1

Описывает желаемое состояние Ceph-кластера, разворачиваемого модулем sds-elastic. Контроллер поднимает Rook CephCluster (mon/mgr/osd) поверх локального LVM-хранилища, обнаруженного через blockDeviceSelector.

Конфигурация пулов (RBD/CephFS, стратегия репликации) описывается отдельно — в ресурсах ElasticStorageClass, ссылающихся на этот ElasticCluster по имени.

  • spec
    объект
    Желаемое состояние Ceph-кластера под управлением модуля sds-elastic.
    • spec.network
      объект
      Опциональная конфигурация сети. Если не задана — Rook слушает на всех host-IP storage-узлов (host networking). При указании оба поля (public и cluster) должны задаваться одновременно. Поля иммутабельны.
      • spec.network.cluster
        строка

        Обязательный параметр

        CIDR кластерной подсети для репликации и heartbeat-трафика (например, 10.0.1.0/24).

        Длина: 9..18

        Шаблон: ^([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2}$

      • spec.network.public
        строка

        Обязательный параметр

        CIDR публичной подсети для трафика клиентов (например, 10.0.0.0/24).

        Длина: 9..18

        Шаблон: ^([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2}$

    • spec.storage
      объект

      Обязательный параметр

      Конфигурация хранилища под OSD. Контроллер выбирает подходящие BlockDevice на подходящих узлах и для каждого устройства создаёт по одной LVMVolumeGroup, одной LVMLogicalVolume и одному локальному PersistentVolume, который становится бэкендом одного OSD.
      • spec.storage.blockDeviceSelector
        объект

        Обязательный параметр

        Селектор ресурсов BlockDevice (управляемых модулем sds-node-configurator), пригодных для размещения OSD. Выбранные устройства должны находиться на узлах, подпадающих под storage.nodeSelector, и быть свободными (consumable).
        • spec.storage.blockDeviceSelector.matchExpressions
          массив объектов
          Список выражений label-селектора.
          • spec.storage.blockDeviceSelector.matchExpressions.key
            строка
            Имя ключа метки.
          • spec.storage.blockDeviceSelector.matchExpressions.operator
            строка
            Оператор сравнения.

            Допустимые значения: In, NotIn, Exists, DoesNotExist

          • spec.storage.blockDeviceSelector.matchExpressions.values
            массив строк
            Список значений.
        • spec.storage.blockDeviceSelector.matchLabels
          объект
          Карта label-селекторов.
      • spec.storage.nodeSelector
        объект

        Обязательный параметр

        Селектор узлов Kubernetes, рассматриваемых как storage-узлы. Каждый матчащийся узел запускает mon/mgr/mds (по необходимости) и OSD для каждого подходящего BlockDevice.
        • spec.storage.nodeSelector.matchExpressions
          массив объектов
          Список выражений label-селектора.
          • spec.storage.nodeSelector.matchExpressions.key
            строка
            Имя ключа метки.
          • spec.storage.nodeSelector.matchExpressions.operator
            строка
            Оператор сравнения.

            Допустимые значения: In, NotIn, Exists, DoesNotExist

          • spec.storage.nodeSelector.matchExpressions.values
            массив строк
            Список значений.
        • spec.storage.nodeSelector.matchLabels
          объект
          Карта label-селекторов.
  • status
    объект
    Текущее состояние ресурсов, управляемых ElasticCluster.
    • status.capacity
      объект
      Текущая утилизация хранилища, как её видит Rook (CephCluster.status.ceph.capacity). Заполняется после первого сбора метрик Rook.
      • status.capacity.available
        строка
        Свободный raw-объём в виде Kubernetes Quantity (BinarySI). Полезный объём для клиентов меньше — зависит от репликации пулов (available / pool.size для replicated-пулов).
      • status.capacity.lastUpdated
        строка
        Время последней успешной выгрузки метрик ёмкости.
      • status.capacity.total
        строка
        Общая raw-ёмкость кластера (сумма по всем OSD), в виде Kubernetes Quantity (BinarySI), например 500Gi или 1.2Ti.
      • status.capacity.used
        строка
        Использованный raw-объём (данные + метаданные + overhead Ceph) в виде Kubernetes Quantity (BinarySI), например 200Gi.
      • status.capacity.usedPercent
        строка
        used / total * 100, форматированное с двумя знаками после запятой.
    • status.cephFSID
      строка
      FSID/UUID развёрнутого Ceph-кластера, считывается из секрета rook-ceph-mon после старта Rook.
    • status.cephTopology
      объект
      Эффективные счётчики mon/mgr, применённые контроллером к нижележащему CephCluster. Повышение монотонно (sticky): как только ElasticStorageClass с replication: HighRedundancy поднимает счётчики до high-availability-профиля (monCount=5, mgrCount=3), контроллер не понижает их обратно даже после удаления триггерного ESC. Чтобы пересчитать топологию принудительно, оператор может очистить это поле через status-subresource.
      • status.cephTopology.lastPromotedAt
        строка
        Время последнего повышения счётчиков. Пустое значение, если кластер ни разу не выходил из стандартного профиля.
      • status.cephTopology.mgrCount
        целочисленный

        Обязательный параметр

        Эффективный CephCluster.spec.mgr.count.

        Допустимые значения: 1 <= X

      • status.cephTopology.monCount
        целочисленный

        Обязательный параметр

        Эффективный CephCluster.spec.mon.count.

        Допустимые значения: 1 <= X

      • status.cephTopology.reason
        строка
        Машинно-читаемая причина последнего решения по топологии. Известные значения: Standard (действует профиль по умолчанию), HighRedundancyESCPresent (живой HighRedundancy-ESC требует high-availability-профиль), StickyHighWaterMark (сохранённые счётчики выше того, что требует текущий набор ESC; повышение удерживается как high-water-mark).
    • status.cephVersion
      объект
      Состояние версии Ceph. Желаемая версия зашита в образ модуля; bump модуля запускает rolling-upgrade в Rook.
      • status.cephVersion.requested
        строка
        Версия, запрошенная контроллером (соответствует образу модуля).
      • status.cephVersion.running
        строка
        Версия, фактически работающая в кластере; берётся из CephCluster.status.ceph.versions.
      • status.cephVersion.upgradeProgress
        объект
        Прогресс по этапам идущего rolling-upgrade.
        • status.cephVersion.upgradeProgress.completed
          целочисленный
          Сколько демонов на этом этапе уже на запрошенной версии.

          Допустимые значения: 0 <= X

        • status.cephVersion.upgradeProgress.lastTransitionTime
          строка
          Время последнего перехода фазы.
        • status.cephVersion.upgradeProgress.phase
          строка
          Текущий этап обновления.

          Допустимые значения: MonUpgrading, MgrUpgrading, MdsUpgrading, OsdUpgrading, Completed

        • status.cephVersion.upgradeProgress.total
          целочисленный
          Всего демонов в этапе.

          Допустимые значения: 0 <= X

    • status.conditions
      массив объектов
      Покомпонентные condition: StorageReady, CephClusterReady, CredentialsReady, CsiCephReady, UpgradeReady, UpgradeInProgress и агрегатное Ready.
      • status.conditions.lastTransitionTime
        строка
        Время последнего перехода condition.
      • status.conditions.message
        строка
        Человекочитаемое описание текущего статуса.
      • status.conditions.observedGeneration
        целочисленный
        Значение metadata.generation, для которого condition был выставлен.
      • status.conditions.reason
        строка
        Машинно-читаемая причина текущего статуса.
      • status.conditions.status
        строка
        Текущий статус condition.

        Допустимые значения: True, False, Unknown

      • status.conditions.type
        строка
        Тип condition.
    • status.credentialsRef
      объект
      Ссылка на ресурс ElasticClusterCredentials, в котором хранится бэкап идентичности кластера (FSID, секреты mon/admin) за пределами namespace модуля. Заполняется 1:1 с metadata.name.
      • status.credentialsRef.name
        строка
        Имя ECC-ресурса.
    • status.health
      объект
      Сводка здоровья Ceph по данным Rook (CephCluster.status.ceph.health). Используется UI для индикатора OK / Warn / Err и списка предупреждений.
      • status.health.checks
        массив объектов
        Активные проверки Ceph (предупреждения/ошибки). Пусто при HEALTH_OK.
        • status.health.checks.message
          строка
          Человекочитаемое описание проверки.
        • status.health.checks.name
          строка
          Идентификатор проверки Ceph (например, MON_DOWN, OSD_NEARFULL, POOL_NO_REDUNDANCY).
        • status.health.checks.severity
          строка
          Серьёзность проверки, как сообщает Rook (HEALTH_WARN / HEALTH_ERR).
      • status.health.lastChecked
        строка
        Время последней успешной проверки здоровья кластера.
      • status.health.message
        строка
        Краткое человекочитаемое сообщение Rook о текущем состоянии.
      • status.health.status
        строка
        Одно из HEALTH_OK, HEALTH_WARN, HEALTH_ERR. Пусто, пока Rook не опубликовал первое значение.

        Допустимые значения: HEALTH_OK, HEALTH_WARN, HEALTH_ERR

    • status.mgrs
      объект
      Количество mgr-демонов и распределение по версиям, по данным CephCluster.status.ceph.versions.mgr. По умолчанию Rook разворачивает один активный mgr (опционально с standby), типичное healthy-значение — knownToCeph == 1.
      • status.mgrs.byVersion
        массив объектов
        Гистограмма по версиям mgr-демонов. Сортируется как osds.byVersion.
        • status.mgrs.byVersion.count
          целочисленный
          Сколько mgr-демонов сообщили эту версию.

          Допустимые значения: 0 <= X

        • status.mgrs.byVersion.version
          строка
          Строка версии Ceph для этого бакета.
      • status.mgrs.knownToCeph
        целочисленный
        Сумма значений CephCluster.status.ceph.versions.mgr.

        Допустимые значения: 0 <= X

    • status.monEndpoints
      массив строк
      Список эндпойнтов ceph-mon в формате <host>:<port>, разобранный из ConfigMap rook-ceph-mon-endpoints.
    • status.monMaxId
      строка
      Наибольший id mon, достигнутый на текущий момент. Зарезервирован под flow disaster recovery.
    • status.mons
      объект
      Количество mon-демонов и распределение по версиям, по данным CephCluster.status.ceph.versions.mon. UI использует knownToCeph для индикатора кворума (knownToCeph >= floor(spec.mon.count/2)+1).
      • status.mons.byVersion
        массив объектов
        Гистограмма по версиям mon-демонов. Сортируется как osds.byVersion.
        • status.mons.byVersion.count
          целочисленный
          Сколько mon-демонов сообщили эту версию.

          Допустимые значения: 0 <= X

        • status.mons.byVersion.version
          строка
          Строка версии Ceph для этого бакета.
      • status.mons.knownToCeph
        целочисленный
        Сумма значений CephCluster.status.ceph.versions.mon.

        Допустимые значения: 0 <= X

    • status.observedGeneration
      целочисленный
      Последнее значение metadata.generation, обработанное контроллером.
    • status.osds
      объект
      Количество OSD-демонов и распределение по версиям. Источник — CephCluster.status.ceph.versions.osd (поле desired берётся из числа выбранных BlockDevice).
      • status.osds.byVersion
        массив объектов
        Гистограмма по версиям OSD-демонов. Сортируется по count desc, затем по version asc. Пусто, пока ни один OSD не отчитался о версии.
        • status.osds.byVersion.count
          целочисленный
          Сколько OSD-демонов сообщили эту версию.

          Допустимые значения: 0 <= X

        • status.osds.byVersion.version
          строка
          Строка версии Ceph, которую публикует Rook (как есть, например ceph version 19.2.3 (...) squid (stable)).
      • status.osds.desired
        целочисленный
        Сколько OSD контроллер запросил у Rook (== число выбранных BlockDevice для этого ElasticCluster).

        Допустимые значения: 0 <= X

      • status.osds.knownToCeph
        целочисленный
        Сумма значений CephCluster.status.ceph.versions.osd — OSD-демоны, которые недавно сообщали Ceph свою версию. Это аппроксимация “alive в глазах Ceph”, а не Pod readiness.

        Допустимые значения: 0 <= X

    • status.phase
      строка
      Агрегатная фаза: Pending, InProgress, Ready, Error.

      Допустимые значения: Pending, InProgress, Ready, Error

ElasticStorageClass

Scope: Cluster
Version: v1alpha1

Описывает один Ceph-пул и соответствующий Kubernetes StorageClass (создаётся через модуль csi-ceph). Контроллер транслирует spec.replication в production-проверенный layout пула и создаёт CephStorageClass в csi-ceph с тем же именем (1:1).

Режим репликации ErasureCodedCompact временно отключён и недоступен для выбора.

  • spec
    объект
    • spec.clusterRef
      строка

      Обязательный параметр

      Имя ElasticCluster, к которому относится этот storage class. Кластер должен существовать и быть в фазе Ready до создания пула.

      Длина: 1..30

      Шаблон: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$

    • spec.replication
      строка

      Высокоуровневая стратегия репликации. Контроллер транслирует значение в настройки пула:

      • AvailabilityWithoutConsistency — 2 реплики, min_size=1, requireSafeReplicaSize=false. Максимальная доступность ценой риска split-brain. Для некритичных нагрузок.
      • ConsistencyAndAvailability (по умолчанию) — 3 реплики, min_size=2. Рекомендуется для прода.
      • HighRedundancy — 4 реплики, min_size=2, requireSafeReplicaSize=true. Переживает одновременный отказ двух хостов с непрерывным I/O и сохраняет ещё одну реплику как запас на восстановление: потеря данных только при четвёртом одновременном отказе. Требует не менее 5 storage-узлов; пока существует хотя бы один HighRedundancy ESC, контроллер автоматически повышает топологию CephCluster до 5 mon и 3 mgr и не возвращает её обратно даже после удаления триггерного ESC. Аудит — в ElasticCluster.status.cephTopology.

      Режим ErasureCodedCompact временно отключён и не является допустимым значением.

      По умолчанию: ConsistencyAndAvailability

      Допустимые значения: AvailabilityWithoutConsistency, ConsistencyAndAvailability, HighRedundancy

    • spec.type
      строка

      Обязательный параметр

      Тип нижележащего Ceph-пула / Kubernetes StorageClass.

      • RBD — блочные тома через Rados Block Device.
      • CephFS — общие тома через subvolume CephFS.

      Допустимые значения: RBD, CephFS

  • status
    объект
    Текущее состояние ресурсов, управляемых ElasticStorageClass.
    • status.conditions
      массив объектов
      Покомпонентные condition: PoolReady, CsiStorageClassReady и агрегатное Ready.
      • status.conditions.lastTransitionTime
        строка
        Время последнего перехода condition.
      • status.conditions.message
        строка
        Человекочитаемое описание текущего статуса.
      • status.conditions.observedGeneration
        целочисленный
        Значение metadata.generation, для которого выставлен condition.
      • status.conditions.reason
        строка
        Машинно-читаемая причина текущего статуса.
      • status.conditions.status
        строка
        Текущий статус condition.

        Допустимые значения: True, False, Unknown

      • status.conditions.type
        строка
        Тип condition.
    • status.observedGeneration
      целочисленный
      Последнее значение metadata.generation, обработанное контроллером.
    • status.phase
      строка
      Агрегатная фаза: Pending, InProgress, Ready, Error.

      Допустимые значения: Pending, InProgress, Ready, Error