Skip to main content

Storage

Platform Applications can request storage through the volumeMounts field on the PlatformApplication CRD. Depending on the source shape, the platform either renders a Kubernetes PersistentVolumeClaim against a StorageClass (persistent options) or an emptyDir (ephemeral).

Picking the Right Storage Type

Four categories cover almost every workload. Pick by access pattern first, then by performance and scale.

CategoryAccess modesUse whenCloud equivalents
Ephemeral storagepod-localScratch space, temp files, build caches — anything that doesn't need to outlive the podemptyDir (no PVC)
Block storageReadWriteOnce (single pod)Databases, single-replica stateful workloads, lowest latency / highest IOPSAzure Managed Disk (default, managed-csi), AWS EBS, GCP Persistent Disk
Network file storageReadWriteManyApplication data that needs full POSIX file-system semantics (locks, permissions), mid-scaleAzure Files (azurefile-*), AWS EFS, GCP Filestore
Object / blob storageReadWriteMany (NFSv3)Large-scale shared content (media, datasets, uploads), multi-pod write sharing, cheap-per-GBAzureBlob (azureblob-*) is the only PVC-backed implementation today. AWS S3 and GCP Cloud Storage aren't natively mountable as PVCs — until/unless platform-curated drivers land, AWS/GCP RWX needs use Network File Storage (EFS / Filestore).

A few rules of thumb:

  • Multi-replica Deployment → must be ReadWriteMany → object or network file storage.
  • Single-replica stateful (database, queue) → block storage gives you the lowest latency.
  • Unsure if you even need persistence → start with ephemeral. If a pod restart wiping the data is a real problem, that's your signal you need a persistent option. Skips the trap of provisioning storage you'll forget about (and pay for) for months.
  • Unsure which persistent option → fall back to the default object/blob class. Cheap, ReadWriteMany-capable, and migrating off later is straightforward.

Find Available StorageClasses

StorageClass is a cluster-scoped Kubernetes resource. List what's available on the cluster you're targeting:

kubectl --context=<your-cluster> get storageclass

Sample output by cloud:

NAME                            PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE      AGE
azureblob-default blob.csi.azure.com Retain Immediate 7d
azurefile-csi file.csi.azure.com Delete Immediate 512d
default (default) disk.csi.azure.com Delete WaitForFirstConsumer 512d
managed-csi disk.csi.azure.com Delete WaitForFirstConsumer 512d

azureblob-default is the platform-curated default for cloud object storage on Azure. The others are stock AKS-shipped classes.

To inspect a specific class (provisioner, parameters, reclaim policy):

kubectl --context=<your-cluster> get storageclass <name> -o yaml

Subsections