Managing storage classes
Storage class (StorageClass
) allows administrators to divide the stores they provision into classes with defined parameters.
Managed Service for Kubernetes automatically provides two storage classes, yc-network-hdd
and yc-network-ssd
, with the following parameters:
- Volume Binding Mode:
WaitForFirstConsumer
. - Reclaim Policy:
Delete
. - The default class is
yc-network-hdd
.
These classes only let you use PersistentVolumeClaims
and PersistentVolumes
in access mode ReadWriteOnce
.
Classes differ based on the type of disk created:
yc-network-hdd
uses a standard network drive (network-hdd
).yc-network-ssd
uses a fast network drive (network-ssd
).
You can create your own storage class as well as change the default storage class.
Note
yc-network-nvme
is deprecated. Use yc-network-ssd
instead.
Create a storage class
-
Save the storage class creation specification in the
my-sc-hdd.yaml
YAML file:Learn more about the storage class creation specification format.
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: my-sc-hdd provisioner: disk-csi-driver.mks.ycloud.io volumeBindingMode: WaitForFirstConsumer parameters: type: network-hdd csi.storage.k8s.io/fstype: ext4 allowVolumeExpansion: false reclaimPolicy: Retain
-
Run the command:
kubectl create -f my-sc-hdd.yaml
Result:
storageclass.storage.k8s.io/my-sc-hdd created
-
Check that the storage class was created:
kubectl get storageclass
Result:
NAME PROVISIONER AGE my-sc-hdd disk-csi-driver.mks.ycloud.io 76s yc-network-hdd (default) disk-csi-driver.mks.ycloud.io 16m yc-network-ssd disk-csi-driver.mks.ycloud.io 16m
Specification format for creating a storage class
Each StorageClass
object contains the provisioner
, parameters
, and reclaimPolicy
parameters that are used for the dynamic provisioning of PersistentVolumes
.
Acceptable parameter values:
provisioner
:disk-csi-driver.mks.ycloud.io
.parameters
type
:network-hdd
ornetwork-ssd
.csi.storage.k8s.io/fstype
:ext2
,ext3
, orext4
.
reclaimPolicy
:Retain
orDelete
.
YAML file structure:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: <storage class name> # Used for accessing the storage class.
provisioner: <provisioner name>
volumeBindingMode: WaitForFirstConsumer
parameters: # Storage class parameters.
type: <disk type>
csi.storage.k8s.io/fstype: <file system type>
allowVolumeExpansion: false
reclaimPolicy: <reclaim policy>
Change the default storage class
-
Look up which storage class is assigned by default.
default
is shown next to its name in parentheses.kubectl get storageclass NAME PROVISIONER AGE my-sc-hdd disk-csi-driver.mks.ycloud.io 76s yc-network-hdd (default) disk-csi-driver.mks.ycloud.io 16m yc-network-ssd disk-csi-driver.mks.ycloud.io 16m
-
Change the
storageclass.kubernetes.io/is-default-class
parameter of the default storage class tofalse
, to remove its status as the default class:kubectl patch storageclass yc-network-hdd \ -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
-
Check that
yc-network-hdd
is no longer the default storage class:kubectl get storageclass NAME PROVISIONER AGE my-sc-hdd disk-csi-driver.mks.ycloud.io 2m36s yc-network-hdd disk-csi-driver.mks.ycloud.io 17m yc-network-ssd disk-csi-driver.mks.ycloud.io 17m
-
Specify a new default storage class, such as
my-sc-hdd
:kubectl patch storageclass my-sc-hdd \ -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
-
Check that
my-sc-hdd
is the default storage class:kubectl get storageclass NAME PROVISIONER AGE my-sc-hdd (default) disk-csi-driver.mks.ycloud.io 4m21s yc-network-hdd disk-csi-driver.mks.ycloud.io 19m yc-network-ssd disk-csi-driver.mks.ycloud.io 19m