Use a custom StorageClass with your workloads
GKE on Azure automatically deploys Azure Disk CSI Driver and Azure File CSI Driver.
The Azure Disk CSI Driver and Azure File CSI Driver versions are tied to an GKE on Azure Kubernetes version. The driver version is typically the latest available when a GKE version is released. When the cluster is upgraded, the drivers update automatically.
Use a custom StorageClass
You can create additional StorageClasses for volumes or use Container Storage Interface (CSI) Drivers.
Choose if you are using an Azure disk volume or another CSI driver.
Azure Disk Volume
You can create your own custom StorageClass that specifies an Azure Disk volume type, file system type, and other parameters. You can find additional StorageClass parameters on the GKE on Azure Azure Disk CSI Driver GitHub page.
To configure a custom StorageClass, copy the following YAML manifest into a file named
my-custom-class.yaml
.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: disk.csi.azure.com volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true
Replace CLASS_NAME with the name of your new StorageClass.
For example, the following YAML creates a new StorageClass that provisions volumes in a specific storage account and applies a tag of
group=dev
to each new volume.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-class provisioner: disk.csi.azure.com volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: storageAccount: my-storage-account tags: group=dev
CSI Driver
You can specify a different CSI driver in the
provisioner
field.To create a StorageClass with another CSI driver, you can use the example YAML below.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME volumeBindingMode: WaitForFirstConsumer parameters: ...
Replace the following values:
- CLASS_NAME: the name of the StorageClass (for example,
my-custom-class
). - CSI_DRIVER_NAME: the name of the CSI driver (for example,
csi.example.com
).
Next, configure subfields under
parameters
according to your CSI driver's documentation.- CLASS_NAME: the name of the StorageClass (for example,
Apply the YAML to your cluster.
kubectl apply -f my-custom-class.yaml
Create a PersistentVolumeClaim with a custom StorageClass.
After you create a custom StorageClass, you can specify it in a PVC. The following example creates a PVC named
my-pvc
that references the StorageClassmy-custom-class
.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageclassName: my-custom-class
Set the default StorageClass
GKE on Azure uses a default StorageClass called standard-rwo
that
provisions standard SSD Azure disks with
LRS. You can change the default to another StorageClass.
To change the default StorageClass:
Update the
is-default-class
annotation for thestandard-rwo
StorageClass withkubectl patch
.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
Create a new StorageClass that has the annotation
storageclass.kubernetes.io/is-default-class: true
.The following example StorageClass uses the
disk.csi.azure.com
driver. To install another storage driver, see Installing a CSI driver.Copy the following YAML into a file named
my-custom-class.yaml
.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME annotations: storageclass.kubernetes.io/is-default-class: true provisioner: disk.csi.azure.com volumeBindingMode: WaitForFirstConsumer parameters: skuName: VOLUME_TYPE
Replace the following:
- CLASS_NAME: the name of your new StorageClass.
- VOLUME_TYPE: the Azure Disk volume type that the StorageClass creates.
For example, the following YAML creates a new default StorageClass that provisions Premium SSD Azure Disk volumes.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-default-class annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: disk.csi.azure.com volumeBindingMode: WaitForFirstConsumer parameters: skuName: Premium_LRS
Apply the new custom class to your cluster.
kubectl apply -f my-custom-class.yaml
After applying this manifest, GKE on Azure uses the
my-custom-default-class
StorageClass for new storage requests.
Reference the StorageClass in a StatefulSet
To use your new StorageClass, you can reference it in a StatefulSet's
volumeClaimTemplates
.
When you reference a StorageClass in a StatefulSet's volumeClaimTemplates
specification, Kubernetes provides stable storage using PersistentVolumes (PVs).
Kubernetes calls the provisioner defined in the StorageClass to create a new
storage volume. After the volume is provisioned, Kubernetes automatically
creates a PV.
The following StatefulSet references the my-custom-class
StorageClass and
provisions a 1 gibibyte volume:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: registry.k8s.io/nginx-slim:0.8
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates: # This is the specification in which you reference the StorageClass
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
storageClassName: my-custom-class # This field references the existing StorageClass
What's next
Read the documentation for the Azure Disk CSI driver or the Azure File CSI driver.
Learn about Persistent volumes in GKE.
Install Storage drivers on your GKE on Azure cluster.
Deploy your first workload with the Quickstart.