2 min read | by Jordi Prats
The default StorageClass is defined using the storageclass.kubernetes.io/is-default-class annotation as follows:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
annotations:
storageclass.kubernetes.io/is-default-class: "true"
(...)
To be able to change it we will have to removed from the current default and set it to the new one.
Let's assume the current default is gp2 and we want to set gp3 as the default instead:
$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
gp2 (default) ebs.csi.aws.com Delete WaitForFirstConsumer true 2d7h
gp3 ebs.csi.aws.com Delete WaitForFirstConsumer true 2d7h
We can use kubectl patch to set the annotation on the current default to false like this:
kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
Then we just need to add or change the annotation on the StorageClass we want to set as default. That's something we can also achieve using kubectl patch:
kubectl patch storageclass gp3 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
If we check again the kubectl get sc we will be able to see that we have successfully changed the default StorageClass:
$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
gp2 ebs.csi.aws.com Delete WaitForFirstConsumer true 2d7h
gp3 (default) ebs.csi.aws.com Delete WaitForFirstConsumer true 2d7h
Posted on 20/09/2021