The module lifecycle stage: Experimental

The module has requirements for installation

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

MindUstorStorageClass

Scope: Cluster
Version: v1alpha1

Description of a Kubernetes StorageClass for uStor volumes.

The module creates a StorageClass with the same name and keeps it in line with the spec. The labels of the resource are copied to the StorageClass, except the ones whose keys start with a prefix from the storageClassLabelIgnoredPrefixes module parameter or from the built-in list. StorageClasses of the driver cannot be created, changed or deleted by hand; only their annotations can be changed.

  • spec
    object
    • spec.connectionName
      string

      Required value

      Name of the MindUstorStorageConnection the volumes are provisioned through.

      The connection must be in the Created phase; otherwise the resource is Failed.

      Minimum length: 1

    • spec.fsType
      string
      Filesystem the volumes are formatted with.

      Default: ext4

      Allowed values: ext4, xfs

    • spec.pool
      string

      Required value

      Name of the uStor pool the volumes are created in.

      Minimum length: 1

    • spec.reclaimPolicy
      string

      Required value

      Reclaim policy of the StorageClass:

      • Delete: the uStor image is deleted together with the PersistentVolume;
      • Retain: the image is kept when the PersistentVolume is deleted.

      Allowed values: Delete, Retain

    • spec.volumeBindingMode
      string

      Volume binding mode of the StorageClass:

      • Immediate: a volume is created as soon as its PersistentVolumeClaim is;
      • WaitForFirstConsumer: a volume is created once a Pod using it is scheduled.

      In both modes a Pod using the volume is only placed on the nodes that run the node plugin of the driver, those selected by the connection’s dataPlane.nodeSelector: the StorageClass and the PersistentVolume are limited to them by topology.

      Default: Immediate

      Allowed values: Immediate, WaitForFirstConsumer

  • status
    object
    Displays the current state of the StorageClass.
    • status.conditions
      array of objects
      The latest observations of the resource state. Condition type: Ready.
      • status.conditions.lastTransitionTime
        string
        Timestamp of the last status transition for this condition. It is not bumped when only the reason or the message changes.
      • status.conditions.message
        string
        Human-readable explanation of the current status.

        Maximum length: 32768

      • status.conditions.observedGeneration
        integer
        Value of metadata.generation this condition was set against.

        Allowed values: 0 <= X

      • status.conditions.reason
        string
        Machine-readable reason for the current status, suitable for log filtering and alerting.

        Length: 1..1024

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

      • status.conditions.status
        string
        Current status of the condition.

        Allowed values: True, False, Unknown

      • status.conditions.type
        string
        Condition type. Ready is True once the StorageClass is in place and matches the spec, and False when reconciliation failed. The condition is absent until the controller has processed the resource for the first time.

        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.observedGeneration
      integer
      Value of metadata.generation the controller has last acted on. When it trails metadata.generation, the controller has not yet processed the latest spec, and the conditions below still describe the previous one.
    • status.phase
      string

      Summary of the Ready condition:

      • Created: the StorageClass is in place and matches the spec;
      • Failed: the StorageClass is missing or does not match the spec; the details are in reason.

      Allowed values: Failed, Created

    • status.reason
      string
      Mirrors the message of the Ready condition.

MindUstorStorageConnection

Scope: Cluster
Version: v1alpha1

Connection to a uStor cluster: its management API, used by the CSI controller, and its data plane, which the uStor client on the nodes reaches to serve volumes.

The module serves one uStor cluster. When several resources exist, the oldest one is used and the others are reported as Failed.

