The module lifecycle stage: Experimental
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.
-
objectspecDesired state of the Ceph cluster managed by the sds-elastic module.
-
objectspec.network
Optional network configuration. If unset, Rook listens on every host IP of storage nodes (host networking). When set, both
publicandclustermust be provided together (all-or-nothing pair).Both fields are immutable after creation.
-
stringspec.network.cluster
Required value
CIDR of the cluster network used for replication and heartbeat traffic (for example,10.0.1.0/24).Length:
9..18Pattern:
^([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2}$ -
stringspec.network.public
Required value
CIDR of the public network used for client traffic (for example,10.0.0.0/24).Length:
9..18Pattern:
^([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2}$
-
-
objectspec.storage
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.-
objectspec.storage.blockDeviceSelector
Required value
Selector that matches BlockDevice CRs (managed by sds-node-configurator) eligible for OSD provisioning. Selected devices must reside on nodes that matchstorage.nodeSelectorand must be unused (consumable).-
array of objectsspec.storage.blockDeviceSelector.matchExpressionsList of label selector requirements.
-
stringspec.storage.blockDeviceSelector.matchExpressions.key
-
stringspec.storage.blockDeviceSelector.matchExpressions.operator
Allowed values:
In,NotIn,Exists,DoesNotExist -
array of stringsspec.storage.blockDeviceSelector.matchExpressions.values
-
-
objectspec.storage.blockDeviceSelector.matchLabelsMap of label selectors.
-
-
objectspec.storage.nodeSelector
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.-
array of objectsspec.storage.nodeSelector.matchExpressionsList of label selector requirements.
-
stringspec.storage.nodeSelector.matchExpressions.key
-
stringspec.storage.nodeSelector.matchExpressions.operator
Allowed values:
In,NotIn,Exists,DoesNotExist -
array of stringsspec.storage.nodeSelector.matchExpressions.values
-
-
objectspec.storage.nodeSelector.matchLabelsMap of label selectors.
-
-
-
-
objectstatusCurrent state of resources managed by ElasticCluster.
-
objectstatus.capacityCluster-wide raw storage usage as observed by Rook (
CephCluster.status.ceph.capacity). Empty until Rook publishes the first capacity probe.-
stringstatus.capacity.availableFree raw capacity, as a Kubernetes Quantity (BinarySI). Usable client capacity depends on pool-level replication (~
available / pool.sizefor replicated pools). -
stringstatus.capacity.lastUpdatedTimestamp of the latest capacity probe Rook successfully observed against the cluster.
-
stringstatus.capacity.totalTotal raw capacity of the cluster (sum over all OSDs), as a Kubernetes Quantity (BinarySI), e.g.
500Gior1.2Ti. -
stringstatus.capacity.usedConsumed raw capacity (data + metadata + Ceph overhead), as a Kubernetes Quantity (BinarySI), e.g.
200Gi. -
stringstatus.capacity.usedPercent
used / total * 100, formatted with two decimals.
-
-
stringstatus.cephFSIDFSID/UUID of the deployed Ceph cluster, populated from the
rook-ceph-monSecret once Rook starts the cluster. -
objectstatus.cephTopologyEffective Ceph daemon counts the controller has applied to the underlying CephCluster. Promotion is sticky (monotonic): once an
ElasticStorageClasswithreplication: HighRedundancyraises 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.-
stringstatus.cephTopology.lastPromotedAtTimestamp of the most recent count increase. Empty until the cluster first leaves the standard profile.
-
integerstatus.cephTopology.mgrCount
Required value
EffectiveCephCluster.spec.mgr.count.Allowed values:
1 <= X -
integerstatus.cephTopology.monCount
Required value
EffectiveCephCluster.spec.mon.count.Allowed values:
1 <= X -
stringstatus.cephTopology.reasonMachine-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).
-
-
objectstatus.cephVersionCeph version state. The desired version is hardcoded in the module image; bumping the module triggers a rolling upgrade in Rook.
-
stringstatus.cephVersion.requestedCeph version requested by the controller (matches the module image).
-
stringstatus.cephVersion.runningCeph version currently running across the cluster, derived from
CephCluster.status.ceph.versions. -
objectstatus.cephVersion.upgradeProgressPer-stage progress while a rolling upgrade is in flight.
-
integerstatus.cephVersion.upgradeProgress.completedNumber of daemons in the current stage already running the requested version.
Allowed values:
0 <= X -
stringstatus.cephVersion.upgradeProgress.lastTransitionTimeTimestamp of the last upgrade-stage transition.
-
stringstatus.cephVersion.upgradeProgress.phaseCurrent upgrade stage.
Allowed values:
MonUpgrading,MgrUpgrading,MdsUpgrading,OsdUpgrading,Completed -
integerstatus.cephVersion.upgradeProgress.totalTotal number of daemons in the current stage.
Allowed values:
0 <= X
-
-
-
array of objectsstatus.conditionsPer-component conditions:
StorageReady,CephClusterReady,CredentialsReady,CsiCephReady,UpgradeReady,UpgradeInProgress, and the aggregateReady.-
stringstatus.conditions.lastTransitionTimeTimestamp of the last status transition for this condition.
-
stringstatus.conditions.messageHuman-readable explanation of the current status.
-
integerstatus.conditions.observedGenerationValue of
metadata.generationthe condition was last set against. -
stringstatus.conditions.reasonMachine-readable reason for the current status, suitable for log filtering.
-
stringstatus.conditions.statusCurrent status of the condition.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typeCondition type, for example
Ready,StorageReady, orCephClusterReady.
-
-
objectstatus.credentialsRefReference to the ElasticClusterCredentials resource that backs up cluster identity (FSID, mon-secret, admin-secret) outside the module namespace. Populated 1:1 with
metadata.name.-
stringstatus.credentialsRef.nameName of the ElasticClusterCredentials resource (1:1 with this ElasticCluster’s
metadata.name).
-
-
objectstatus.healthLatest Ceph health summary surfaced by Rook (
CephCluster.status.ceph.healthand the matching detail blocks). Drives the top-level OK / Warn / Err indicator on the UI dashboard.-
array of objectsstatus.health.checksActive health checks (warnings/errors) reported by Ceph. Empty on
HEALTH_OK.-
stringstatus.health.checks.messageHuman-readable description of the check.
-
stringstatus.health.checks.nameCeph check identifier, for example
MON_DOWN,OSD_NEARFULL,POOL_NO_REDUNDANCY. -
stringstatus.health.checks.severityPer-check severity, mirroring Rook (
HEALTH_WARN/HEALTH_ERR).
-
-
stringstatus.health.lastCheckedTimestamp of the latest health probe Rook successfully observed against the cluster.
-
stringstatus.health.messageShort human-readable summary Rook attaches to the health probe.
-
stringstatus.health.statusOne of
HEALTH_OK,HEALTH_WARN,HEALTH_ERR. Empty until Rook publishes the first health probe.Allowed values:
HEALTH_OK,HEALTH_WARN,HEALTH_ERR
-
-
objectstatus.mgrsCeph 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), soknownToCeph == 1is the typical healthy value.-
array of objectsstatus.mgrs.byVersionPer-version histogram for mgr daemons. Same ordering as
osds.byVersion.-
integerstatus.mgrs.byVersion.countNumber of mgr daemons reporting this version.
Allowed values:
0 <= X -
stringstatus.mgrs.byVersion.versionCeph version string Rook publishes for this bucket.
-
-
integerstatus.mgrs.knownToCephSum of
CephCluster.status.ceph.versions.mgrvalues.Allowed values:
0 <= X
-
-
array of stringsstatus.monEndpointsList of
ceph-monendpoints in the form<host>:<port>, parsed from therook-ceph-mon-endpointsConfigMap. -
stringstatus.monMaxIdHighest mon id reached so far, copied verbatim from
data.maxMonIdof therook-ceph-mon-endpointsConfigMap. 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. -
objectstatus.monsCeph monitor daemon count and per-version histogram, derived from
CephCluster.status.ceph.versions.mon. UI usesknownToCephto render a coarse quorum indicator (knownToCeph >= floor(spec.mon.count/2)+1).-
array of objectsstatus.mons.byVersionPer-version histogram for mon daemons. Same ordering as
osds.byVersion.-
integerstatus.mons.byVersion.countNumber of mon daemons reporting this version.
Allowed values:
0 <= X -
stringstatus.mons.byVersion.versionCeph version string Rook publishes for this bucket.
-
-
integerstatus.mons.knownToCephSum of
CephCluster.status.ceph.versions.monvalues.Allowed values:
0 <= X
-
-
integerstatus.observedGenerationThe last value of
metadata.generationprocessed by the controller. -
objectstatus.osdsOSD daemon count and per-version histogram. Sourced from
CephCluster.status.ceph.versions.osd(withdesiredcoming from the controller’s selected BlockDevice count).-
array of objectsstatus.osds.byVersionPer-version histogram for OSD daemons. Sorted by
countdesc, thenversionasc. Empty until at least one OSD has reported a version.-
integerstatus.osds.byVersion.countNumber of OSD daemons reporting this version.
Allowed values:
0 <= X -
stringstatus.osds.byVersion.versionCeph version string Rook publishes for this bucket (verbatim — e.g.
ceph version 19.2.3 (...) squid (stable)).
-
-
integerstatus.osds.desiredNumber of OSDs the controller asked Rook for (== matched BlockDevices for this ElasticCluster).
Allowed values:
0 <= X -
integerstatus.osds.knownToCephSum of
CephCluster.status.ceph.versions.osdvalues — 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
-
-
stringstatus.phaseAggregate phase:
Pending,InProgress,Ready, orError.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.
-
objectspec
-
stringspec.clusterRef
Required value
Name of the ElasticCluster this storage class belongs to. The referenced cluster must exist and be inReadyphase before pool provisioning starts.Length:
1..30Pattern:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ -
stringspec.replication
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. SeeElasticCluster.status.cephTopologyfor the audit trail.
The
ErasureCodedCompactmode is temporarily disabled and is not an accepted value.Default:
ConsistencyAndAvailabilityAllowed values:
AvailabilityWithoutConsistency,ConsistencyAndAvailability,HighRedundancy -
stringspec.type
Required value
Type of the underlying Ceph pool / Kubernetes StorageClass.RBDprovisions block volumes via Rados Block Device,CephFSprovisions shared-filesystem volumes via CephFS subvolumes.Allowed values:
RBD,CephFS
-
-
objectstatusCurrent state of resources managed by ElasticStorageClass.
-
array of objectsstatus.conditionsPer-component conditions:
PoolReady,CsiStorageClassReady, and the aggregateReady.-
stringstatus.conditions.lastTransitionTimeTimestamp of the last status transition for this condition.
-
stringstatus.conditions.messageHuman-readable explanation of the current status.
-
integerstatus.conditions.observedGenerationValue of
metadata.generationthe condition was last set against. -
stringstatus.conditions.reasonMachine-readable reason for the current status, suitable for log filtering.
-
stringstatus.conditions.statusCurrent status of the condition.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typeCondition type, for example
Ready,PoolReady, orCsiStorageClassReady.
-
-
integerstatus.observedGeneration
-
stringstatus.phase
Allowed values:
Pending,InProgress,Ready,Error
-