The module lifecycle stagePreview
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

  • apiVersion
    string
    APIVersion 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
  • kind
    string
    Kind 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
  • metadata
    object
  • spec
    object
    • spec.lowerDevicePath
      string

      Required value

      Length: 1..4096

    • spec.nodeName
      string

      Required value

      Length: 1..253

  • status
    object
    • status.conditions
      array of objects
      • status.conditions.lastTransitionTime
        string
        lastTransitionTime 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.
      • status.conditions.message
        string
        message is a human readable message indicating details about the transition. This may be an empty string.

        Maximum length: 32768

      • status.conditions.observedGeneration
        integer
        observedGeneration 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

      • status.conditions.reason
        string
        reason 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..1024

        Pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$

      • status.conditions.status
        string
        status of the condition, one of True, False, Unknown.

        Allowed values: True, False, Unknown

      • status.conditions.type
        string
        type of condition in CamelCase or in foo.example.com/CamelCase.

        Maximum length: 316

        Pattern: ^([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])$

    • status.openCount
      integer
    • status.upperDevicePath
      string

      Maximum length: 4096

DRBDNodeOperation

Short names: drbdnop

Scope: Cluster
Version: v1alpha1

  • apiVersion
    string
    APIVersion 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
  • kind
    string
    Kind 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
  • metadata
    object
  • spec
    object
    • spec.nodeName
      string

      Required value

      Length: 1..253

    • spec.type
      string

      Required value

      DRBDNodeOperationType represents the type of operation to perform on a DRBD node.

      Allowed values: UpdateDRBD

  • status
    object
    • status.completedAt
      string
    • status.message
      string

      Maximum length: 1024

    • status.phase
      string
      DRBDOperationPhase represents the phase of a DRBD operation.
    • status.startedAt
      string

DRBDResourceOperation

Short names: drbdrop

Scope: Cluster
Version: v1alpha1

  • apiVersion
    string
    APIVersion 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
  • kind
    string
    Kind 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
  • metadata
    object
  • spec
    object
    • spec.createNewUUID
      object
      Parameters for CreateNewUUID operation. Immutable once set.
      • spec.createNewUUID.clearBitmap
        boolean

        Default: false

      • spec.createNewUUID.forceResync
        boolean

        Default: false

    • spec.drbdResourceName
      string

      Required value

      Length: 1..253

      Pattern: ^[0-9A-Za-z.+_-]*$

    • spec.nodeName
      string

      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

    • spec.type
      string

      Required value

      DRBDResourceOperationType represents the type of operation to perform on a DRBD resource.

      Allowed values: CreateNewUUID, ForcePrimary, Invalidate, Outdate, Verify, CreateSnapshot

  • status
    object
    • status.completedAt
      string
    • status.message
      string

      Maximum length: 1024

    • status.phase
      string
      DRBDOperationPhase represents the phase of a DRBD operation.
    • status.startedAt
      string

DRBDResource

Short names: drbdr

