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.
-
objectspec
-
stringspec.connectionName
Required value
Name of the MindUstorStorageConnection the volumes are provisioned through.
The connection must be in the
Createdphase; otherwise the resource isFailed.Minimum length:
1 -
stringspec.fsTypeFilesystem the volumes are formatted with.
Default:
ext4Allowed values:
ext4,xfs -
stringspec.pool
Required value
Name of the uStor pool the volumes are created in.Minimum length:
1 -
stringspec.reclaimPolicy
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 -
stringspec.volumeBindingMode
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:
ImmediateAllowed values:
Immediate,WaitForFirstConsumer
-
-
objectstatusDisplays the current state of the StorageClass.
-
array of objectsstatus.conditionsThe latest observations of the resource state. Condition type:
Ready.-
stringstatus.conditions.lastTransitionTimeTimestamp of the last status transition for this condition. It is not bumped when only the reason or the message changes.
-
stringstatus.conditions.messageHuman-readable explanation of the current status.
Maximum length:
32768 -
integerstatus.conditions.observedGenerationValue of
metadata.generationthis condition was set against.Allowed values:
0 <= X -
stringstatus.conditions.reasonMachine-readable reason for the current status, suitable for log filtering and alerting.
Length:
1..1024Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
stringstatus.conditions.statusCurrent status of the condition.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typeCondition type.
ReadyisTrueonce the StorageClass is in place and matches the spec, andFalsewhen reconciliation failed. The condition is absent until the controller has processed the resource for the first time.Maximum length:
316Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
integerstatus.observedGenerationValue of
metadata.generationthe controller has last acted on. When it trailsmetadata.generation, the controller has not yet processed the latest spec, and the conditions below still describe the previous one. -
stringstatus.phase
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 -
stringstatus.reasonMirrors 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.
-
objectspec
-
objectspec.controlPlane
Required value
Connection to the uStor management API.-
stringspec.controlPlane.address
Required value
uStor management API endpoint, reachable from the cluster, for examplehttps://ustor-api.example.lab:23004. Immutable: the volumes stay on the uStor cluster they were created on.Pattern:
^https://[^\s/]+(:[0-9]+)?/?$ -
stringspec.controlPlane.caPEM-encoded CA certificate the management API certificate is verified against, for an API whose certificate is not signed by a public CA.
-
stringspec.controlPlane.credentialsSecretName
Required value
Name of a Secret in thed8-csi-mind-ustornamespace with the keysusernameandpasswordof 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 -
booleanspec.controlPlane.skipCertificateValidationSkip verification of the management API certificate. For test installations only.
-
-
objectspec.dataPlane
Required value
Connection of the nodes to the uStor data plane.-
array of stringsspec.dataPlane.etcdAddresses
Required value
Client endpoints of the uStor etcd, for examplehttps://10.101.0.1:23000. Every node that mounts uStor volumes has to reach them.-
stringspec.dataPlane.etcdAddresses.Element of the array
Pattern:
^https?://[^\s/]+:[0-9]+$
-
-
objectspec.dataPlane.nodeSelector
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,CloudStaticandStatictypes. On these nodes, the module replaces/etc/ustor/ustor.confand 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.
-
array of objectsspec.dataPlane.nodeSelector.matchExpressionsmatchExpressions is a list of label selector requirements. The requirements are ANDed.
-
stringspec.dataPlane.nodeSelector.matchExpressions.keykey is the label key that the selector applies to.
-
stringspec.dataPlane.nodeSelector.matchExpressions.operatoroperator represents a key’s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
-
array of stringsspec.dataPlane.nodeSelector.matchExpressions.valuesvalues is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
-
-
objectspec.dataPlane.nodeSelector.matchLabelsmatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is “key”, the operator is “In”, and the values array contains only “value”. The requirements are ANDed.
-
-
stringspec.dataPlane.osdNetwork
Network of the uStor OSDs in CIDR notation, written to
osd_networkof the uStor client configuration.When unset,
osd_networkis left out of the configuration.Pattern:
^[0-9a-fA-F:.]+/[0-9]{1,3}$ -
stringspec.dataPlane.tlsSecretName
Required value
Name of a Secret in thed8-csi-mind-ustornamespace with the uStor client certificates, under the keysca.crt(the uStor CA),client.crtandclient.key(the client certificate), andetcd-client.crtandetcd-client.key(the etcd client certificate). The files go to/etc/ustor/certson the nodes.Minimum length:
1
-
-
-
objectstatusDisplays the current state of the connection.
-
array of objectsstatus.conditionsThe latest observations of the resource state. Condition types:
Ready,Authenticated.-
stringstatus.conditions.lastTransitionTimeTimestamp of the last status transition for this condition. It is not bumped when only the reason or the message changes.
-
stringstatus.conditions.messageHuman-readable explanation of the current status.
Maximum length:
32768 -
integerstatus.conditions.observedGenerationValue of
metadata.generationthis condition was set against.Allowed values:
0 <= X -
stringstatus.conditions.reasonMachine-readable reason for the current status, suitable for log filtering and alerting.
Length:
1..1024Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
stringstatus.conditions.statusCurrent status of the condition.
Allowed values:
True,False,Unknown -
stringstatus.conditions.type
Condition type.
ReadyisTrueonce the connection is in use, both Secrets it refers to hold every key it needs and the management API accepts the login, andFalseotherwise. The condition is absent until the module has evaluated the resource for the first time.Authenticatedis the outcome of the last login to the management API with the credentials fromcontrolPlane.credentialsSecretName, which the module repeats every hour and at once when the Secret changes. The reason ofFalsesays why:UserLocked,PasswordExpired,TemporaryPassword(a password set by an administrator that the user has not changed),UserNotFound,LoginRejectedorUnreachable; the message carries the text of uStor. The condition is absent while the Secret lacks a key.Maximum length:
316Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
integerstatus.observedGenerationValue of
metadata.generationthe status was computed from. When it trailsmetadata.generation, the module has not yet evaluated the latest spec, and the conditions below still describe the previous one. -
stringstatus.phase
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 -
stringstatus.reasonMirrors the message of the Ready condition.
-