The module lifecycle stage: Preview
The module has requirements for installation
The module is only guaranteed to work if the system requirements are met. As for any other configurations, the module may work, but its smooth operation is not guaranteed.
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.
DRBDMapper
Short names: drbdm
Scope: Cluster
Version: v1alpha1
-
stringapiVersionAPIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectspec
-
stringspec.lowerDevicePath
Required value
Length:
1..4096 -
stringspec.nodeName
Required value
Length:
1..253
-
-
objectstatus
-
array of objectsstatus.conditions
-
stringstatus.conditions.lastTransitionTimelastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
-
stringstatus.conditions.messagemessage is a human readable message indicating details about the transition. This may be an empty string.
Maximum length:
32768 -
integerstatus.conditions.observedGenerationobservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
Allowed values:
0 <= X -
stringstatus.conditions.reasonreason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
Length:
1..1024Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
stringstatus.conditions.statusstatus of the condition, one of True, False, Unknown.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typetype of condition in CamelCase or in foo.example.com/CamelCase.
Maximum length:
316Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
integerstatus.openCount
-
stringstatus.upperDevicePath
Maximum length:
4096
-
DRBDNodeOperation
Short names: drbdnop
Scope: Cluster
Version: v1alpha1
-
stringapiVersionAPIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectspec
-
stringspec.nodeName
Required value
Length:
1..253 -
stringspec.type
Required value
DRBDNodeOperationType represents the type of operation to perform on a DRBD node.Allowed values:
UpdateDRBD
-
-
objectstatus
-
stringstatus.completedAt
-
stringstatus.message
Maximum length:
1024 -
stringstatus.phaseDRBDOperationPhase represents the phase of a DRBD operation.
-
stringstatus.startedAt
-
DRBDResourceOperation
Short names: drbdrop
Scope: Cluster
Version: v1alpha1
-
stringapiVersionAPIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectspec
-
objectspec.createNewUUIDParameters for CreateNewUUID operation. Immutable once set.
-
booleanspec.createNewUUID.clearBitmap
Default:
false -
booleanspec.createNewUUID.forceResync
Default:
false
-
-
stringspec.drbdResourceName
Required value
Length:
1..253Pattern:
^[0-9A-Za-z.+_-]*$ -
stringspec.nodeName
Required value
NodeName scopes the operation to a single agent node: only the agent running on this node will reconcile the operation.Length:
1..253 -
stringspec.type
Required value
DRBDResourceOperationType represents the type of operation to perform on a DRBD resource.Allowed values:
CreateNewUUID,ForcePrimary,Invalidate,Outdate,Verify,CreateSnapshot
-
-
objectstatus
-
stringstatus.completedAt
-
stringstatus.message
Maximum length:
1024 -
stringstatus.phaseDRBDOperationPhase represents the phase of a DRBD operation.
-
stringstatus.startedAt
-
DRBDResource
Short names: drbdr
Scope: Cluster
Version: v1alpha1
-
stringapiVersionAPIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectspec
-
stringspec.actualNameOnTheNode
Length:
1..253Pattern:
^[0-9A-Za-z.+_-]*$ -
booleanspec.allowTwoPrimaries
Default:
false -
stringspec.lvmLogicalVolumeNameRequired when type is Diskful, must be empty when type is Diskless.
Length:
1..128 -
stringspec.maintenanceMaintenance mode - when set, reconciliation is paused but status is still updated
Allowed values:
NoResourceReconciliation -
integerspec.nodeID
Required value
Allowed values:
0 <= X <= 31 -
stringspec.nodeName
Required value
Length:
1..253 -
booleanspec.nonVotingWhen enabled, the disk does not participate in quorum voting while still replicating data normally. Only valid for Diskful resources.
Default:
false -
array of objectsspec.peers
-
booleanspec.peers.allowRemoteRead
Default:
true -
stringspec.peers.namePeer node name. Immutable, used as list map key.
Length:
1..253Pattern:
^[0-9A-Za-z.+_-]*$ -
integerspec.peers.nodeID
Allowed values:
0 <= X <= 31 -
array of objectsspec.peers.paths
-
objectspec.peers.paths.address
-
stringspec.peers.paths.address.ipv4
Required value
Maximum length:
15Pattern:
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ -
integerspec.peers.paths.address.port
Required value
Allowed values:
1025 <= X <= 65535
-
-
stringspec.peers.paths.systemNetworkNameSystem network name. Immutable, used as list map key.
Length:
1..64
-
-
booleanspec.peers.pauseSync
Default:
false -
stringspec.peers.protocolDRBDProtocol represents the DRBD replication protocol.
Default:
CAllowed values:
A,B,C -
string
Maximum length:
256 -
stringSharedSecretAlg enumerates possible hashing algorithms for DRBD shared secrets.
Allowed values:
SHA256,SHA1,DummyForTest -
stringspec.peers.typeDRBDResourceType represents the type of a DRBD resource.
Default:
DiskfulAllowed values:
Diskful,Diskless
-
-
integerspec.quorum
Allowed values:
0 <= X <= 32 -
integerspec.quorumMinimumRedundancy
Allowed values:
0 <= X <= 32 -
stringspec.roleDRBDRole represents the role of a DRBD resource.
Default:
SecondaryAllowed values:
Primary,Secondary -
integer or stringspec.sizeRequired when type is Diskful, must be empty when type is Diskless.
Pattern:
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ -
stringspec.stateDRBDResourceState represents the desired state of a DRBD resource.
Default:
UpAllowed values:
Up,Down -
array of stringsspec.systemNetworks
Required value
-
stringspec.systemNetworks.Element of the array
Maximum length:
64
-
-
stringspec.typeDRBDResourceType represents the type of a DRBD resource.
Default:
DiskfulAllowed values:
Diskful,Diskless
-
-
objectstatus
-
objectstatus.activeConfiguration
-
booleanstatus.activeConfiguration.allowTwoPrimaries
-
array of stringsstatus.activeConfiguration.llvFinalizersToReleaseLLVFinalizersToRelease lists LVMLogicalVolume names whose agent finalizer must be released. Populated before adding a finalizer to an LLV, cleared after the finalizer is successfully released. This ensures the agent never loses track of which LLVs it needs to clean up.
-
stringstatus.activeConfiguration.lvmLogicalVolumeNameLVMLogicalVolumeName is the LVM logical volume name currently configured in DRBD. This reflects the actual backing volume that DRBD is using, not the desired spec value. DRBD itself stores the block device path (e.g. /dev/vg/lv), and this field is reverse-computed from that path to the LVMLogicalVolume name.
Maximum length:
128 -
booleanstatus.activeConfiguration.nonVoting
-
integerstatus.activeConfiguration.quorum
-
integerstatus.activeConfiguration.quorumMinimumRedundancy
-
stringstatus.activeConfiguration.roleDRBDRole represents the role of a DRBD resource.
Allowed values:
Primary,Secondary -
stringstatus.activeConfiguration.stateDRBDResourceState represents the desired state of a DRBD resource.
Allowed values:
Up,Down -
stringstatus.activeConfiguration.typeType is the current effective DRBD configuration (diskful or diskless). This reflects how DRBD is configured, not the transient disk state (which could be DISKLESS, ATTACHING, DETACHING, etc.).
Allowed values:
Diskful,Diskless
-
-
array of objectsstatus.addresses
-
objectstatus.addresses.address
-
stringstatus.addresses.address.ipv4
Required value
Maximum length:
15Pattern:
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ -
integerstatus.addresses.address.port
Required value
Allowed values:
1025 <= X <= 65535
-
-
stringstatus.addresses.systemNetworkName
Maximum length:
64
-
-
array of objectsstatus.conditions
-
stringstatus.conditions.lastTransitionTimelastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
-
stringstatus.conditions.messagemessage is a human readable message indicating details about the transition. This may be an empty string.
Maximum length:
32768 -
integerstatus.conditions.observedGenerationobservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
Allowed values:
0 <= X -
stringstatus.conditions.reasonreason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
Length:
1..1024Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
stringstatus.conditions.statusstatus of the condition, one of True, False, Unknown.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typetype of condition in CamelCase or in foo.example.com/CamelCase.
Maximum length:
316Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
stringstatus.deviceDevice is the stable symlink path to the DRBD block device, e.g. /dev/sdsrv/<resourceName>. The symlink target is /dev/drbd<minor>. Only present when the resource is Up and has an allocated minor.
Maximum length:
256 -
booleanstatus.deviceIOSuspendedDeviceIOSuspended indicates whether I/O is suspended on the device. Only present on primary
-
booleanstatus.deviceOpenDeviceOpen indicates whether the block device is currently open by a process (bd_openers > 0). Reflects DRBD’s “open: yes/no” from drbdsetup status. When true, demotion to Secondary will fail. Only present on primary
-
stringstatus.deviceUUIDDeviceUUID is a 16-digit uppercase hexadecimal identifier that binds this DRBDResource to specific physical DRBD metadata on the backing device. Format matches drbdmeta read-dev-uuid output. Set once after first metadata creation or adoption; immutable thereafter.
Maximum length:
16Pattern:
^([0-9A-F]{16})?$ -
stringstatus.diskStateDiskState represents the state of a DRBD backing disk. It reflects the disk’s synchronization status and determines whether application I/O can be served locally or requires peer involvement.
-
array of objectsstatus.peers
-
booleanstatus.peers.allowRemoteReadAllowRemoteRead indicates whether reads are allowed from this peer.
-
stringstatus.peers.connectionState
-
stringstatus.peers.diskStateDiskState represents the state of a DRBD backing disk. It reflects the disk’s synchronization status and determines whether application I/O can be served locally or requires peer involvement.
-
stringstatus.peers.name
Length:
1..253 -
integerstatus.peers.nodeID
Allowed values:
0 <= X <= 31 -
array of objectsstatus.peers.paths
-
objectstatus.peers.paths.address
-
stringstatus.peers.paths.address.ipv4
Required value
Maximum length:
15Pattern:
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ -
integerstatus.peers.paths.address.port
Required value
Allowed values:
1025 <= X <= 65535
-
-
booleanstatus.peers.paths.established
-
stringstatus.peers.paths.systemNetworkName
Length:
1..64
-
-
stringstatus.peers.replicationStateReplicationState is the DRBD replication state with this peer.
-
stringstatus.peers.roleRole is the DRBD role of this peer (Primary or Secondary).
Allowed values:
Primary,Secondary -
stringstatus.peers.typeDRBDResourceType represents the type of a DRBD resource.
Allowed values:
Diskful,Diskless
-
-
booleanstatus.quorum
-
integer or stringstatus.sizeSize is the usable capacity of the DRBD upper device in bytes. Smaller than spec.size because DRBD internal metadata is stored on the backing device. Nil when the resource is diskless or down.
Pattern:
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-
ReplicatedStorageClass
Short names: rsc
Scope: Cluster
Version: v1alpha1
-
stringapiVersionAPIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectspec
Legacy replication validations (only fire when replication is set):
FTT/GMDR mutual exclusivity with replication:
FTT and GMDR must be specified together:
Valid FTT/GMDR combinations: |FTT - GMDR| <= 1:
FTT=0, GMDR=0 requires topology Ignored:
TransZonal zone count validations for FTT/GMDR:
Immutable spec fields (transition rules; evaluated on update only): the conservative r3->r2 migration matrix permits changing only replication, failuresToTolerate, guaranteedMinimumDataRedundancy, configurationRolloutStrategy and eligibleNodesConflictResolutionStrategy; every other spec field is immutable after creation. These CEL rules guard the scalar/enum and bounded-list fields. The unbounded structured fields (storage, nodeLabelSelector) are guarded by the update webhook (images/webhooks/handlers/rscValidator.go) instead of CEL, because a CEL equality comparison over their unbounded list/map would risk the per-expression CEL cost budget and cause the apiserver to reject the whole CRD at install time.
topology, volumeAccess and zones are strictly immutable (never touched by the controller). reclaimPolicy is deliberately MUTABLE: changing it is a supported operation — rsc_controller reacts by recreating the Kubernetes StorageClass with the new policy (a StorageClass itself is immutable, so recreate is the mechanism; covered by the SC lifecycle e2e). systemNetworkNames and eligibleNodesPolicy are immutable once set: the controller fills them from nil to their default (rsc_controller applySpecDefaults), so the rules must permit that initial nil->value transition while still rejecting later changes.
Defines a Kubernetes Storage class configuration.
Most fields are immutable after creation. Only the replication settings (replication, failuresToTolerate, guaranteedMinimumDataRedundancy), configurationRolloutStrategy, eligibleNodesConflictResolutionStrategy and reclaimPolicy (the StorageClass is recreated with the new policy) can be changed on an existing resource; all other fields are rejected on update.
-
objectspec.configurationRolloutStrategyConfigurationRolloutStrategy defines how configuration changes are applied to existing volumes. When not specified, the controller fills the default (RollingUpdate, maxParallel=5).
-
objectspec.configurationRolloutStrategy.rollingUpdateRollingUpdate configures parameters for RollingUpdate strategy. Required when type is RollingUpdate.
-
integerspec.configurationRolloutStrategy.rollingUpdate.maxParallel
Required value
MaxParallel is the maximum number of volumes being rolled out simultaneously.Default:
5Allowed values:
1 <= X <= 200
-
-
stringspec.configurationRolloutStrategy.type
Required value
Type specifies the rollout strategy type.Allowed values:
RollingUpdate,NewVolumesOnly
-
-
objectspec.eligibleNodesConflictResolutionStrategyEligibleNodesConflictResolutionStrategy defines how the controller handles volumes with eligible nodes conflicts. When not specified, the controller fills the default (RollingRepair, maxParallel=5).
-
objectspec.eligibleNodesConflictResolutionStrategy.rollingRepairRollingRepair configures parameters for RollingRepair conflict resolution strategy. Required when type is RollingRepair.
-
integerspec.eligibleNodesConflictResolutionStrategy.rollingRepair.maxParallel
Required value
MaxParallel is the maximum number of volumes being repaired simultaneously.Default:
5Allowed values:
1 <= X <= 200
-
-
stringspec.eligibleNodesConflictResolutionStrategy.type
Required value
Type specifies the conflict resolution strategy type.Allowed values:
Manual,RollingRepair
-
-
objectspec.eligibleNodesPolicyEligibleNodesPolicy defines policies for managing eligible nodes. When not specified, the controller fills the default (notReadyGracePeriod=10m).
-
stringspec.eligibleNodesPolicy.notReadyGracePeriod
Required value
NotReadyGracePeriod specifies how long to wait before removing a not-ready node from the eligible nodes list.Default:
10m
-
-
integerspec.failuresToTolerateFailuresToTolerate (FTT) specifies how many arbitrary node failures the volume can tolerate while remaining available for IO. Mutually exclusive with Replication. Must be specified together with GuaranteedMinimumDataRedundancy. Valid range: 0-2. Valid combinations: |FTT - GMDR| <= 1.
Allowed values:
0 <= X <= 2 -
integerspec.guaranteedMinimumDataRedundancyGuaranteedMinimumDataRedundancy (GMDR) specifies the minimum number of additional data copies maintained while the volume is serving IO. GMDR=0 means the system may operate with a single data copy in degraded mode (like a RAID-1 mirror after one disk failure). GMDR=1 means at least 2 copies are always maintained during IO. Mutually exclusive with Replication. Must be specified together with FailuresToTolerate. Valid range: 0-2. Valid combinations: |FTT - GMDR| <= 1.
Allowed values:
0 <= X <= 2 -
objectspec.nodeLabelSelectorNodeLabelSelector filters nodes eligible for DRBD participation. Only nodes matching this selector can store data, provide access, or host tiebreaker. If not specified, all nodes are candidates.
-
array of objectsspec.nodeLabelSelector.matchExpressionsmatchExpressions is a list of label selector requirements. The requirements are ANDed.
-
stringspec.nodeLabelSelector.matchExpressions.keykey is the label key that the selector applies to.
-
stringspec.nodeLabelSelector.matchExpressions.operatoroperator represents a key’s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
-
array of stringsspec.nodeLabelSelector.matchExpressions.valuesvalues is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
-
-
objectspec.nodeLabelSelector.matchLabelsmatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is “key”, the operator is “In”, and the values array contains only “value”. The requirements are ANDed.
-
-
stringspec.reclaimPolicy
Required value
The storage class’s reclaim policy. Might be:
- Delete (If the Persistent Volume Claim is deleted, deletes the Persistent Volume and its associated storage as well)
- Retain (If the Persistent Volume Claim is deleted, remains the Persistent Volume and its associated storage)
Allowed values:
Delete,Retain -
stringspec.replication
Deprecated: Use FailuresToTolerate and GuaranteedMinimumDataRedundancy instead. Mutually exclusive with FailuresToTolerate/GuaranteedMinimumDataRedundancy.
The Storage class’s replication mode. Might be:
- None — single replica, no replication. Requires topology to be ‘Ignored’.
- Availability — 2 replicas; can lose 1 node but may lose data redundancy in degraded mode.
- Consistency — 2 replicas with consistency guarantees; requires both replicas for IO.
- ConsistencyAndAvailability — 3 replicas; can lose 1 node and keeps consistency.
Mapping to failuresToTolerate/guaranteedMinimumDataRedundancy: None → failuresToTolerate=0, guaranteedMinimumDataRedundancy=0 Availability → failuresToTolerate=1, guaranteedMinimumDataRedundancy=0 Consistency → failuresToTolerate=0, guaranteedMinimumDataRedundancy=1 ConsistencyAndAvailability → failuresToTolerate=1, guaranteedMinimumDataRedundancy=1
Allowed values:
None,Availability,Consistency,ConsistencyAndAvailability -
objectspec.storageStorage defines the storage backend configuration for this storage class. Specifies the type of volumes (LVM or LVMThin) and which LVMVolumeGroups will be used to allocate space for volumes.
-
array of objectsspec.storage.lvmVolumeGroups
Required value
LVMVolumeGroups is an array of LVMVolumeGroup resource names whose Volume Groups/Thin-pools will be used to allocate the required space.
Note that every LVMVolumeGroup resource must have the same type (Thin/Thick) as specified in the Type field. is replaced with selectors, revisit the key. Currently using name only because thinPoolName is optional and cannot be a listMapKey without a default value.
-
stringspec.storage.lvmVolumeGroups.nameSelected LVMVolumeGroup resource’s name.
Minimal length:
1Pattern:
^[a-z0-9]([a-z0-9-.]{0,251}[a-z0-9])?$ -
stringspec.storage.lvmVolumeGroups.thinPoolNameSelected Thin-pool name.
Length:
1..128Pattern:
^[a-zA-Z0-9][a-zA-Z0-9_.+-]*$
-
-
stringspec.storage.type
Required value
Type defines the volumes type. Might be:
- LVM (for Thick)
- LVMThin (for Thin)
Allowed values:
LVM,LVMThin
-
-
stringspec.storagePool
StoragePool is the name of a ReplicatedStoragePool resource. This field cannot be added or changed, only removed.
Deprecated: Use Storage instead.
-
array of stringsspec.systemNetworkNames
SystemNetworkNames specifies network names used for DRBD replication traffic. At least one network name must be specified. Each name is limited to 64 characters.
Custom network support requires NetworkNode watch implementation in the controller. When multi-network support is implemented, raise MaxItems to 10.
-
stringspec.topology
Required value
The topology settings for the volumes in the created Storage class. Might be:
- TransZonal — replicas of the volumes will be created in different zones (one replica per zone).
To use this topology, the available zones must be specified in the ‘zones’ param, and the cluster nodes must have the topology.kubernetes.io/zone=
label. - Zonal — all replicas of the volumes are created in the same zone that the scheduler selected to place the pod using this volume.
- Ignored — the topology information will not be used to place replicas of the volumes. The replicas can be placed on any available nodes, with the restriction: no more than one replica of a given volume on one node. Required when replication is ‘None’.
Note that the ‘Ignored’ value can be used only if there are no zones in the cluster (there are no nodes with the topology.kubernetes.io/zone label).
For the system to operate correctly, either every cluster node must be labeled with ’topology.kubernetes.io/zone’, or none of them should have this label.
Allowed values:
TransZonal,Zonal,Ignored - TransZonal — replicas of the volumes will be created in different zones (one replica per zone).
To use this topology, the available zones must be specified in the ‘zones’ param, and the cluster nodes must have the topology.kubernetes.io/zone=
-
stringspec.volumeAccess
The Storage class’s volume access mode. Defines how pods access the volume. Might be:
- Local — volume is accessed only from the node where a replica resides. Pod scheduling waits for consumer.
- EventuallyLocal — volume can be accessed remotely, but a local replica will be created on the accessing node after some time. Pod scheduling waits for consumer.
- PreferablyLocal — volume prefers local access but allows remote access if no local replica is available. Scheduler tries to place pods on nodes with replicas. Pod scheduling waits for consumer.
- Any — volume can be accessed from any node. Most flexible mode with immediate volume binding.
Note that the default Volume Access mode is ‘PreferablyLocal’.
Default:
PreferablyLocalAllowed values:
Local,EventuallyLocal,PreferablyLocal,Any -
array of stringsspec.zones
Array of zones the Storage class’s volumes should be replicated in. The controller will put a label with the Storage class’s name on the nodes which be actual used by the Storage class.
For TransZonal topology, the number of zones depends on replication mode:
- Availability, ConsistencyAndAvailability: at least 3 zones required
- Consistency: at least 2 zones required
When replication is ‘None’, zones act as a node constraint limiting where the single replica can be placed.
-
stringspec.zones.Element of the array
Maximum length:
63
-
-
objectstatusDisplays current information about the Storage Class.
-
array of objectsstatus.conditions
-
stringstatus.conditions.lastTransitionTimelastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
-
stringstatus.conditions.messagemessage is a human readable message indicating details about the transition. This may be an empty string.
Maximum length:
32768 -
integerstatus.conditions.observedGenerationobservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
Allowed values:
0 <= X -
stringstatus.conditions.reasonreason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
Length:
1..1024Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
stringstatus.conditions.statusstatus of the condition, one of True, False, Unknown.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typetype of condition in CamelCase or in foo.example.com/CamelCase.
Maximum length:
316Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
objectstatus.configurationConfiguration is the resolved configuration that volumes should align to.
-
integerstatus.configuration.failuresToTolerate
Required value
FailuresToTolerate is the resolved FTT value.Allowed values:
0 <= X <= 2 -
integerstatus.configuration.guaranteedMinimumDataRedundancy
Required value
GuaranteedMinimumDataRedundancy is the resolved GMDR value.Allowed values:
0 <= X <= 2 -
stringstatus.configuration.replicatedStoragePoolName
Required value
ReplicatedStoragePoolName is the name of the ReplicatedStoragePool resource.Minimal length:
1 -
stringstatus.configuration.topology
Required value
Topology is the resolved topology setting.Allowed values:
TransZonal,Zonal,Ignored -
stringstatus.configuration.volumeAccess
Required value
VolumeAccess is the resolved volume access mode.Allowed values:
Local,EventuallyLocal,PreferablyLocal,Any
-
-
integerstatus.configurationGenerationConfigurationGeneration is the RSC generation when configuration was accepted.
-
stringstatus.messageMessage is a human-readable description of the current phase.
-
stringstatus.phasePhase is the operational state summary of the storage class.
Allowed values:
Ready,WaitingForStoragePool,InsufficientNodes,InvalidConfiguration,RollingOut,PartiallyAligned,Terminating -
integerstatus.storagePoolBasedOnGenerationStoragePoolBasedOnGeneration is the RSC generation when storagePoolName was computed.
-
integerstatus.storagePoolEligibleNodesRevisionStoragePoolEligibleNodesRevision tracks RSP’s eligibleNodesRevision for change detection.
-
stringstatus.storagePoolNameStoragePoolName is the computed name of the ReplicatedStoragePool for this RSC. Format: auto-rsp-<fnv128-hex>. Multiple RSCs with identical storage parameters will share the same StoragePoolName.
-
objectstatus.volumes
Required value
Volumes provides aggregated volume statistics. Always present (may have total=0).Default:
{}-
integerstatus.volumes.alignedAligned is the number of volumes whose configuration matches the storage class.
-
integerstatus.volumes.inConflictWithEligibleNodesInConflictWithEligibleNodes is the number of volumes with replicas on non-eligible nodes.
-
integerstatus.volumes.pendingObservationPendingObservation is the number of volumes that haven’t observed current RSC configuration or eligible nodes.
-
integerstatus.volumes.staleConfigurationStaleConfiguration is the number of volumes with outdated configuration.
-
integerstatus.volumes.totalTotal is the total number of volumes.
-
array of stringsstatus.volumes.usedStoragePoolNamesUsedStoragePoolNames is a sorted list of storage pool names currently used by volumes.
-
-
ReplicatedStoragePool
Short names: rsp
Scope: Cluster
Version: v1alpha1
-
stringapiVersionAPIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectspecDefines desired rules for Linstor’s Storage-pools.
-
objectspec.eligibleNodesPolicy
Required value
EligibleNodesPolicy defines policies for managing eligible nodes. Always present with defaults.Default:
{ "notReadyGracePeriod": "10m" }-
stringspec.eligibleNodesPolicy.notReadyGracePeriod
Required value
NotReadyGracePeriod specifies how long to wait before removing a not-ready node from the eligible nodes list.Default:
10m
-
-
array of objectsspec.lvmVolumeGroups
Required value
An array of names of LVMVolumeGroup resources, whose Volume Groups/Thin-pools will be used to allocate the required space.
Note that every LVMVolumeGroup resource has to have the same type Thin/Thick as it is in current resource’s ‘Spec.Type’ field.
-
stringspec.lvmVolumeGroups.nameSelected LVMVolumeGroup resource’s name.
Minimal length:
1Pattern:
^[a-z0-9]([a-z0-9-.]{0,251}[a-z0-9])?$ -
stringspec.lvmVolumeGroups.thinPoolNameSelected Thin-pool name.
Length:
1..128Pattern:
^[a-zA-Z0-9][a-zA-Z0-9_.+-]*$
-
-
objectspec.nodeLabelSelectorNodeLabelSelector filters nodes eligible for storage pool participation. Only nodes matching this selector can store data. If not specified, all nodes with matching LVMVolumeGroups are candidates.
-
array of objectsspec.nodeLabelSelector.matchExpressionsmatchExpressions is a list of label selector requirements. The requirements are ANDed.
-
stringspec.nodeLabelSelector.matchExpressions.keykey is the label key that the selector applies to.
-
stringspec.nodeLabelSelector.matchExpressions.operatoroperator represents a key’s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
-
array of stringsspec.nodeLabelSelector.matchExpressions.valuesvalues is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
-
-
objectspec.nodeLabelSelector.matchLabelsmatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is “key”, the operator is “In”, and the values array contains only “value”. The requirements are ANDed.
-
-
array of stringsspec.systemNetworkNames
Required value
SystemNetworkNames specifies network names used for DRBD replication traffic. At least one network name must be specified. Each name is limited to 64 characters.
Custom network support requires NetworkNode watch implementation in the controller. When multi-network support is implemented, raise MaxItems to 10.
Default:
[ "Internal" ] -
stringspec.type
Required value
Defines the volumes type. Might be:
- LVM (for Thick)
- LVMThin (for Thin)
Allowed values:
LVM,LVMThin -
array of stringsspec.zonesArray of zones the Storage pool’s volumes should be replicated in.
-
stringspec.zones.Element of the array
Maximum length:
63
-
-
-
objectstatusDisplays current information about the state of the LINSTOR storage pool.
-
array of objectsstatus.conditions
-
stringstatus.conditions.lastTransitionTimelastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
-
stringstatus.conditions.messagemessage is a human readable message indicating details about the transition. This may be an empty string.
Maximum length:
32768 -
integerstatus.conditions.observedGenerationobservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
Allowed values:
0 <= X -
stringstatus.conditions.reasonreason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
Length:
1..1024Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
stringstatus.conditions.statusstatus of the condition, one of True, False, Unknown.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typetype of condition in CamelCase or in foo.example.com/CamelCase.
Maximum length:
316Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
array of objectsstatus.eligibleNodesEligibleNodes lists nodes eligible for this storage pool.
-
booleanstatus.eligibleNodes.agentReadyAgentReady indicates whether the sds-replicated-volume agent on this node is ready.
-
array of objectsstatus.eligibleNodes.lvmVolumeGroupsLVMVolumeGroups lists LVM volume groups available on this node.
-
stringstatus.eligibleNodes.lvmVolumeGroups.nameName is the LVMVolumeGroup resource name.
Maximum length:
253 -
booleanstatus.eligibleNodes.lvmVolumeGroups.readyReady indicates whether the LVMVolumeGroup (and its thin pool, if applicable) is ready.
-
stringstatus.eligibleNodes.lvmVolumeGroups.thinPoolNameThinPoolName is the thin pool name (for LVMThin storage pools).
Maximum length:
128 -
booleanstatus.eligibleNodes.lvmVolumeGroups.unschedulableUnschedulable indicates whether new volumes should not use this volume group.
-
-
stringstatus.eligibleNodes.nodeNameNodeName is the Kubernetes node name.
Maximum length:
253 -
booleanstatus.eligibleNodes.nodeReadyNodeReady indicates whether the Kubernetes node is ready.
-
booleanstatus.eligibleNodes.unschedulableUnschedulable indicates whether new volumes should not be scheduled to this node.
-
stringstatus.eligibleNodes.zoneNameZoneName is the zone this node belongs to.
Maximum length:
63
-
-
integerstatus.eligibleNodesRevisionEligibleNodesRevision is incremented when eligible nodes change.
-
stringstatus.messageMessage is a human-readable description of the current phase. Mirrors the Ready condition message.
-
stringstatus.phasePhase is the operational state summary of the storage pool.
Allowed values:
Ready,WaitingForLVMVolumeGroups,InvalidConfiguration -
objectstatus.usedByUsedBy tracks which resources are using this storage pool.
-
array of stringsstatus.usedBy.replicatedStorageClassNamesReplicatedStorageClassNames lists RSC names using this storage pool.
-
stringstatus.usedBy.replicatedStorageClassNames.Element of the array
Maximum length:
253
-
-
-
ReplicatedVolumeAttachment
Short names: rva
Scope: Cluster
Version: v1alpha1
-
stringapiVersionAPIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectspec
-
stringspec.nodeName
Required value
Length:
1..253 -
stringspec.replicatedVolumeName
Required value
Length:
1..127Pattern:
^[0-9A-Za-z.+_-]*$
-
-
objectstatus
-
array of objectsstatus.conditions
-
stringstatus.conditions.lastTransitionTimelastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
-
stringstatus.conditions.messagemessage is a human readable message indicating details about the transition. This may be an empty string.
Maximum length:
32768 -
integerstatus.conditions.observedGenerationobservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
Allowed values:
0 <= X -
stringstatus.conditions.reasonreason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
Length:
1..1024Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
stringstatus.conditions.statusstatus of the condition, one of True, False, Unknown.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typetype of condition in CamelCase or in foo.example.com/CamelCase.
Maximum length:
316Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
stringstatus.devicePathDevicePath is the block device path on the node. Only set when the device is available on the node. Example: /dev/drbd10012.
Maximum length:
256 -
booleanstatus.inUseInUse indicates whether the block device is currently in use by a process. Only set when the device is available on the node.
-
booleanstatus.ioSuspendedIOSuspended indicates whether I/O is suspended on the device. Only set when the device is available on the node.
-
stringstatus.messageMessage is a human-readable detail about the current state.
Maximum length:
512 -
stringstatus.phasePhase is a quick operational state summary.
Allowed values:
Pending,Attaching,Attached,Detaching,Terminating
-
ReplicatedVolumeReplica
Short names: rvr
Scope: Cluster
Version: v1alpha1
-
stringapiVersionAPIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectspec
-
stringspec.lvmVolumeGroupNameLVMVolumeGroupName is the LVMVolumeGroup resource name where this replica should be placed.
Minimal length:
1Pattern:
^[a-z0-9]([a-z0-9-.]{0,251}[a-z0-9])?$ -
stringspec.lvmVolumeGroupThinPoolNameLVMVolumeGroupThinPoolName is the thin pool name (for LVMThin storage pools).
-
stringspec.nodeName
Length:
1..253 -
stringspec.replicatedVolumeName
Required value
Length:
1..120Pattern:
^[0-9A-Za-z.+_-]*$ -
stringspec.type
Required value
ReplicaType enumerates possible values for ReplicatedVolumeReplica spec.type and status.effectiveType fields.Allowed values:
Diskful,ShadowDiskful,Access,TieBreaker
-
-
objectstatus
-
array of objectsstatus.addresses
-
objectstatus.addresses.address
-
stringstatus.addresses.address.ipv4
Required value
Maximum length:
15Pattern:
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ -
integerstatus.addresses.address.port
Required value
Allowed values:
1025 <= X <= 65535
-
-
stringstatus.addresses.systemNetworkName
Maximum length:
64
-
-
objectstatus.attachmentAttachment contains information about the device attachment state. Only set when the replica is attached on the node.
-
stringstatus.attachment.devicePath
Required value
DevicePath is the block device path when the replica is attached. Example: /dev/drbd10012.Length:
1..256 -
booleanstatus.attachment.inUse
Required value
InUse indicates whether the replica’s block device is currently in use by a process. -
booleanstatus.attachment.ioSuspended
Required value
IOSuspended indicates whether I/O is suspended on the device.
-
-
objectstatus.backingVolumeBackingVolume contains information about the backing LVM logical volume. Only set for Diskful replicas.
-
stringstatus.backingVolume.lvmVolumeGroupNameLVMVolumeGroupName is the name of the LVM volume group.
Maximum length:
253 -
stringstatus.backingVolume.lvmVolumeGroupThinPoolNameLVMVolumeGroupThinPoolName is the name of the thin pool within the LVM volume group. Empty if the backing volume is not on a thin pool.
Maximum length:
253 -
integer or stringstatus.backingVolume.sizeSize is the size of the backing LVM logical volume.
Pattern:
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ -
stringstatus.backingVolume.stateState is the local backing volume state.
-
-
array of objectsstatus.conditions
-
stringstatus.conditions.lastTransitionTimelastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
-
stringstatus.conditions.messagemessage is a human readable message indicating details about the transition. This may be an empty string.
Maximum length:
32768 -
integerstatus.conditions.observedGenerationobservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
Allowed values:
0 <= X -
stringstatus.conditions.reasonreason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
Length:
1..1024Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
stringstatus.conditions.statusstatus of the condition, one of True, False, Unknown.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typetype of condition in CamelCase or in foo.example.com/CamelCase.
Maximum length:
316Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
objectstatus.datameshRequest
DatameshRequest describes the pending datamesh membership request for this replica.
This field contains a membership change request that has been validated and is ready from the RVR’s perspective, waiting to be applied to the datamesh. The controller sets this field only after all prerequisites are satisfied.
For example, operation=Join will not be set until scheduling completes: the spec.nodeName, spec.lvmVolumeGroupName, and spec.lvmVolumeGroupThinPoolName fields must be populated and validated before the replica can request datamesh membership.
-
stringstatus.datameshRequest.lvmVolumeGroupNameLVMVolumeGroupName is the LVMVolumeGroup resource name for Diskful replicas.
Minimal length:
1Pattern:
^[a-z0-9]([a-z0-9-.]{0,251}[a-z0-9])?$ -
stringstatus.datameshRequest.operation
Required value
Operation is the type of membership change requested.Allowed values:
Join,Leave,ForceLeave,ForceDetach,ChangeRole,ChangeBackingVolume -
stringstatus.datameshRequest.thinPoolNameThinPoolName is the thin pool name (optional, for LVMThin storage pools).
-
stringstatus.datameshRequest.typeType is the intended replica type. Required for Join and ChangeRole operations.
Allowed values:
Diskful,Access,TieBreaker
-
-
integerstatus.datameshRevision
DatameshRevision is the datamesh revision for which the replica was fully configured.
“Configured” means:
- DRBD was configured to match the intended state derived from this datamesh revision.
- Backing volume (if Diskful) was configured: exists and matches intended LVG/ThinPool/Size.
- Backing volume (if Diskful) is ready: reported ready and actual size >= intended size.
- Agent confirmed successful configuration.
Note: “configured” does NOT mean:
- DRBD connections are established (happens asynchronously after configuration).
- Backing volume is synchronized (resync happens asynchronously if the volume was newly added).
-
integerstatus.datameshRevisionObservedByAgent
DatameshRevisionObservedByAgent is the datamesh revision for which the agent has processed the DRBDResource spec (observedGeneration == generation).
Unlike DatameshRevision, this field is set regardless of whether the agent reported success, failure, or maintenance mode — it only requires that the agent has acknowledged the current DRBDResource generation.
-
objectstatus.drbdrReconciliationCacheDRBDRReconciliationCache holds cached values for DRBDResource reconciliation optimization.
-
integerstatus.drbdrReconciliationCache.datameshRevisionDatameshRevision is the datamesh revision for which DRBDResource spec was last computed.
-
integerstatus.drbdrReconciliationCache.drbdrGenerationDRBDRGeneration is the DRBDResource generation at the time DRBDResource spec was last computed.
-
stringstatus.drbdrReconciliationCache.targetTypeTargetType is the target type for which DRBDResource spec was last computed.
Allowed values:
Diskful,LiminalDiskful,ShadowDiskful,LiminalShadowDiskful,TieBreaker,Access
-
-
stringstatus.initialQuorumReachedAt
InitialQuorumReachedAt is the first time the controller observed this replica holding quorum as a datamesh member. It is a latch: it is set once per membership epoch and cleared when the replica leaves the datamesh (datameshRevision back to 0), so a replica that re-joins goes through joining again.
It exists to distinguish “quorum has not been reached yet” (a member whose peer connections are still coming up, and which therefore cannot have frozen any I/O) from “quorum was lost” (a member whose I/O is frozen) — the two are identical on a single snapshot. See status.phase.
This is the controller’s own observation, not a historical fact about the volume: for a replica that was already a member before this field existed, it is the time of the first reconciliation that observed quorum, not the time quorum was first reached.
-
stringstatus.messageMessage is a human-readable detail about the current state.
Maximum length:
512 -
array of objectsstatus.peersPeers contains the status of connections to peer replicas.
-
booleanstatus.peers.attachedAttached indicates whether this peer is attached on its node (and has a block device).
-
stringstatus.peers.backingVolumeStateBackingVolumeState is the peer’s backing volume state.
-
array of stringsstatus.peers.connectionEstablishedOnConnectionEstablishedOn lists system network names where connection to this peer is established.
-
stringstatus.peers.connectionEstablishedOn.Element of the array
Maximum length:
64
-
-
stringstatus.peers.connectionStateConnectionState is the DRBD connection state to this peer.
-
stringstatus.peers.nameName is the name of the peer ReplicatedVolumeReplica. Must have format “prefix-N” where N is 0-31.
Length:
1..253Pattern:
^.+-([0-9]|[12][0-9]|3[01])$ -
stringstatus.peers.replicationStateReplicationState is the DRBD replication state with this peer.
-
stringstatus.peers.typeType is the replica type (Diskful/TieBreaker/Access).
Allowed values:
Diskful,Access,TieBreaker
-
-
stringstatus.phasePhase is a quick operational state summary.
Allowed values:
Pending,Provisioning,Configuring,WaitingForDatamesh,Synchronizing,Healthy,PartiallyDegraded,Degraded,Critical,Progressing,AgentNotReady,Terminating -
booleanstatus.quorumQuorum indicates whether this replica has quorum.
-
objectstatus.quorumSummaryQuorumSummary provides detailed quorum information.
-
integerstatus.quorumSummary.connectedDiskfulPeers
Required value
ConnectedDiskfulPeers is the number of Diskful peers with established connection.Default:
0 -
integerstatus.quorumSummary.connectedTieBreakerPeers
Required value
ConnectedTieBreakerPeers is the number of TieBreaker peers with established connection. TieBreakers only contribute to quorum under specific edge conditions.Default:
0 -
integerstatus.quorumSummary.connectedUpToDatePeers
Required value
ConnectedUpToDatePeers is the number of peers with established connection and UpToDate disk.Default:
0 -
integerstatus.quorumSummary.quorumQuorum is the required quorum threshold.
-
integerstatus.quorumSummary.quorumMinimumRedundancyQuorumMinimumRedundancy is the number of diskful UpToDate peers (including self) required for quorum.
-
-
integer or stringstatus.sizeSize is the usable capacity of the DRBD device in bytes. Nil when the replica is diskless or down.
Pattern:
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ -
stringstatus.type
Type reflects the currently observed DRBD configuration type from drbdr.Status.ActiveConfiguration.Type.
This is the observed DRBD type (Diskful or Diskless), not the intended spec.type which can be Diskful/Diskless/Access/TieBreaker.
Note: Access and TieBreaker both appear as Diskless here because they cannot be distinguished from the replica’s own status. The difference is only visible in how other replicas treat this replica’s vote in quorum calculation.
Allowed values:
Diskful,Diskless
-
ReplicatedVolume
Short names: rv
Scope: Cluster
Version: v1alpha1
-
stringapiVersionAPIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectspecAuto mode requires RSC name, forbids manualConfiguration: Manual mode requires manualConfiguration, forbids RSC name:
-
stringspec.configurationModeConfigurationMode selects how the volume configuration is determined. Auto (default): configuration is derived from the referenced ReplicatedStorageClass. Manual: configuration is specified directly in the manualConfiguration field.
Default:
AutoAllowed values:
Auto,Manual -
objectspec.manualConfigurationManualConfiguration specifies the volume configuration directly. Required when configurationMode is Manual. Must not be set when configurationMode is Auto.
-
integerspec.manualConfiguration.failuresToTolerate
Required value
FailuresToTolerate is the resolved FTT value.Allowed values:
0 <= X <= 2 -
integerspec.manualConfiguration.guaranteedMinimumDataRedundancy
Required value
GuaranteedMinimumDataRedundancy is the resolved GMDR value.Allowed values:
0 <= X <= 2 -
stringspec.manualConfiguration.replicatedStoragePoolName
Required value
ReplicatedStoragePoolName is the name of the ReplicatedStoragePool resource.Minimal length:
1 -
stringspec.manualConfiguration.topology
Required value
Topology is the resolved topology setting.Allowed values:
TransZonal,Zonal,Ignored -
stringspec.manualConfiguration.volumeAccess
Required value
VolumeAccess is the resolved volume access mode.Allowed values:
Local,EventuallyLocal,PreferablyLocal,Any
-
-
integerspec.maxAttachments
MaxAttachments is the maximum number of nodes this volume can be attached to simultaneously.
WARNING: Values greater than 1 enable multi-attach mode. In this mode the block device is writable from multiple nodes concurrently. The consuming application MUST guarantee that it never writes to the same disk regions from different nodes simultaneously. In particular:
- Mounting the volume as a regular filesystem (ext4, xfs, etc.) from more than one node is NOT safe unless ALL mounts are read-only. Use a cluster-aware filesystem (e.g. GFS2, OCFS2) or application-level coordination instead.
- Concurrent writes to overlapping regions from different nodes produce UNDEFINED behavior: different Diskful replicas may apply writes in different order, leading to divergent data.
- Use at your own risk and with full understanding of the implications.
Default:
1Allowed values:
1 <= X <= 32 -
stringspec.replicatedStorageClassNameReplicatedStorageClassName references the RSC that provides configuration. Required when configurationMode is Auto. Must not be set when configurationMode is Manual.
Minimal length:
1 -
integer or stringspec.size
Required value
Pattern:
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-
-
objectstatus
-
array of stringsstatus.actuallyAttachedTo
-
integerstatus.baselineGuaranteedMinimumDataRedundancy
Required value
BaselineGuaranteedMinimumDataRedundancy is the GMDR level that the datamesh has reached and committed to maintain. Computed as min(qmr-1, config.GMDR).
- Rises toward Configuration as members are added and qmr confirmed.
- Never exceeds Configuration (capped at the target level).
- Decreases when Configuration GMDR is lowered.
Default:
0Allowed values:
0 <= X <= 2 -
array of objectsstatus.conditions
-
stringstatus.conditions.lastTransitionTimelastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
-
stringstatus.conditions.messagemessage is a human readable message indicating details about the transition. This may be an empty string.
Maximum length:
32768 -
integerstatus.conditions.observedGenerationobservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
Allowed values:
0 <= X -
stringstatus.conditions.reasonreason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
Length:
1..1024Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
stringstatus.conditions.statusstatus of the condition, one of True, False, Unknown.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typetype of condition in CamelCase or in foo.example.com/CamelCase.
Maximum length:
316Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
objectstatus.configurationConfiguration is the desired configuration snapshot for this volume.
-
integerstatus.configuration.failuresToTolerate
Required value
FailuresToTolerate is the resolved FTT value.Allowed values:
0 <= X <= 2 -
integerstatus.configuration.guaranteedMinimumDataRedundancy
Required value
GuaranteedMinimumDataRedundancy is the resolved GMDR value.Allowed values:
0 <= X <= 2 -
stringstatus.configuration.replicatedStoragePoolName
Required value
ReplicatedStoragePoolName is the name of the ReplicatedStoragePool resource.Minimal length:
1 -
stringstatus.configuration.topology
Required value
Topology is the resolved topology setting.Allowed values:
TransZonal,Zonal,Ignored -
stringstatus.configuration.volumeAccess
Required value
VolumeAccess is the resolved volume access mode.Allowed values:
Local,EventuallyLocal,PreferablyLocal,Any
-
-
integerstatus.configurationGenerationConfigurationGeneration is the RSC generation from which configuration was taken.
-
integerstatus.configurationObservedGenerationConfigurationObservedGeneration is the RSC generation when configuration was last observed/acknowledged.
-
objectstatus.datamesh
Required value
Datamesh is the computed datamesh configuration for the volume.-
array of objectsstatus.datamesh.members
Required value
Members is the list of datamesh members.Default:
[]-
array of objectsstatus.datamesh.members.addressesAddresses is the list of DRBD addresses for this member.
-
objectstatus.datamesh.members.addresses.address
-
stringstatus.datamesh.members.addresses.address.ipv4
Required value
Maximum length:
15Pattern:
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ -
integerstatus.datamesh.members.addresses.address.port
Required value
Allowed values:
1025 <= X <= 65535
-
-
stringstatus.datamesh.members.addresses.systemNetworkName
Maximum length:
64
-
-
booleanstatus.datamesh.members.attachedAttached indicates whether this member should be attached (Primary in DRBD terms).
Default:
false -
stringstatus.datamesh.members.lvmVolumeGroupNameLVMVolumeGroupName is the LVMVolumeGroup resource name where this replica should be placed.
Length:
1..253Pattern:
^[a-z0-9]([a-z0-9-.]{0,251}[a-z0-9])?$ -
stringstatus.datamesh.members.lvmVolumeGroupThinPoolNameLVMVolumeGroupThinPoolName is the thin pool name (for LVMThin storage pools).
Maximum length:
64 -
stringstatus.datamesh.members.nameName is the member name (used as list map key). Must have format “prefix-N” where N is 0-31.
Length:
1..140 -
stringstatus.datamesh.members.nodeNameNodeName is the Kubernetes node name where the member is located.
Length:
1..253 -
stringstatus.datamesh.members.typeType is the member type.
Allowed values:
Diskful,LiminalDiskful,ShadowDiskful,LiminalShadowDiskful,TieBreaker,Access -
stringstatus.datamesh.members.zoneZone is the zone where the member is located.
Maximum length:
64
-
-
booleanstatus.datamesh.multiattachMultiattach enables multiattach mode for the datamesh.
Default:
false -
integerstatus.datamesh.quorum
Required value
Quorum is the quorum value for the datamesh.Default:
0Allowed values:
0 <= X <= 13 -
integerstatus.datamesh.quorumMinimumRedundancy
Required value
QuorumMinimumRedundancy is the minimum redundancy required for quorum.Default:
0Allowed values:
0 <= X <= 8 -
stringSharedSecret is the shared secret for DRBD authentication.
Maximum length:
256 -
stringSharedSecretAlg is the hashing algorithm for the shared secret.
Allowed values:
SHA256,SHA1,DummyForTest -
integer or stringstatus.datamesh.size
Required value
Size is the desired size of the volume.Pattern:
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ -
array of stringsstatus.datamesh.systemNetworkNames
Required value
SystemNetworkNames is the list of system network names for DRBD communication.Default:
[]-
stringstatus.datamesh.systemNetworkNames.Element of the array
Maximum length:
64
-
-
-
array of objectsstatus.datameshReplicaRequestsDatameshReplicaRequests is the list of pending membership requests from replicas.
-
stringstatus.datameshReplicaRequests.firstObservedAtFirstObservedAt is the timestamp when this request was first observed.
-
stringstatus.datameshReplicaRequests.messageMessage is an optional human-readable message about the request state and progress.
Maximum length:
512 -
stringstatus.datameshReplicaRequests.nameName is the replica name. Must have format “prefix-N” where N is 0-31.
Length:
1..123Pattern:
^.+-([0-9]|[12][0-9]|3[01])$ -
objectstatus.datameshReplicaRequests.requestRequest is the membership change request details from the replica.
-
stringstatus.datameshReplicaRequests.request.lvmVolumeGroupNameLVMVolumeGroupName is the LVMVolumeGroup resource name for Diskful replicas.
Minimal length:
1Pattern:
^[a-z0-9]([a-z0-9-.]{0,251}[a-z0-9])?$ -
stringstatus.datameshReplicaRequests.request.operation
Required value
Operation is the type of membership change requested.Allowed values:
Join,Leave,ForceLeave,ForceDetach,ChangeRole,ChangeBackingVolume -
stringstatus.datameshReplicaRequests.request.thinPoolNameThinPoolName is the thin pool name (optional, for LVMThin storage pools).
-
stringstatus.datameshReplicaRequests.request.typeType is the intended replica type. Required for Join and ChangeRole operations.
Allowed values:
Diskful,Access,TieBreaker
-
-
-
integerstatus.datameshRevision
Required value
DatameshRevision is a counter incremented when datamesh configuration changes. -
array of objectsstatus.datameshTransitionsDatameshTransitions is the list of active datamesh transitions.
-
stringstatus.datameshTransitions.fromReplicaTypeFromReplicaType is the source replica type for ChangeReplicaType transitions. Required for ChangeReplicaType. Must not be set for other types.
Allowed values:
Diskful,Access,TieBreaker,ShadowDiskful -
array of stringsstatus.datameshTransitions.fromSystemNetworkNamesFromSystemNetworkNames is the source set of system network names for ChangeSystemNetworks transitions. Captured from datamesh.systemNetworkNames at dispatch time. Required for ChangeSystemNetworks. Must not be set for other types.
-
stringstatus.datameshTransitions.fromSystemNetworkNames.Element of the array
Maximum length:
64
-
-
stringstatus.datameshTransitions.groupGroup is the concurrency group for this transition. Set by the controller at transition creation time. Read-only for users. Provides observability: explains why a transition may be waiting.
Allowed values:
Attachment,Emergency,Formation,Multiattach,Network,NonVotingMembership,Quorum,Resize,VotingMembership -
stringstatus.datameshTransitions.planIDPlanID identifies the transition plan used to create this transition. Used by the engine to look up step callbacks from the plan registry.
Minimal length:
1 -
stringstatus.datameshTransitions.replicaNameReplicaName is the name of the replica this transition applies to. Required for AddReplica, RemoveReplica, ChangeReplicaType, Attach, Detach, ForceRemoveReplica, ForceDetach. Must not be set for Formation, EnableMultiattach, DisableMultiattach, ChangeQuorum.
Length:
1..123Pattern:
^.+-([0-9]|[12][0-9]|3[01])$ -
stringstatus.datameshTransitions.replicaTypeReplicaType is the target replica type for AddReplica/RemoveReplica/ForceRemoveReplica. Uses ReplicaType (Diskful, Access, TieBreaker, ShadowDiskful) — liminal states (LiminalDiskful, LiminalShadowDiskful) are internal mechanics visible in step names, not in transition parameters. Required for AddReplica, RemoveReplica, ForceRemoveReplica. Must not be set for other types.
Allowed values:
Diskful,Access,TieBreaker,ShadowDiskful -
array of objectsstatus.datameshTransitions.stepsSteps is the ordered list of steps for this transition. All steps are written when the transition is created (with status=Pending, and the first step immediately set to Active with startedAt). Steps are executed sequentially — only one step is Active at a time. Must have at least one element.
-
stringstatus.datameshTransitions.steps.completedAtCompletedAt is set when the step transitions from Active to Completed.
-
integerstatus.datameshTransitions.steps.datameshRevisionDatameshRevision is the revision assigned when this step was activated. 0 if the step has not been activated yet or does not bump the revision.
-
stringstatus.datameshTransitions.steps.messageMessage is a per-step progress or error message. Updated every reconciliation while the step is Active.
Maximum length:
512 -
stringstatus.datameshTransitions.steps.nameName is a human-readable step name (e.g., “Preconfigure”, “attach”, “✦ → D∅”).
Length:
1..64 -
stringstatus.datameshTransitions.steps.startedAtStartedAt is set when the step transitions from Pending to Active.
-
stringstatus.datameshTransitions.steps.statusStatus is the current status of this step.
Default:
PendingAllowed values:
Pending,Active,Completed
-
-
stringstatus.datameshTransitions.toReplicaTypeToReplicaType is the target replica type for ChangeReplicaType transitions. Required for ChangeReplicaType. Must not be set for other types.
Allowed values:
Diskful,Access,TieBreaker,ShadowDiskful -
array of stringsstatus.datameshTransitions.toSystemNetworkNamesToSystemNetworkNames is the target set of system network names for ChangeSystemNetworks transitions. Captured from RSP configuration at dispatch time. Required for ChangeSystemNetworks. Must not be set for other types.
-
stringstatus.datameshTransitions.toSystemNetworkNames.Element of the array
Maximum length:
64
-
-
stringstatus.datameshTransitions.typeType is the transition type.
Allowed values:
AddReplica,Attach,ChangeQuorum,ChangeReplicaType,ChangeSystemNetworks,Detach,DisableMultiattach,EnableMultiattach,ForceDetach,ForceRemoveReplica,Formation,RemoveReplica,RepairNetworkAddresses,ResizeVolume
-
-
objectstatus.effectiveLayout
Required value
EffectiveLayout describes the real-time protection level and health of the datamesh, based on observable cluster state.Default:
{ "reachableTieBreakers": 0, "reachableVoters": 0, "staleAgents": 0, "totalTieBreakers": 0, "totalVoters": 0, "upToDateVoters": 0 }-
integerstatus.effectiveLayout.failuresToTolerateFailuresToTolerate is the effective FTT level. Positive: can tolerate this many node failures. Zero: quorum is met but any failure causes quorum loss. Negative: quorum is lost, need this many more voters. Nil: cannot be determined (no voters or no fresh agent data).
-
integerstatus.effectiveLayout.guaranteedMinimumDataRedundancyGuaranteedMinimumDataRedundancy is the effective GMDR level. Positive: can lose this many disks without data loss. Zero: IO works but any disk loss risks data. Negative: IO blocked, need this many more UpToDate replicas. Nil: cannot be determined (no voters or no fresh agent data).
-
stringstatus.effectiveLayout.messageMessage is a human-readable summary of the effective layout state.
-
integerstatus.effectiveLayout.reachableTieBreakers
Required value
ReachableTieBreakers is the number of TieBreakers confirmed reachable (agent ready or seen Connected by peers).Default:
0 -
integerstatus.effectiveLayout.reachableVoters
Required value
ReachableVoters is the number of voters confirmed reachable (own Quorum=true or seen Connected by peers).Default:
0 -
integerstatus.effectiveLayout.staleAgents
Required value
StaleAgents is the number of members whose agent data is stale (AgentNotReady or Quorum not yet reported). These members are reconstructed from peer observations when possible.Default:
0 -
integerstatus.effectiveLayout.totalTieBreakers
Required value
TotalTieBreakers is the number of TieBreaker members.Default:
0 -
integerstatus.effectiveLayout.totalVoters
Required value
TotalVoters is the number of voter members (Diskful and liminal variants).Default:
0 -
integerstatus.effectiveLayout.upToDateVoters
Required value
UpToDateVoters is the number of voters with UpToDate backing volume (own BackingVolume=UpToDate or seen UpToDate by peers).Default:
0
-
-
array of objectsstatus.eligibleNodesViolationsEligibleNodesViolations lists replicas placed on non-eligible nodes.
-
stringstatus.eligibleNodesViolations.nodeNameNodeName is the node where the replica is placed.
Maximum length:
253 -
stringstatus.eligibleNodesViolations.reasonReason describes why this placement violates eligible nodes constraints.
-
stringstatus.eligibleNodesViolations.replicaNameReplicaName is the ReplicatedVolumeReplica name.
Maximum length:
253
-
-
stringstatus.membershipLayoutMembershipLayout is a short, human-readable representation of the actual datamesh layout (diskful voters and tie-breakers), e.g. “3D” or “2D+1TB”. Derived from the datamesh members; freely produced (not an enum). See the MembershipLayoutConverged condition for whether it matches the intended layout. Unset (absent) while the layout has not been computed yet: during formation the controller does not report a layout at all. An empty string is never published.
-
integer or stringstatus.sizeSize is the actual usable capacity of the volume in bytes. Nil when the volume has no ready replicas.
Pattern:
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-