Use an Azure Disk volume

GKE on Azure automatically deploys the azuredisk-csi-driver to provision and manage Azure Disk volumes in your clusters.

The GKE on Azure Azure Disk CSI Driver version is tied to a Kubernetes cluster version. The driver version is typically the latest available when the GKE version is released. When the cluster is upgraded, the drivers update automatically.

For more information on how GKE on Azure provides persistent storage, see Storage overview.

Default storage classes

GKE on Azure provides the following StorageClass options by default:

Before you begin

Use the default StorageClass

When you create a PersistentVolumeClaim without setting the field spec.storageClassName, GKE on Azure provisions an Azure Standard SSD volume using the default GKE on Azure Azure Disk CSI Driver StorageClass.

The following YAML creates a PersistentVolumeClaim (PVC) named mypvc with a size of 30 gibibytes.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi

Use the premium storage class

When you create a PersistentVolumeClaim and sed the field spec.storageClassName to premium-rwo, GKE on Azure provisions an Azure premium SSD volume.

The following YAML creates a PersistentVolumeClaim (PVC) named mypvc with a size of 30 gibibytes.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  storageClassName: premium-rwo
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi

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 premium-rwo 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: premium-rwo # This field references the existing StorageClass

What's next