Available with limitations in CE

Available without limitations in:  BE, SE, SE+, EE

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.

How to explicitly enable the module…

You may explicitly enable or disable the module in one of the following ways:

  • Via Deckhouse web UI. In the “System” → “System Management” → “Deckhouse” → “Modules” section, open the sds-replicated-volume module and enable (or disable) the “Module enabled” toggle. Save changes.

    Example:

    Module enable/disable interface
  • Via Deckhouse CLI (d8).

    Use the d8 system module enable command for enabling, or d8 system module disable command for disabling the module (you need Deckhouse CLI (d8), configured to work with the cluster).

    Example of enabling the module:

    d8 system module enable sds-replicated-volume
  • Using ModuleConfig sds-replicated-volume.

    Set spec.enabled to true or false in ModuleConfig sds-replicated-volume (create it if necessary);

    Example of a manifest to enable module sds-replicated-volume:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: sds-replicated-volume
    spec:
      enabled: true

How to configure the module…

You can configure the module in one of the following ways:

  • Via Deckhouse web UI.

    In the “System” → “System Management” → “Deckhouse” → “Modules” section, open the sds-replicated-volume module and enable the “Advanced Settings” switch. Fill in the required fields in the “Configuration” tab or specify the module settings in YAML format on the “YAML” tab, excluding the settings section. Save the changes.

    Example:

    Module Setup Interface

    You can also edit the ModuleConfig object sds-replicated-volume on the “YAML” tab in the module settings window (“System” → “System Management” → “Deckhouse” → “Modules”, open the module sds-replicated-volume) by specifying the schema version in the spec.version parameter and the necessary module parameters in the spec.settings section.

  • Via Deckhouse CLI (d8) (requires Deckhouse CLI (d8) configured to work with the cluster).

    Edit the existing ModuleConfig sds-replicated-volume (for more details on configuring Deckhouse, see the documentation) by executing the following command:

    d8 k edit mc sds-replicated-volume

    Make the necessary changes in the spec.settings section. If necessary, specify the schema version in the spec.version parameter. Save the changes.

    You can also create a file with manifest for ModuleConfig sds-replicated-volume using the example below. Fill in the spec.settings section with the required module parameters. If necessary, specify the schema version in the spec.version parameter.

    Apply the manifest using the following command (indicate the manifest file name):

    d8 k apply -f <FILENAME>

    Example of a manifest for ModuleConfig sds-replicated-volume:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: sds-replicated-volume
    spec:
      version: 2
      enabled: true
      settings: # Module parameters from the "Parameters" section below.

How to change the module release channel…

To change the module release channel, follow the instruction.

Requirements

To the Kubernetes version: 1.31 and above.

To the Deckhouse version: 1.72 and above.

To the versions of other modules:

  • sds-node-configurator: 0.6.1 and above.

Conversions

The module is configured using the ModuleConfig resource, the schema of which contains a version number. When you apply an old version of the ModuleConfig schema in a cluster, automatic transformations are performed. To manually update the ModuleConfig schema version, the following steps must be completed sequentially for each version:

  • Updates from version 1 to 2:

    Need to remove the .enableThinProvisioning parameter.

Parameters

Schema version: 2

  • settings
    object
    • settings.backup
      object
      Module backup settings
      • settings.backup.enabled
        boolean
        Module backup state

        Default: true

      • settings.backup.retentionCount
        integer
        Number of backups to keep

        Default: 7

      • settings.backup.schedule
        string
        Backup schedule

        Default: 0 3 * * *

    • settings.dataNodes
      object
      Settings for Linstor on nodes with data

      Default: {}

      • settings.dataNodes.nodeSelector
        object

        The same as in the Pods spec.nodeSelector parameter in Kubernetes.

        If parameter is omitted, Linstor nodes will be placed on all nodes.

        Caution! Changing this parameter does not result in data redistribution. If node with data no longer matches the nodeSelector, data on that node will become inaccessible.

        Default: { "kubernetes.io/os": "linux" }

    • settings.drbdPortRange
      object
      Settings for DRBD TCP ports

      Default: {}

      • settings.drbdPortRange.maxPort
        integer
        DRBD ports range end

        Default: 7999

      • settings.drbdPortRange.minPort
        integer
        DRBD ports range start

        Default: 7000

    • settings.logLevel
      string
      Module log level

      Default: INFO

      Allowed values: ERROR, WARN, INFO, DEBUG, TRACE

    • settings.newControlPlane
      boolean

      When true, use the new control-plane as a backend for the module. Once switched to true, reverting back to false is prohibited.

      Enabling it is only allowed on Deckhouse development builds; on any release channel the setting is rejected and ignored.

      Default: false

    • settings.registryScheme
      string
      Deprecated parameter. Remove it from ModuleConfig for Deckhouse with version greater than 1.57.

      Default: https

    • settings.resyncSlotsPerNode
      integer

      How many concurrent resyncs a single node may take part in. 0, the default, means no limit: the limiter is opt-in and has to be switched on deliberately.

      A resync is the transfer of a volume’s contents over the network into a replica that has no data yet or whose data is stale. It is counted in resync ends: a transfer between two nodes occupies one end on the sending node (reading its disk and pushing to the network) and one on the receiving node (receiving and writing). This parameter caps the number of ends per node, because the bottleneck is the network interface and the disk of that particular node — not the volume, not the replica, and not the cluster as a whole.

      When every node that could send a replica its data is already at the limit, placement of that replica is deferred and retried; nothing is interrupted. A resync already in progress is never aborted, since that would discard everything already transferred.

      Volumes that are still being created are never deferred, but the load of their resyncs is still counted, so that recovery of an existing volume does not oversubscribe a node that volume creation is already using.

      A good value to start from is 2 — the smallest that still lets a node send and receive at the same time. Switching the limit on defers the placement of replicas that would otherwise be placed at once, so expect recovery of a large cluster to take visibly longer.

      Caution! This parameter and the DRBD resync rate ceiling are configured independently. Their product must stay within the throughput of the node’s link.

      Default: 0

      Allowed values: 0 <= X

    • settings.storageClassLabelIgnoredPrefixes
      array of strings

      List of label-key prefixes that MUST NOT be propagated from a ReplicatedStorageClass to the managed Kubernetes StorageClass.

      The controller treats this list as a complement to a built-in (system) list and drops any ReplicatedStorageClass label whose key starts with any prefix from either list.

      Matching is literal strings.HasPrefix (Go semantics): an entry without a trailing / matches by substring, NOT by full label key. For example, team would drop every key starting with team (team, team-id, team.example.com/...). To restrict matching to a specific subdomain, end the entry with / (e.g. argocd.argoproj.io/). To target an exact label key, write the full key and be aware it also matches keys whose name extends it (e.g. app.kubernetes.io/managed-by also drops app.kubernetes.io/managed-by-foo).

      Note that kubernetes.io/ in the system list matches only labels whose key literally starts with kubernetes.io/; reserved subdomains such as topology.kubernetes.io/zone or node.kubernetes.io/* are NOT covered by default — add them here explicitly if your environment requires it.

      The defaults cover labels typically added by GitOps tooling (Argo CD, Flux, Rancher Fleet) so that their reconcilers do not fight the storage controller over labels on the managed StorageClass.

      Default: [ "argocd.argoproj.io/", "kustomize.toolkit.fluxcd.io/", "helm.toolkit.fluxcd.io/", "fleet.cattle.io/" ]