Skip to main content
We’ll step back and look at how storage works from a Kubernetes perspective (the same concepts apply in OpenShift). Kubernetes uses a plugin architecture called the Container Storage Interface (CSI) to allow the cluster to talk to external storage providers such as Azure Storage (Disks/Files), AWS (EBS/EFS), NetApp, and others. As long as a vendor provides a CSI driver, Kubernetes can provision and attach storage through that driver. The CSI spec: https://kubernetes.io/docs/concepts/storage/container-storage-interface/
The image shows logos for AWS S3, NetApp and Microsoft Azure on the left. A double-headed arrow connects them to an orange abstract company/service logo on the right.
How it works conceptually
  • The CSI driver is the plugin that actually talks to the external storage backend.
  • A StorageClass is a Kubernetes object that describes provisioning behavior and references the CSI provisioner.
  • PersistentVolumes (PVs) represent actual storage resources. PVs may be created statically by an administrator or dynamically by a StorageClass/provisioner.
  • PersistentVolumeClaims (PVCs) are requests for storage from pods. A PVC specifies size, access modes, and optionally a StorageClass. When dynamic provisioning is enabled, the StorageClass/provisioner creates a PV that satisfies the PVC.
Quick provisioning paths
  • Dynamic provisioning: PVC → StorageClass → CSI provisioner → provision storage → create PV → bind to PVC.
  • Static provisioning: Admin creates PV → PVC binds to existing PV.
The term “persistent storage” in OpenShift maps directly to Kubernetes PersistentVolumes. The StorageClass, PersistentVolume, and PersistentVolumeClaim objects behave the same in both platforms.
Kubernetes storage objects (at-a-glance) Example: StorageClass + PVC + Deployment using Azure Files CSI
  • The StorageClass references the Azure Files CSI provisioner (file.csi.azure.com) and sets mount options and parameters (for example, SKU).
  • The PVC requests storage from that StorageClass.
  • The Deployment mounts the resulting volume into nginx containers.
Manifest explanation (component-by-component)
  • StorageClass (azurefile-csi)
    • provisioner: file.csi.azure.com points to the Azure Files CSI driver.
    • allowVolumeExpansion: true enables resizing the volume after provisioning.
    • mountOptions and parameters such as skuName: Premium_LRS control how the Azure Files share is created and mounted.
  • PersistentVolumeClaim (azurefile)
    • Requests 10Gi with ReadWriteMany access and explicitly references the azurefile-csi StorageClass.
    • When the PVC is created, the StorageClass/provisioner dynamically provisions a backing PV and binds it to the PVC.
  • Deployment (nginxdeployment)
    • Mounts the bound PVC at /mnt/azure in each nginx pod using volumeMounts and volumes.
    • The claimName must match the PVC name.
Resources and further reading This dynamic provisioning flow is identical in OpenShift: the cluster uses a StorageClass to talk to a CSI provisioner, which provisions storage and returns a PersistentVolume that satisfies the PersistentVolumeClaim — your pods then mount that volume.

Watch Video