Scope: Cluster
Version: v1alpha1

  • apiVersion
    string
    APIVersion 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
  • kind
    string
    Kind 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
  • metadata
    object
  • spec
    object
    • spec.actualNameOnTheNode
      string

      Length: 1..253

      Pattern: ^[0-9A-Za-z.+_-]*$

    • spec.allowTwoPrimaries
      boolean

      Default: false

    • spec.lvmLogicalVolumeName
      string
      Required when type is Diskful, must be empty when type is Diskless.

      Length: 1..128

    • spec.maintenance
      string
      Maintenance mode - when set, reconciliation is paused but status is still updated

      Allowed values: NoResourceReconciliation

    • spec.nodeID
      integer

      Required value

      Allowed values: 0 <= X <= 31

    • spec.nodeName
      string

      Required value

      Length: 1..253

    • spec.nonVoting
      boolean
      When enabled, the disk does not participate in quorum voting while still replicating data normally. Only valid for Diskful resources.

      Default: false

    • spec.peers
      array of objects
      • spec.peers.allowRemoteRead
        boolean

        Default: true

      • spec.peers.name
        string
        Peer node name. Immutable, used as list map key.

        Length: 1..253

        Pattern: ^[0-9A-Za-z.+_-]*$

      • spec.peers.nodeID
        integer

        Allowed values: 0 <= X <= 31

      • spec.peers.paths
        array of objects
        • spec.peers.paths.address
          object
          • spec.peers.paths.address.ipv4
            string

            Required value

            Maximum length: 15

            Pattern: ^(?:(?: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]?)$

          • spec.peers.paths.address.port
            integer

            Required value

            Allowed values: 1025 <= X <= 65535

        • spec.peers.paths.systemNetworkName
          string
          System network name. Immutable, used as list map key.

          Length: 1..64

      • spec.peers.pauseSync
        boolean

        Default: false

      • spec.peers.protocol
        string
        DRBDProtocol represents the DRBD replication protocol.

        Default: C

        Allowed values: A, B, C

      • spec.peers.sharedSecret
        string

        Maximum length: 256

      • spec.peers.sharedSecretAlg
        string
        SharedSecretAlg enumerates possible hashing algorithms for DRBD shared secrets.

        Allowed values: SHA256, SHA1, DummyForTest

      • spec.peers.type
        string
        DRBDResourceType represents the type of a DRBD resource.

        Default: Diskful

        Allowed values: Diskful, Diskless

    • spec.quorum
      integer

      Allowed values: 0 <= X <= 32

    • spec.quorumMinimumRedundancy
      integer

      Allowed values: 0 <= X <= 32

    • spec.role
      string
      DRBDRole represents the role of a DRBD resource.

      Default: Secondary

      Allowed values: Primary, Secondary

    • spec.size
      integer or string
      Required 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]+))))?$

    • spec.state
      string
      DRBDResourceState represents the desired state of a DRBD resource.

      Default: Up

      Allowed values: Up, Down

    • spec.systemNetworks
      array of strings

      Required value

      • spec.systemNetworks.Element of the array
        string

        Maximum length: 64

    • spec.type
      string
      DRBDResourceType represents the type of a DRBD resource.

      Default: Diskful

      Allowed values: Diskful, Diskless

  • status
    object
    • status.activeConfiguration
      object
      • status.activeConfiguration.allowTwoPrimaries
        boolean
      • status.activeConfiguration.llvFinalizersToRelease
        array of strings
        LLVFinalizersToRelease 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.
      • status.activeConfiguration.lvmLogicalVolumeName
        string
        LVMLogicalVolumeName 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

      • status.activeConfiguration.nonVoting
        boolean
      • status.activeConfiguration.quorum
        integer
      • status.activeConfiguration.quorumMinimumRedundancy
        integer
      • status.activeConfiguration.role
        string
        DRBDRole represents the role of a DRBD resource.

        Allowed values: Primary, Secondary

      • status.activeConfiguration.state
        string
        DRBDResourceState represents the desired state of a DRBD resource.

        Allowed values: Up, Down

      • status.activeConfiguration.type
        string
        Type 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

    • status.addresses
      array of objects
      • status.addresses.address
        object
        • status.addresses.address.ipv4
          string

          Required value

          Maximum length: 15

          Pattern: ^(?:(?: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]?)$

        • status.addresses.address.port
          integer

          Required value

          Allowed values: 1025 <= X <= 65535

      • status.addresses.systemNetworkName
        string

        Maximum length: 64

    • status.conditions
      array of objects
      • status.conditions.lastTransitionTime
        string
        lastTransitionTime 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.
      • status.conditions.message
        string
        message is a human readable message indicating details about the transition. This may be an empty string.

        Maximum length: 32768

      • status.conditions.observedGeneration
        integer
        observedGeneration 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

      • status.conditions.reason
        string
        reason 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..1024

        Pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$

      • status.conditions.status
        string
        status of the condition, one of True, False, Unknown.

        Allowed values: True, False, Unknown

      • status.conditions.type
        string
        type of condition in CamelCase or in foo.example.com/CamelCase.

        Maximum length: 316

        Pattern: ^([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])$

    • status.device
      string
      Device 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

    • status.deviceIOSuspended
      boolean
      DeviceIOSuspended indicates whether I/O is suspended on the device. Only present on primary
    • status.deviceOpen
      boolean
      DeviceOpen 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
    • status.deviceUUID
      string
      DeviceUUID 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: 16

      Pattern: ^([0-9A-F]{16})?$

    • status.diskState
      string
      DiskState 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.
    • status.peers
      array of objects
      • status.peers.allowRemoteRead
        boolean
        AllowRemoteRead indicates whether reads are allowed from this peer.
      • status.peers.connectionState
        string
      • status.peers.diskState
        string
        DiskState 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.
      • status.peers.name
        string

        Length: 1..253

      • status.peers.nodeID
        integer

        Allowed values: 0 <= X <= 31

      • status.peers.paths
        array of objects
        • status.peers.paths.address
          object
          • status.peers.paths.address.ipv4
            string

            Required value

            Maximum length: 15

            Pattern: ^(?:(?: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]?)$

          • status.peers.paths.address.port
            integer

            Required value

            Allowed values: 1025 <= X <= 65535

        • status.peers.paths.established
          boolean
        • status.peers.paths.systemNetworkName
          string

          Length: 1..64

      • status.peers.replicationState
        string
        ReplicationState is the DRBD replication state with this peer.
      • status.peers.role
        string
        Role is the DRBD role of this peer (Primary or Secondary).

        Allowed values: Primary, Secondary

      • status.peers.type
        string
        DRBDResourceType represents the type of a DRBD resource.

        Allowed values: Diskful, Diskless

    • status.quorum
      boolean
    • status.size
      integer or string
      Size 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