Do not delete the connection in use while volumes created through it exist. Without a connection, the CSI controller is removed. If another connection exists, it becomes the one in use.

  • spec
    object
    • spec.controlPlane
      object

      Required value

      Connection to the uStor management API.
      • spec.controlPlane.address
        string

        Required value

        uStor management API endpoint, reachable from the cluster, for example https://ustor-api.example.lab:23004. Immutable: the volumes stay on the uStor cluster they were created on.

        Pattern: ^https://[^\s/]+(:[0-9]+)?/?$

      • spec.controlPlane.ca
        string
        PEM-encoded CA certificate the management API certificate is verified against, for an API whose certificate is not signed by a public CA.
      • spec.controlPlane.credentialsSecretName
        string

        Required value

        Name of a Secret in the d8-csi-mind-ustor namespace with the keys username and password of the uStor user the CSI controller manages images as. What uStor requires of this user, and how its password is changed, is described in the module documentation.

        Minimum length: 1

      • spec.controlPlane.skipCertificateValidation
        boolean
        Skip verification of the management API certificate. For test installations only.
    • spec.dataPlane
      object

      Required value

      Connection of the nodes to the uStor data plane.
      • spec.dataPlane.etcdAddresses
        array of strings

        Required value

        Client endpoints of the uStor etcd, for example https://10.101.0.1:23000. Every node that mounts uStor volumes has to reach them.
        • spec.dataPlane.etcdAddresses.Element of the array
          string

          Pattern: ^https?://[^\s/]+:[0-9]+$

      • spec.dataPlane.nodeSelector
        object

        Nodes that reach the uStor data plane.

        The uStor client configuration is placed on these nodes only. When unset, it is placed on all nodes of the CloudEphemeral, CloudPermanent, CloudStatic and Static types. On these nodes, the module replaces /etc/ustor/ustor.conf and the certificates in /etc/ustor/certs. The CSI node plugin runs on those of these nodes that have the uStor client installed.

        Warning. Do not exclude nodes on which uStor volumes are mounted: the CSI node plugin is removed from them, and the volumes cannot be unmounted.

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

        Network of the uStor OSDs in CIDR notation, written to osd_network of the uStor client configuration.

        When unset, osd_network is left out of the configuration.

        Pattern: ^[0-9a-fA-F:.]+/[0-9]{1,3}$

      • spec.dataPlane.tlsSecretName
        string

        Required value

        Name of a Secret in the d8-csi-mind-ustor namespace with the uStor client certificates, under the keys ca.crt (the uStor CA), client.crt and client.key (the client certificate), and etcd-client.crt and etcd-client.key (the etcd client certificate). The files go to /etc/ustor/certs on the nodes.

        Minimum length: 1

  • status
    object
    Displays the current state of the connection.
    • status.conditions
      array of objects
      The latest observations of the resource state. Condition types: Ready, Authenticated.
      • status.conditions.lastTransitionTime
        string
        Timestamp of the last status transition for this condition. It is not bumped when only the reason or the message changes.
      • status.conditions.message
        string
        Human-readable explanation of the current status.

        Maximum length: 32768

      • status.conditions.observedGeneration
        integer
        Value of metadata.generation this condition was set against.

        Allowed values: 0 <= X

      • status.conditions.reason
        string
        Machine-readable reason for the current status, suitable for log filtering and alerting.

        Length: 1..1024

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

      • status.conditions.status
        string
        Current status of the condition.

        Allowed values: True, False, Unknown

      • status.conditions.type
        string

        Condition type. Ready is True once the connection is in use, both Secrets it refers to hold every key it needs and the management API accepts the login, and False otherwise. The condition is absent until the module has evaluated the resource for the first time.

        Authenticated is the outcome of the last login to the management API with the credentials from controlPlane.credentialsSecretName, which the module repeats every hour and at once when the Secret changes. The reason of False says why: UserLocked, PasswordExpired, TemporaryPassword (a password set by an administrator that the user has not changed), UserNotFound, LoginRejected or Unreachable; the message carries the text of uStor. The condition is absent while the Secret lacks a key.

        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.observedGeneration
      integer
      Value of metadata.generation the status was computed from. When it trails metadata.generation, the module has not yet evaluated the latest spec, and the conditions below still describe the previous one.
    • status.phase
      string

      Summary of the Ready condition:

      • Created: the connection is in use and the Secrets it refers to hold every key it needs;
      • Failed: the connection is not in use, a Secret it refers to is missing or lacks keys, or the login to the management API fails; the details are in reason.

      Allowed values: Failed, Created

    • status.reason
      string
      Mirrors the message of the Ready condition.