The module lifecycle stageExperimental
The module has requirements for installation

The Deckhouse Kubernetes Platform installs CRDs but does not remove them when a module is disabled. If you no longer need the created CRDs, delete them.

ElasticCluster

Scope: Cluster
Version: v1alpha1

ElasticCluster describes the desired state of a Ceph cluster managed by the sds-elastic module. The controller bootstraps a Rook CephCluster (mon/mgr/osd) on top of LVM-based local storage discovered via blockDeviceSelector.

Pool configuration (RBD/CephFS, replication strategy) is defined separately in ElasticStorageClass resources that reference this ElasticCluster by name.

  • spec
    object
    Desired state of the Ceph cluster managed by the sds-elastic module.
    • spec.network
      object

      Optional network configuration. If unset, Rook listens on every host IP of storage nodes (host networking). When set, both public and cluster must be provided together (all-or-nothing pair).

      Both fields are immutable after creation.

      • spec.network.cluster
        string

        Required value

        CIDR of the cluster network used for replication and heartbeat traffic (for example, 10.0.1.0/24).

        Length: 9..18

        Pattern: ^([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2}$

      • spec.network.public
        string

        Required value

        CIDR of the public network used for client traffic (for example, 10.0.0.0/24).

        Length: 9..18

        Pattern: ^([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2}$

    • spec.storage
      object

      Required value

      OSD backing storage configuration. The controller selects matching BlockDevices on matching nodes and provisions one LVMVolumeGroup per device, one LVMLogicalVolume per group, and one local PersistentVolume per LVMLogicalVolume that backs a Rook OSD.
      • spec.storage.blockDeviceSelector
        object

        Required value

        Selector that matches BlockDevice CRs (managed by sds-node-configurator) eligible for OSD provisioning. Selected devices must reside on nodes that match storage.nodeSelector and must be unused (consumable).
        • spec.storage.blockDeviceSelector.matchExpressions
          array of objects
          List of label selector requirements.
          • spec.storage.blockDeviceSelector.matchExpressions.key
            string
          • spec.storage.blockDeviceSelector.matchExpressions.operator
            string

            Allowed values: In, NotIn, Exists, DoesNotExist

          • spec.storage.blockDeviceSelector.matchExpressions.values
            array of strings
        • spec.storage.blockDeviceSelector.matchLabels
          object
          Map of label selectors.
      • spec.storage.nodeSelector
        object

        Required value

        Selector that matches Kubernetes Nodes considered as storage nodes. Each matching node hosts mon/mgr/mds (as needed) and OSD daemons if it has eligible BlockDevices.
        • spec.storage.nodeSelector.matchExpressions
          array of objects
          List of label selector requirements.
          • spec.storage.nodeSelector.matchExpressions.key
            string
          • spec.storage.nodeSelector.matchExpressions.operator
            string

            Allowed values: In, NotIn, Exists, DoesNotExist

          • spec.storage.nodeSelector.matchExpressions.values
            array of strings
        • spec.storage.nodeSelector.matchLabels
          object
          Map of label selectors.
  • status
    object
    Current state of resources managed by ElasticCluster.
    • status.capacity
      object
      Cluster-wide raw storage usage as observed by Rook (CephCluster.status.ceph.capacity). Empty until Rook publishes the first capacity probe.
      • status.capacity.available
        string
        Free raw capacity, as a Kubernetes Quantity (BinarySI). Usable client capacity depends on pool-level replication (~ available / pool.size for replicated pools).
      • status.capacity.lastUpdated
        string
        Timestamp of the latest capacity probe Rook successfully observed against the cluster.
      • status.capacity.total
        string
        Total raw capacity of the cluster (sum over all OSDs), as a Kubernetes Quantity (BinarySI), e.g. 500Gi or 1.2Ti.
      • status.capacity.used
        string
        Consumed raw capacity (data + metadata + Ceph overhead), as a Kubernetes Quantity (BinarySI), e.g. 200Gi.
      • status.capacity.usedPercent
        string
        used / total * 100, formatted with two decimals.
    • status.cephFSID
      string
      FSID/UUID of the deployed Ceph cluster, populated from the rook-ceph-mon Secret once Rook starts the cluster.
    • status.cephTopology
      object
      Effective Ceph daemon counts the controller has applied to the underlying CephCluster. Promotion is sticky (monotonic): once an ElasticStorageClass with replication: HighRedundancy raises the counts to the high-availability profile (monCount=5, mgrCount=3), the controller never lowers them back, even when the trigger ESC is removed. Operators can force a recompute by clearing this field via the status subresource.
      • status.cephTopology.lastPromotedAt
        string
        Timestamp of the most recent count increase. Empty until the cluster first leaves the standard profile.
      • status.cephTopology.mgrCount
        integer

        Required value

        Effective CephCluster.spec.mgr.count.

        Allowed values: 1 <= X

      • status.cephTopology.monCount
        integer

        Required value

        Effective CephCluster.spec.mon.count.

        Allowed values: 1 <= X

      • status.cephTopology.reason
        string
        Machine-readable explanation of the latest topology decision. Known values: Standard (defaults are in effect), HighRedundancyESCPresent (a HighRedundancy ESC currently demands the high-availability profile), StickyHighWaterMark (the recorded counts exceed what the live ESC inventory currently demands; the prior promotion is being preserved).
    • status.cephVersion
      object
      Ceph version state. The desired version is hardcoded in the module image; bumping the module triggers a rolling upgrade in Rook.
      • status.cephVersion.requested
        string
        Ceph version requested by the controller (matches the module image).
      • status.cephVersion.running
        string
        Ceph version currently running across the cluster, derived from CephCluster.status.ceph.versions.
      • status.cephVersion.upgradeProgress
        object
        Per-stage progress while a rolling upgrade is in flight.
        • status.cephVersion.upgradeProgress.completed
          integer
          Number of daemons in the current stage already running the requested version.

          Allowed values: 0 <= X

        • status.cephVersion.upgradeProgress.lastTransitionTime
          string
          Timestamp of the last upgrade-stage transition.
        • status.cephVersion.upgradeProgress.phase
          string
          Current upgrade stage.

          Allowed values: MonUpgrading, MgrUpgrading, MdsUpgrading, OsdUpgrading, Completed

        • status.cephVersion.upgradeProgress.total
          integer
          Total number of daemons in the current stage.

          Allowed values: 0 <= X

    • status.conditions
      array of objects
      Per-component conditions: StorageReady, CephClusterReady, CredentialsReady, CsiCephReady, UpgradeReady, UpgradeInProgress, and the aggregate Ready.
      • status.conditions.lastTransitionTime
        string
        Timestamp of the last status transition for this condition.
      • status.conditions.message
        string
        Human-readable explanation of the current status.
      • status.conditions.observedGeneration
        integer
        Value of metadata.generation the condition was last set against.
      • status.conditions.reason
        string
        Machine-readable reason for the current status, suitable for log filtering.
      • status.conditions.status
        string
        Current status of the condition.

        Allowed values: True, False, Unknown

      • status.conditions.type
        string
        Condition type, for example Ready, StorageReady, or CephClusterReady.
    • status.credentialsRef
      object
      Reference to the ElasticClusterCredentials resource that backs up cluster identity (FSID, mon-secret, admin-secret) outside the module namespace. Populated 1:1 with metadata.name.
      • status.credentialsRef.name
        string
        Name of the ElasticClusterCredentials resource (1:1 with this ElasticCluster’s metadata.name).
    • status.health
      object
      Latest Ceph health summary surfaced by Rook (CephCluster.status.ceph.health and the matching detail blocks). Drives the top-level OK / Warn / Err indicator on the UI dashboard.
      • status.health.checks
        array of objects
        Active health checks (warnings/errors) reported by Ceph. Empty on HEALTH_OK.
        • status.health.checks.message
          string
          Human-readable description of the check.
        • status.health.checks.name
          string
          Ceph check identifier, for example MON_DOWN, OSD_NEARFULL, POOL_NO_REDUNDANCY.
        • status.health.checks.severity
          string
          Per-check severity, mirroring Rook (HEALTH_WARN / HEALTH_ERR).
      • status.health.lastChecked
        string
        Timestamp of the latest health probe Rook successfully observed against the cluster.
      • status.health.message
        string
        Short human-readable summary Rook attaches to the health probe.
      • status.health.status
        string
        One of HEALTH_OK, HEALTH_WARN, HEALTH_ERR. Empty until Rook publishes the first health probe.

        Allowed values: HEALTH_OK, HEALTH_WARN, HEALTH_ERR

    • status.mgrs
      object
      Ceph manager daemon count and per-version histogram, derived from CephCluster.status.ceph.versions.mgr. Rook deploys a single active manager by default (with optional standbys), so knownToCeph == 1 is the typical healthy value.
      • status.mgrs.byVersion
        array of objects
        Per-version histogram for mgr daemons. Same ordering as osds.byVersion.
        • status.mgrs.byVersion.count
          integer
          Number of mgr daemons reporting this version.

          Allowed values: 0 <= X

        • status.mgrs.byVersion.version
          string
          Ceph version string Rook publishes for this bucket.
      • status.mgrs.knownToCeph
        integer
        Sum of CephCluster.status.ceph.versions.mgr values.

        Allowed values: 0 <= X

    • status.monEndpoints
      array of strings
      List of ceph-mon endpoints in the form <host>:<port>, parsed from the rook-ceph-mon-endpoints ConfigMap.
    • status.monMaxId
      string
      Highest mon id reached so far, copied verbatim from data.maxMonId of the rook-ceph-mon-endpoints ConfigMap. Always a non-negative integer encoded as string for parity with the raw ConfigMap value. Reserved for use by the disaster-recovery flow in a future release.
    • status.mons
      object
      Ceph monitor daemon count and per-version histogram, derived from CephCluster.status.ceph.versions.mon. UI uses knownToCeph to render a coarse quorum indicator (knownToCeph >= floor(spec.mon.count/2)+1).
      • status.mons.byVersion
        array of objects
        Per-version histogram for mon daemons. Same ordering as osds.byVersion.
        • status.mons.byVersion.count
          integer
          Number of mon daemons reporting this version.

          Allowed values: 0 <= X

        • status.mons.byVersion.version
          string
          Ceph version string Rook publishes for this bucket.
      • status.mons.knownToCeph
        integer
        Sum of CephCluster.status.ceph.versions.mon values.

        Allowed values: 0 <= X

    • status.observedGeneration
      integer
      The last value of metadata.generation processed by the controller.
    • status.osds
      object
      OSD daemon count and per-version histogram. Sourced from CephCluster.status.ceph.versions.osd (with desired coming from the controller’s selected BlockDevice count).
      • status.osds.byVersion
        array of objects
        Per-version histogram for OSD daemons. Sorted by count desc, then version asc. Empty until at least one OSD has reported a version.
        • status.osds.byVersion.count
          integer
          Number of OSD daemons reporting this version.

          Allowed values: 0 <= X

        • status.osds.byVersion.version
          string
          Ceph version string Rook publishes for this bucket (verbatim — e.g. ceph version 19.2.3 (...) squid (stable)).
      • status.osds.desired
        integer
        Number of OSDs the controller asked Rook for (== matched BlockDevices for this ElasticCluster).

        Allowed values: 0 <= X

      • status.osds.knownToCeph
        integer
        Sum of CephCluster.status.ceph.versions.osd values — OSD daemons that have reported a version to Ceph since the last heartbeat. Approximation of “alive in Ceph’s eyes”, not Pod readiness.

        Allowed values: 0 <= X

    • status.phase
      string
      Aggregate phase: Pending, InProgress, Ready, or Error.

      Allowed values: Pending, InProgress, Ready, Error

ElasticStorageClass

Scope: Cluster
Version: v1alpha1

ElasticStorageClass declares a single Ceph pool plus the corresponding Kubernetes StorageClass (provisioned via the csi-ceph module). The controller maps spec.replication to a production-tested pool layout and creates a 1:1-named CephStorageClass in csi-ceph.

The ErasureCodedCompact replication mode is temporarily disabled and cannot be selected.

  • spec
    object
    • spec.clusterRef
      string

      Required value

      Name of the ElasticCluster this storage class belongs to. The referenced cluster must exist and be in Ready phase before pool provisioning starts.

      Length: 1..30

      Pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$

    • spec.replication
      string

      High-level replication strategy. The controller translates this into pool-level settings:

      • AvailabilityWithoutConsistency — 2 replicas, min_size=1, requireSafeReplicaSize=false. Maximum availability at the cost of split-brain risk; suitable for non-critical workloads.
      • ConsistencyAndAvailability (default) — 3 replicas, min_size=2. Recommended production setting.
      • HighRedundancy — 4 replicas, min_size=2, requireSafeReplicaSize=true. Tolerates two simultaneous host failures with continued I/O and one extra failure as a recovery margin (data loss only at the fourth simultaneous failure). Requires at least 5 storage nodes; the controller auto-promotes the underlying CephCluster to a 5-mon, 3-mgr topology while at least one HighRedundancy ESC exists, and keeps the promotion sticky after the trigger ESC is removed. See ElasticCluster.status.cephTopology for the audit trail.

      The ErasureCodedCompact mode is temporarily disabled and is not an accepted value.

      Default: ConsistencyAndAvailability

      Allowed values: AvailabilityWithoutConsistency, ConsistencyAndAvailability, HighRedundancy

    • spec.type
      string

      Required value

      Type of the underlying Ceph pool / Kubernetes StorageClass. RBD provisions block volumes via Rados Block Device, CephFS provisions shared-filesystem volumes via CephFS subvolumes.

      Allowed values: RBD, CephFS

  • status
    object
    Current state of resources managed by ElasticStorageClass.
    • status.conditions
      array of objects
      Per-component conditions: PoolReady, CsiStorageClassReady, and the aggregate Ready.
      • status.conditions.lastTransitionTime
        string
        Timestamp of the last status transition for this condition.
      • status.conditions.message
        string
        Human-readable explanation of the current status.
      • status.conditions.observedGeneration
        integer
        Value of metadata.generation the condition was last set against.
      • status.conditions.reason
        string
        Machine-readable reason for the current status, suitable for log filtering.
      • status.conditions.status
        string
        Current status of the condition.

        Allowed values: True, False, Unknown

      • status.conditions.type
        string
        Condition type, for example Ready, PoolReady, or CsiStorageClassReady.
    • status.observedGeneration
      integer
    • status.phase
      string

      Allowed values: Pending, InProgress, Ready, Error