ReplicatedStorageClass is a Kubernetes Custom Resource that defines a configuration for a Kubernetes Storage class.
  • apiVersion
    string
    APIVersion 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
  • kind
    string
    Kind 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
  • metadata
    object
  • spec
    object

    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.

    • spec.configurationRolloutStrategy
      object
      ConfigurationRolloutStrategy defines how configuration changes are applied to existing volumes. When not specified, the controller fills the default (RollingUpdate, maxParallel=5).
      • spec.configurationRolloutStrategy.rollingUpdate
        object
        RollingUpdate configures parameters for RollingUpdate strategy. Required when type is RollingUpdate.
        • spec.configurationRolloutStrategy.rollingUpdate.maxParallel
          integer

          Required value

          MaxParallel is the maximum number of volumes being rolled out simultaneously.

          Default: 5

          Allowed values: 1 <= X <= 200

      • spec.configurationRolloutStrategy.type
        string

        Required value

        Type specifies the rollout strategy type.

        Allowed values: RollingUpdate, NewVolumesOnly

    • spec.eligibleNodesConflictResolutionStrategy
      object
      EligibleNodesConflictResolutionStrategy defines how the controller handles volumes with eligible nodes conflicts. When not specified, the controller fills the default (RollingRepair, maxParallel=5).
      • spec.eligibleNodesConflictResolutionStrategy.rollingRepair
        object
        RollingRepair configures parameters for RollingRepair conflict resolution strategy. Required when type is RollingRepair.
        • spec.eligibleNodesConflictResolutionStrategy.rollingRepair.maxParallel
          integer

          Required value

          MaxParallel is the maximum number of volumes being repaired simultaneously.

          Default: 5

          Allowed values: 1 <= X <= 200

      • spec.eligibleNodesConflictResolutionStrategy.type
        string

        Required value

        Type specifies the conflict resolution strategy type.

        Allowed values: Manual, RollingRepair

    • spec.eligibleNodesPolicy
      object
      EligibleNodesPolicy defines policies for managing eligible nodes. When not specified, the controller fills the default (notReadyGracePeriod=10m).
      • spec.eligibleNodesPolicy.notReadyGracePeriod
        string

        Required value

        NotReadyGracePeriod specifies how long to wait before removing a not-ready node from the eligible nodes list.

        Default: 10m

    • spec.failuresToTolerate
      integer
      FailuresToTolerate (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

    • spec.guaranteedMinimumDataRedundancy
      integer
      GuaranteedMinimumDataRedundancy (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

    • spec.nodeLabelSelector
      object
      NodeLabelSelector 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.
      • spec.nodeLabelSelector.matchExpressions
        array of objects
        matchExpressions is a list of label selector requirements. The requirements are ANDed.
        • spec.nodeLabelSelector.matchExpressions.key
          string
          key is the label key that the selector applies to.
        • spec.nodeLabelSelector.matchExpressions.operator
          string
          operator represents a key’s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
        • spec.nodeLabelSelector.matchExpressions.values
          array of strings
          values 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.
      • spec.nodeLabelSelector.matchLabels
        object
        matchLabels 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.
    • spec.reclaimPolicy
      string

      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

    • spec.replication
      string

      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

    • spec.storage
      object
      Storage 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.
      • spec.storage.lvmVolumeGroups
        array of objects

        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.

        • spec.storage.lvmVolumeGroups.name
          string
          Selected LVMVolumeGroup resource’s name.

          Minimal length: 1

          Pattern: ^[a-z0-9]([a-z0-9-.]{0,251}[a-z0-9])?$

        • spec.storage.lvmVolumeGroups.thinPoolName
          string
          Selected Thin-pool name.

          Length: 1..128

          Pattern: ^[a-zA-Z0-9][a-zA-Z0-9_.+-]*$

      • spec.storage.type
        string

        Required value

        Type defines the volumes type. Might be:

        • LVM (for Thick)
        • LVMThin (for Thin)

        Allowed values: LVM, LVMThin

    • spec.storagePool
      string

      StoragePool is the name of a ReplicatedStoragePool resource. This field cannot be added or changed, only removed.

      Deprecated: Use Storage instead.

    • spec.systemNetworkNames
      array of strings

      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.

    • spec.topology
      string

      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

    • spec.volumeAccess
      string

      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: PreferablyLocal

      Allowed values: Local, EventuallyLocal, PreferablyLocal, Any

    • spec.zones
      array of strings

      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.

      • spec.zones.Element of the array
        string

        Maximum length: 63

  • status
    object
    Displays current information about the Storage Class.
    • status.conditions
      array of objects
      • status.conditions.lastTransitionTime
        string
        lastTransitionTime 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.
      • status.conditions.message
        string
        message is a human readable message indicating details about the transition. This may be an empty string.

        Maximum length: 32768

      • status.conditions.observedGeneration
        integer
        observedGeneration 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

      • status.conditions.reason
        string
        reason 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..1024

        Pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$

      • status.conditions.status
        string
        status of the condition, one of True, False, Unknown.

        Allowed values: True, False, Unknown

      • status.conditions.type
        string
        type of condition in CamelCase or in foo.example.com/CamelCase.

        Maximum length: 316

        Pattern: ^([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])$

    • status.configuration
      object
      Configuration is the resolved configuration that volumes should align to.
      • status.configuration.failuresToTolerate
        integer

        Required value

        FailuresToTolerate is the resolved FTT value.

        Allowed values: 0 <= X <= 2

      • status.configuration.guaranteedMinimumDataRedundancy
        integer

        Required value

        GuaranteedMinimumDataRedundancy is the resolved GMDR value.

        Allowed values: 0 <= X <= 2

      • status.configuration.replicatedStoragePoolName
        string

        Required value

        ReplicatedStoragePoolName is the name of the ReplicatedStoragePool resource.

        Minimal length: 1

      • status.configuration.topology
        string

        Required value

        Topology is the resolved topology setting.

        Allowed values: TransZonal, Zonal, Ignored

      • status.configuration.volumeAccess
        string

        Required value

        VolumeAccess is the resolved volume access mode.

        Allowed values: Local, EventuallyLocal, PreferablyLocal, Any

    • status.configurationGeneration
      integer
      ConfigurationGeneration is the RSC generation when configuration was accepted.
    • status.message
      string
      Message is a human-readable description of the current phase.
    • status.phase
      string
      Phase is the operational state summary of the storage class.

      Allowed values: Ready, WaitingForStoragePool, InsufficientNodes, InvalidConfiguration, RollingOut, PartiallyAligned, Terminating

    • status.storagePoolBasedOnGeneration
      integer
      StoragePoolBasedOnGeneration is the RSC generation when storagePoolName was computed.
    • status.storagePoolEligibleNodesRevision
      integer
      StoragePoolEligibleNodesRevision tracks RSP’s eligibleNodesRevision for change detection.
    • status.storagePoolName
      string
      StoragePoolName 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.
    • status.volumes
      object

      Required value

      Volumes provides aggregated volume statistics. Always present (may have total=0).

      Default: {}

      • status.volumes.aligned
        integer
        Aligned is the number of volumes whose configuration matches the storage class.
      • status.volumes.inConflictWithEligibleNodes
        integer
        InConflictWithEligibleNodes is the number of volumes with replicas on non-eligible nodes.
      • status.volumes.pendingObservation
        integer
        PendingObservation is the number of volumes that haven’t observed current RSC configuration or eligible nodes.
      • status.volumes.staleConfiguration
        integer
        StaleConfiguration is the number of volumes with outdated configuration.
      • status.volumes.total
        integer
        Total is the total number of volumes.
      • status.volumes.usedStoragePoolNames
        array of strings
        UsedStoragePoolNames is a sorted list of storage pool names currently used by volumes.

ReplicatedStoragePool

Short names: rsp

Scope: Cluster
Version: v1alpha1

ReplicatedStoragePool is a Kubernetes Custom Resource that defines a configuration for Linstor Storage-pools.
  • apiVersion
    string
    APIVersion 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
  • kind
    string
    Kind 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
  • metadata
    object
  • spec
    object
    Defines desired rules for Linstor’s Storage-pools.
    • spec.eligibleNodesPolicy
      object

      Required value

      EligibleNodesPolicy defines policies for managing eligible nodes. Always present with defaults.

      Default: { "notReadyGracePeriod": "10m" }

      • spec.eligibleNodesPolicy.notReadyGracePeriod
        string

        Required value

        NotReadyGracePeriod specifies how long to wait before removing a not-ready node from the eligible nodes list.

        Default: 10m

    • spec.lvmVolumeGroups
      array of objects

      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.

      • spec.lvmVolumeGroups.name
        string
        Selected LVMVolumeGroup resource’s name.

        Minimal length: 1

        Pattern: ^[a-z0-9]([a-z0-9-.]{0,251}[a-z0-9])?$

      • spec.lvmVolumeGroups.thinPoolName
        string
        Selected Thin-pool name.

        Length: 1..128

        Pattern: ^[a-zA-Z0-9][a-zA-Z0-9_.+-]*$

    • spec.nodeLabelSelector
      object
      NodeLabelSelector 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.
      • spec.nodeLabelSelector.matchExpressions
        array of objects
        matchExpressions is a list of label selector requirements. The requirements are ANDed.
        • spec.nodeLabelSelector.matchExpressions.key
          string
          key is the label key that the selector applies to.
        • spec.nodeLabelSelector.matchExpressions.operator
          string
          operator represents a key’s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
        • spec.nodeLabelSelector.matchExpressions.values
          array of strings
          values 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.
      • spec.nodeLabelSelector.matchLabels
        object
        matchLabels 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.
    • spec.systemNetworkNames
      array of strings

      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" ]

    • spec.type
      string

      Required value

      Defines the volumes type. Might be:

      • LVM (for Thick)
      • LVMThin (for Thin)

      Allowed values: LVM, LVMThin

    • spec.zones
      array of strings
      Array of zones the Storage pool’s volumes should be replicated in.
      • spec.zones.Element of the array
        string

        Maximum length: 63

  • status
    object
    Displays current information about the state of the LINSTOR storage pool.
    • status.conditions
      array of objects
      • status.conditions.lastTransitionTime
        string
        lastTransitionTime 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.
      • status.conditions.message
        string
        message is a human readable message indicating details about the transition. This may be an empty string.

        Maximum length: 32768

      • status.conditions.observedGeneration
        integer
        observedGeneration 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

      • status.conditions.reason
        string
        reason 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..1024

        Pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$

      • status.conditions.status
        string
        status of the condition, one of True, False, Unknown.

        Allowed values: True, False, Unknown

      • status.conditions.type
        string
        type of condition in CamelCase or in foo.example.com/CamelCase.

        Maximum length: 316

        Pattern: ^([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])$

    • status.eligibleNodes
      array of objects
      EligibleNodes lists nodes eligible for this storage pool.
      • status.eligibleNodes.agentReady
        boolean
        AgentReady indicates whether the sds-replicated-volume agent on this node is ready.
      • status.eligibleNodes.lvmVolumeGroups
        array of objects
        LVMVolumeGroups lists LVM volume groups available on this node.
        • status.eligibleNodes.lvmVolumeGroups.name
          string
          Name is the LVMVolumeGroup resource name.

          Maximum length: 253

        • status.eligibleNodes.lvmVolumeGroups.ready
          boolean
          Ready indicates whether the LVMVolumeGroup (and its thin pool, if applicable) is ready.
        • status.eligibleNodes.lvmVolumeGroups.thinPoolName
          string
          ThinPoolName is the thin pool name (for LVMThin storage pools).

          Maximum length: 128

        • status.eligibleNodes.lvmVolumeGroups.unschedulable
          boolean
          Unschedulable indicates whether new volumes should not use this volume group.
      • status.eligibleNodes.nodeName
        string
        NodeName is the Kubernetes node name.

        Maximum length: 253

      • status.eligibleNodes.nodeReady
        boolean
        NodeReady indicates whether the Kubernetes node is ready.
      • status.eligibleNodes.unschedulable
        boolean
        Unschedulable indicates whether new volumes should not be scheduled to this node.
      • status.eligibleNodes.zoneName
        string
        ZoneName is the zone this node belongs to.

        Maximum length: 63

    • status.eligibleNodesRevision
      integer
      EligibleNodesRevision is incremented when eligible nodes change.
    • status.message
      string
      Message is a human-readable description of the current phase. Mirrors the Ready condition message.
    • status.phase
      string
      Phase is the operational state summary of the storage pool.

      Allowed values: Ready, WaitingForLVMVolumeGroups, InvalidConfiguration

    • status.usedBy
      object
      UsedBy tracks which resources are using this storage pool.
      • status.usedBy.replicatedStorageClassNames
        array of strings
        ReplicatedStorageClassNames lists RSC names using this storage pool.
        • status.usedBy.replicatedStorageClassNames.Element of the array
          string

          Maximum length: 253

ReplicatedVolumeAttachment

Short names: rva

Scope: Cluster
Version: v1alpha1

ReplicatedVolumeAttachment is a Kubernetes Custom Resource that represents an attachment intent/state of a ReplicatedVolume to a specific node.
  • apiVersion
    string
    APIVersion 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
  • kind
    string
    Kind 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
  • metadata
    object
  • spec
    object
    • spec.nodeName
      string

      Required value

      Length: 1..253

    • spec.replicatedVolumeName
      string

      Required value

      Length: 1..127

      Pattern: ^[0-9A-Za-z.+_-]*$

  • status
    object
    • status.conditions
      array of objects
      • status.conditions.lastTransitionTime
        string
        lastTransitionTime 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.
      • status.conditions.message
        string
        message is a human readable message indicating details about the transition. This may be an empty string.

        Maximum length: 32768

      • status.conditions.observedGeneration
        integer
        observedGeneration 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

      • status.conditions.reason
        string
        reason 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..1024

        Pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$

      • status.conditions.status
        string
        status of the condition, one of True, False, Unknown.

        Allowed values: True, False, Unknown

      • status.conditions.type
        string
        type of condition in CamelCase or in foo.example.com/CamelCase.

        Maximum length: 316

        Pattern: ^([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])$

    • status.devicePath
      string
      DevicePath is the block device path on the node. Only set when the device is available on the node. Example: /dev/drbd10012.

      Maximum length: 256

    • status.inUse
      boolean
      InUse indicates whether the block device is currently in use by a process. Only set when the device is available on the node.
    • status.ioSuspended
      boolean
      IOSuspended indicates whether I/O is suspended on the device. Only set when the device is available on the node.
    • status.message
      string
      Message is a human-readable detail about the current state.

      Maximum length: 512

    • status.phase
      string
      Phase is a quick operational state summary.

      Allowed values: Pending, Attaching, Attached, Detaching, Terminating

ReplicatedVolumeReplica

Short names: rvr

Scope: Cluster
Version: v1alpha1

ReplicatedVolumeReplica is a Kubernetes Custom Resource that represents a replica of a ReplicatedVolume.
  • apiVersion
    string
    APIVersion 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
  • kind
    string
    Kind 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
  • metadata
    object
  • spec
    object
    • spec.lvmVolumeGroupName
      string
      LVMVolumeGroupName is the LVMVolumeGroup resource name where this replica should be placed.

      Minimal length: 1

      Pattern: ^[a-z0-9]([a-z0-9-.]{0,251}[a-z0-9])?$

    • spec.lvmVolumeGroupThinPoolName
      string
      LVMVolumeGroupThinPoolName is the thin pool name (for LVMThin storage pools).
    • spec.nodeName
      string

      Length: 1..253

    • spec.replicatedVolumeName
      string

      Required value

      Length: 1..120

      Pattern: ^[0-9A-Za-z.+_-]*$

    • spec.type
      string

      Required value

      ReplicaType enumerates possible values for ReplicatedVolumeReplica spec.type and status.effectiveType fields.

      Allowed values: Diskful, ShadowDiskful, Access, TieBreaker

  • status
    object
    • status.addresses
      array of objects
      • status.addresses.address
        object
        • status.addresses.address.ipv4
          string

          Required value

          Maximum length: 15

          Pattern: ^(?:(?: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]?)$

        • status.addresses.address.port
          integer

          Required value

          Allowed values: 1025 <= X <= 65535

      • status.addresses.systemNetworkName
        string

        Maximum length: 64

    • status.attachment
      object
      Attachment contains information about the device attachment state. Only set when the replica is attached on the node.
      • status.attachment.devicePath
        string

        Required value

        DevicePath is the block device path when the replica is attached. Example: /dev/drbd10012.

        Length: 1..256

      • status.attachment.inUse
        boolean

        Required value

        InUse indicates whether the replica’s block device is currently in use by a process.
      • status.attachment.ioSuspended
        boolean

        Required value

        IOSuspended indicates whether I/O is suspended on the device.
    • status.backingVolume
      object
      BackingVolume contains information about the backing LVM logical volume. Only set for Diskful replicas.
      • status.backingVolume.lvmVolumeGroupName
        string
        LVMVolumeGroupName is the name of the LVM volume group.

        Maximum length: 253

      • status.backingVolume.lvmVolumeGroupThinPoolName
        string
        LVMVolumeGroupThinPoolName 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

      • status.backingVolume.size
        integer or string
        Size 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]+))))?$

      • status.backingVolume.state
        string
        State is the local backing volume state.
    • status.conditions
      array of objects
      • status.conditions.lastTransitionTime
        string
        lastTransitionTime 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.
      • status.conditions.message
        string
        message is a human readable message indicating details about the transition. This may be an empty string.

        Maximum length: 32768

      • status.conditions.observedGeneration
        integer
        observedGeneration 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

      • status.conditions.reason
        string
        reason 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..1024

        Pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$

      • status.conditions.status
        string
        status of the condition, one of True, False, Unknown.

        Allowed values: True, False, Unknown

      • status.conditions.type
        string
        type of condition in CamelCase or in foo.example.com/CamelCase.

        Maximum length: 316

        Pattern: ^([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])$

    • status.datameshRequest
      object

      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.

      • status.datameshRequest.lvmVolumeGroupName
        string
        LVMVolumeGroupName is the LVMVolumeGroup resource name for Diskful replicas.

        Minimal length: 1

        Pattern: ^[a-z0-9]([a-z0-9-.]{0,251}[a-z0-9])?$

      • status.datameshRequest.operation
        string

        Required value

        Operation is the type of membership change requested.

        Allowed values: Join, Leave, ForceLeave, ForceDetach, ChangeRole, ChangeBackingVolume

      • status.datameshRequest.thinPoolName
        string
        ThinPoolName is the thin pool name (optional, for LVMThin storage pools).
      • status.datameshRequest.type
        string
        Type is the intended replica type. Required for Join and ChangeRole operations.

        Allowed values: Diskful, Access, TieBreaker

    • status.datameshRevision
      integer

      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).
    • status.datameshRevisionObservedByAgent
      integer

      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.

    • status.drbdrReconciliationCache
      object
      DRBDRReconciliationCache holds cached values for DRBDResource reconciliation optimization.
      • status.drbdrReconciliationCache.datameshRevision
        integer
        DatameshRevision is the datamesh revision for which DRBDResource spec was last computed.
      • status.drbdrReconciliationCache.drbdrGeneration
        integer
        DRBDRGeneration is the DRBDResource generation at the time DRBDResource spec was last computed.
      • status.drbdrReconciliationCache.targetType
        string
        TargetType is the target type for which DRBDResource spec was last computed.

        Allowed values: Diskful, LiminalDiskful, ShadowDiskful, LiminalShadowDiskful, TieBreaker, Access

    • status.initialQuorumReachedAt
      string

      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.

    • status.message
      string
      Message is a human-readable detail about the current state.

      Maximum length: 512

    • status.peers
      array of objects
      Peers contains the status of connections to peer replicas.
      • status.peers.attached
        boolean
        Attached indicates whether this peer is attached on its node (and has a block device).
      • status.peers.backingVolumeState
        string
        BackingVolumeState is the peer’s backing volume state.
      • status.peers.connectionEstablishedOn
        array of strings
        ConnectionEstablishedOn lists system network names where connection to this peer is established.
        • status.peers.connectionEstablishedOn.Element of the array
          string

          Maximum length: 64

      • status.peers.connectionState
        string
        ConnectionState is the DRBD connection state to this peer.
      • status.peers.name
        string
        Name is the name of the peer ReplicatedVolumeReplica. Must have format “prefix-N” where N is 0-31.

        Length: 1..253

        Pattern: ^.+-([0-9]|[12][0-9]|3[01])$

      • status.peers.replicationState
        string
        ReplicationState is the DRBD replication state with this peer.
      • status.peers.type
        string
        Type is the replica type (Diskful/TieBreaker/Access).

        Allowed values: Diskful, Access, TieBreaker

    • status.phase
      string
      Phase is a quick operational state summary.

      Allowed values: Pending, Provisioning, Configuring, WaitingForDatamesh, Synchronizing, Healthy, PartiallyDegraded, Degraded, Critical, Progressing, AgentNotReady, Terminating

    • status.quorum
      boolean
      Quorum indicates whether this replica has quorum.
    • status.quorumSummary
      object
      QuorumSummary provides detailed quorum information.
      • status.quorumSummary.connectedDiskfulPeers
        integer

        Required value

        ConnectedDiskfulPeers is the number of Diskful peers with established connection.

        Default: 0

      • status.quorumSummary.connectedTieBreakerPeers
        integer

        Required value

        ConnectedTieBreakerPeers is the number of TieBreaker peers with established connection. TieBreakers only contribute to quorum under specific edge conditions.

        Default: 0

      • status.quorumSummary.connectedUpToDatePeers
        integer

        Required value

        ConnectedUpToDatePeers is the number of peers with established connection and UpToDate disk.

        Default: 0

      • status.quorumSummary.quorum
        integer
        Quorum is the required quorum threshold.
      • status.quorumSummary.quorumMinimumRedundancy
        integer
        QuorumMinimumRedundancy is the number of diskful UpToDate peers (including self) required for quorum.
    • status.size
      integer or string
      Size 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]+))))?$

    • status.type
      string

      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

  • apiVersion
    string
    APIVersion 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
  • kind
    string
    Kind 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
  • metadata
    object
  • spec
    object
    Auto mode requires RSC name, forbids manualConfiguration: Manual mode requires manualConfiguration, forbids RSC name:
    • spec.configurationMode
      string
      ConfigurationMode 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: Auto

      Allowed values: Auto, Manual

    • spec.manualConfiguration
      object
      ManualConfiguration specifies the volume configuration directly. Required when configurationMode is Manual. Must not be set when configurationMode is Auto.
      • spec.manualConfiguration.failuresToTolerate
        integer

        Required value

        FailuresToTolerate is the resolved FTT value.

        Allowed values: 0 <= X <= 2

      • spec.manualConfiguration.guaranteedMinimumDataRedundancy
        integer

        Required value

        GuaranteedMinimumDataRedundancy is the resolved GMDR value.

        Allowed values: 0 <= X <= 2

      • spec.manualConfiguration.replicatedStoragePoolName
        string

        Required value

        ReplicatedStoragePoolName is the name of the ReplicatedStoragePool resource.

        Minimal length: 1

      • spec.manualConfiguration.topology
        string

        Required value

        Topology is the resolved topology setting.

        Allowed values: TransZonal, Zonal, Ignored

      • spec.manualConfiguration.volumeAccess
        string

        Required value

        VolumeAccess is the resolved volume access mode.

        Allowed values: Local, EventuallyLocal, PreferablyLocal, Any

    • spec.maxAttachments
      integer

      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: 1

      Allowed values: 1 <= X <= 32

    • spec.replicatedStorageClassName
      string
      ReplicatedStorageClassName references the RSC that provides configuration. Required when configurationMode is Auto. Must not be set when configurationMode is Manual.

      Minimal length: 1

    • spec.size
      integer or string

      Required value

      Pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$

  • status
    object
    • status.actuallyAttachedTo
      array of strings
    • status.baselineGuaranteedMinimumDataRedundancy
      integer

      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: 0

      Allowed values: 0 <= X <= 2

    • status.conditions
      array of objects
      • status.conditions.lastTransitionTime
        string
        lastTransitionTime 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.
      • status.conditions.message
        string
        message is a human readable message indicating details about the transition. This may be an empty string.

        Maximum length: 32768

      • status.conditions.observedGeneration
        integer
        observedGeneration 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

      • status.conditions.reason
        string
        reason 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..1024

        Pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$

      • status.conditions.status
        string
        status of the condition, one of True, False, Unknown.

        Allowed values: True, False, Unknown

      • status.conditions.type
        string
        type of condition in CamelCase or in foo.example.com/CamelCase.

        Maximum length: 316

        Pattern: ^([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])$

    • status.configuration
      object
      Configuration is the desired configuration snapshot for this volume.
      • status.configuration.failuresToTolerate
        integer

        Required value

        FailuresToTolerate is the resolved FTT value.

        Allowed values: 0 <= X <= 2

      • status.configuration.guaranteedMinimumDataRedundancy
        integer

        Required value

        GuaranteedMinimumDataRedundancy is the resolved GMDR value.

        Allowed values: 0 <= X <= 2

      • status.configuration.replicatedStoragePoolName
        string

        Required value

        ReplicatedStoragePoolName is the name of the ReplicatedStoragePool resource.

        Minimal length: 1

      • status.configuration.topology
        string

        Required value

        Topology is the resolved topology setting.

        Allowed values: TransZonal, Zonal, Ignored

      • status.configuration.volumeAccess
        string

        Required value

        VolumeAccess is the resolved volume access mode.

        Allowed values: Local, EventuallyLocal, PreferablyLocal, Any

    • status.configurationGeneration
      integer
      ConfigurationGeneration is the RSC generation from which configuration was taken.
    • status.configurationObservedGeneration
      integer
      ConfigurationObservedGeneration is the RSC generation when configuration was last observed/acknowledged.
    • status.datamesh
      object

      Required value

      Datamesh is the computed datamesh configuration for the volume.
      • status.datamesh.members
        array of objects

        Required value

        Members is the list of datamesh members.

        Default: []

        • status.datamesh.members.addresses
          array of objects
          Addresses is the list of DRBD addresses for this member.
          • status.datamesh.members.addresses.address
            object
            • status.datamesh.members.addresses.address.ipv4
              string

              Required value

              Maximum length: 15

              Pattern: ^(?:(?: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]?)$

            • status.datamesh.members.addresses.address.port
              integer

              Required value

              Allowed values: 1025 <= X <= 65535

          • status.datamesh.members.addresses.systemNetworkName
            string

            Maximum length: 64

        • status.datamesh.members.attached
          boolean
          Attached indicates whether this member should be attached (Primary in DRBD terms).

          Default: false

        • status.datamesh.members.lvmVolumeGroupName
          string
          LVMVolumeGroupName is the LVMVolumeGroup resource name where this replica should be placed.

          Length: 1..253

          Pattern: ^[a-z0-9]([a-z0-9-.]{0,251}[a-z0-9])?$

        • status.datamesh.members.lvmVolumeGroupThinPoolName
          string
          LVMVolumeGroupThinPoolName is the thin pool name (for LVMThin storage pools).

          Maximum length: 64

        • status.datamesh.members.name
          string
          Name is the member name (used as list map key). Must have format “prefix-N” where N is 0-31.

          Length: 1..140

        • status.datamesh.members.nodeName
          string
          NodeName is the Kubernetes node name where the member is located.

          Length: 1..253

        • status.datamesh.members.type
          string
          Type is the member type.

          Allowed values: Diskful, LiminalDiskful, ShadowDiskful, LiminalShadowDiskful, TieBreaker, Access

        • status.datamesh.members.zone
          string
          Zone is the zone where the member is located.

          Maximum length: 64

      • status.datamesh.multiattach
        boolean
        Multiattach enables multiattach mode for the datamesh.

        Default: false

      • status.datamesh.quorum
        integer

        Required value

        Quorum is the quorum value for the datamesh.

        Default: 0

        Allowed values: 0 <= X <= 13

      • status.datamesh.quorumMinimumRedundancy
        integer

        Required value

        QuorumMinimumRedundancy is the minimum redundancy required for quorum.

        Default: 0

        Allowed values: 0 <= X <= 8

      • status.datamesh.sharedSecret
        string
        SharedSecret is the shared secret for DRBD authentication.

        Maximum length: 256

      • status.datamesh.sharedSecretAlg
        string
        SharedSecretAlg is the hashing algorithm for the shared secret.

        Allowed values: SHA256, SHA1, DummyForTest

      • status.datamesh.size
        integer or string

        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]+))))?$

      • status.datamesh.systemNetworkNames
        array of strings

        Required value

        SystemNetworkNames is the list of system network names for DRBD communication.

        Default: []

        • status.datamesh.systemNetworkNames.Element of the array
          string

          Maximum length: 64

    • status.datameshReplicaRequests
      array of objects
      DatameshReplicaRequests is the list of pending membership requests from replicas.
      • status.datameshReplicaRequests.firstObservedAt
        string
        FirstObservedAt is the timestamp when this request was first observed.
      • status.datameshReplicaRequests.message
        string
        Message is an optional human-readable message about the request state and progress.

        Maximum length: 512

      • status.datameshReplicaRequests.name
        string
        Name is the replica name. Must have format “prefix-N” where N is 0-31.

        Length: 1..123

        Pattern: ^.+-([0-9]|[12][0-9]|3[01])$

      • status.datameshReplicaRequests.request
        object
        Request is the membership change request details from the replica.
        • status.datameshReplicaRequests.request.lvmVolumeGroupName
          string
          LVMVolumeGroupName is the LVMVolumeGroup resource name for Diskful replicas.

          Minimal length: 1

          Pattern: ^[a-z0-9]([a-z0-9-.]{0,251}[a-z0-9])?$

        • status.datameshReplicaRequests.request.operation
          string

          Required value

          Operation is the type of membership change requested.

          Allowed values: Join, Leave, ForceLeave, ForceDetach, ChangeRole, ChangeBackingVolume

        • status.datameshReplicaRequests.request.thinPoolName
          string
          ThinPoolName is the thin pool name (optional, for LVMThin storage pools).
        • status.datameshReplicaRequests.request.type
          string
          Type is the intended replica type. Required for Join and ChangeRole operations.

          Allowed values: Diskful, Access, TieBreaker

    • status.datameshRevision
      integer

      Required value

      DatameshRevision is a counter incremented when datamesh configuration changes.
    • status.datameshTransitions
      array of objects
      DatameshTransitions is the list of active datamesh transitions.
      • status.datameshTransitions.fromReplicaType
        string
        FromReplicaType is the source replica type for ChangeReplicaType transitions. Required for ChangeReplicaType. Must not be set for other types.

        Allowed values: Diskful, Access, TieBreaker, ShadowDiskful

      • status.datameshTransitions.fromSystemNetworkNames
        array of strings
        FromSystemNetworkNames 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.
        • status.datameshTransitions.fromSystemNetworkNames.Element of the array
          string

          Maximum length: 64

      • status.datameshTransitions.group
        string
        Group 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

      • status.datameshTransitions.planID
        string
        PlanID 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

      • status.datameshTransitions.replicaName
        string
        ReplicaName 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..123

        Pattern: ^.+-([0-9]|[12][0-9]|3[01])$

      • status.datameshTransitions.replicaType
        string
        ReplicaType 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

      • status.datameshTransitions.steps
        array of objects
        Steps 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.
        • status.datameshTransitions.steps.completedAt
          string
          CompletedAt is set when the step transitions from Active to Completed.
        • status.datameshTransitions.steps.datameshRevision
          integer
          DatameshRevision is the revision assigned when this step was activated. 0 if the step has not been activated yet or does not bump the revision.
        • status.datameshTransitions.steps.message
          string
          Message is a per-step progress or error message. Updated every reconciliation while the step is Active.

          Maximum length: 512

        • status.datameshTransitions.steps.name
          string
          Name is a human-readable step name (e.g., “Preconfigure”, “attach”, “✦ → D∅”).

          Length: 1..64

        • status.datameshTransitions.steps.startedAt
          string
          StartedAt is set when the step transitions from Pending to Active.
        • status.datameshTransitions.steps.status
          string
          Status is the current status of this step.

          Default: Pending

          Allowed values: Pending, Active, Completed

      • status.datameshTransitions.toReplicaType
        string
        ToReplicaType is the target replica type for ChangeReplicaType transitions. Required for ChangeReplicaType. Must not be set for other types.

        Allowed values: Diskful, Access, TieBreaker, ShadowDiskful

      • status.datameshTransitions.toSystemNetworkNames
        array of strings
        ToSystemNetworkNames 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.
        • status.datameshTransitions.toSystemNetworkNames.Element of the array
          string

          Maximum length: 64

      • status.datameshTransitions.type
        string
        Type is the transition type.

        Allowed values: AddReplica, Attach, ChangeQuorum, ChangeReplicaType, ChangeSystemNetworks, Detach, DisableMultiattach, EnableMultiattach, ForceDetach, ForceRemoveReplica, Formation, RemoveReplica, RepairNetworkAddresses, ResizeVolume

    • status.effectiveLayout
      object

      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 }

      • status.effectiveLayout.failuresToTolerate
        integer
        FailuresToTolerate 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).
      • status.effectiveLayout.guaranteedMinimumDataRedundancy
        integer
        GuaranteedMinimumDataRedundancy 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).
      • status.effectiveLayout.message
        string
        Message is a human-readable summary of the effective layout state.
      • status.effectiveLayout.reachableTieBreakers
        integer

        Required value

        ReachableTieBreakers is the number of TieBreakers confirmed reachable (agent ready or seen Connected by peers).

        Default: 0

      • status.effectiveLayout.reachableVoters
        integer

        Required value

        ReachableVoters is the number of voters confirmed reachable (own Quorum=true or seen Connected by peers).

        Default: 0

      • status.effectiveLayout.staleAgents
        integer

        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

      • status.effectiveLayout.totalTieBreakers
        integer

        Required value

        TotalTieBreakers is the number of TieBreaker members.

        Default: 0

      • status.effectiveLayout.totalVoters
        integer

        Required value

        TotalVoters is the number of voter members (Diskful and liminal variants).

        Default: 0

      • status.effectiveLayout.upToDateVoters
        integer

        Required value

        UpToDateVoters is the number of voters with UpToDate backing volume (own BackingVolume=UpToDate or seen UpToDate by peers).

        Default: 0

    • status.eligibleNodesViolations
      array of objects
      EligibleNodesViolations lists replicas placed on non-eligible nodes.
      • status.eligibleNodesViolations.nodeName
        string
        NodeName is the node where the replica is placed.

        Maximum length: 253

      • status.eligibleNodesViolations.reason
        string
        Reason describes why this placement violates eligible nodes constraints.
      • status.eligibleNodesViolations.replicaName
        string
        ReplicaName is the ReplicatedVolumeReplica name.

        Maximum length: 253

    • status.membershipLayout
      string
      MembershipLayout 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.
    • status.size
      integer or string
      Size 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]+))))?$