...
spec:
driverConfig:
driverType: ''
logLevel: Normal
managementState: Managed
observedConfig: null
operatorLogLevel: Normal
storageClassState: Unmanaged (1)
...
Managing the default storage class allows you to accomplish several different objectives:
Enforcing static provisioning by disabling dynamic provisioning.
When you have other preferred storage classes, preventing the storage operator from re-creating the initial default storage class.
Renaming, or otherwise changing, the default storage class
To accomplish these objectives, you change the setting for the spec.storageClassState
field in the ClusterCSIDriver
object. The possible settings for this field are:
Managed: (Default) The Container Storage Interface (CSI) operator is actively managing its default storage class, so that most manual changes made by a cluster administrator to the default storage class are removed, and the default storage class is continuously re-created if you attempt to manually delete it.
Unmanaged: You can modify the default storage class. The CSI operator is not actively managing storage classes, so that it is not reconciling the default storage class it creates automatically.
Removed: The CSI operators deletes the default storage class.
Access to the Red Hat OpenShift Service on AWS web console.
Access to the cluster with cluster-admin privileges.
To manage the default storage class using the web console:
Log in to the web console.
Click Administration > CustomResourceDefinitions.
On the CustomResourceDefinitions page, type clustercsidriver
to find the ClusterCSIDriver
object.
Click ClusterCSIDriver, and then click the Instances tab.
Click the name of the desired instance, and then click the YAML tab.
Add the spec.storageClassState
field with a value of Managed
, Unmanaged
, or Removed
.
...
spec:
driverConfig:
driverType: ''
logLevel: Normal
managementState: Managed
observedConfig: null
operatorLogLevel: Normal
storageClassState: Unmanaged (1)
...
1 | spec.storageClassState field set to "Unmanaged" |
Click Save.
Access to the cluster with cluster-admin privileges.
To manage the storage class using the CLI, run the following command:
oc patch clustercsidriver $DRIVERNAME --type=merge -p "{\"spec\":{\"storageClassState\":\"${STATE}\"}}" (1)
1 | Where ${STATE} is "Removed" or "Managed" or "Unmanaged".
Where |
Multiple default storage classes can occur if you mark a non-default storage class as default and do not unset the existing default storage class, or you create a default storage class when a default storage class is already present. With multiple default storage classes present, any persistent volume claim (PVC) requesting the default storage class (pvc.spec.storageClassName
=nil) gets the most recently created default storage class, regardless of the default status of that storage class, and the administrator receives an alert in the alerts dashboard that there are multiple default storage classes, MultipleDefaultStorageClasses
.
There are two possible scenarios where PVCs can attempt to use a non-existent default storage class:
An administrator removes the default storage class or marks it as non-default, and then a user creates a PVC requesting the default storage class.
During installation, the installer creates a PVC requesting the default storage class, which has not yet been created.
In the preceding scenarios, PVCs remain in the pending state indefinitely. To resolve this situation, create a default storage class or declare one of the existing storage classes as the default. As soon as the default storage class is created or declared, the PVCs get the new default storage class. If possible, the PVCs eventually bind to statically or dynamically provisioned PVs as usual, and move out of the pending state.
Use the following procedure to change the default storage class.
For example, if you have two defined storage classes, gp3
and standard
, and you want to change the default storage class from gp3
to standard
.
Access to the cluster with cluster-admin privileges.
To change the default storage class:
List the storage classes:
$ oc get storageclass
NAME TYPE
gp3 (default) kubernetes.io/aws-ebs (1)
standard kubernetes.io/aws-ebs
1 | (default) indicates the default storage class. |
Make the desired storage class the default.
For the desired storage class, set the storageclass.kubernetes.io/is-default-class
annotation to true
by running the following command:
$ oc patch storageclass standard -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
You can have multiple default storage classes for a short time. However, you should ensure that only one default storage class exists eventually. With multiple default storage classes present, any persistent volume claim (PVC) requesting the default storage class ( |
Remove the default storage class setting from the old default storage class.
For the old default storage class, change the value of the storageclass.kubernetes.io/is-default-class
annotation to false
by running the following command:
$ oc patch storageclass gp3 -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'
Verify the changes:
$ oc get storageclass
NAME TYPE
gp3 kubernetes.io/aws-ebs
standard (default) kubernetes.io/aws-ebs