Kubernetes persistent volume cost is the cost of the cloud disk the CSI driver creates for it: gigabytes per month by disk type, plus provisioned IOPS and throughput where the type bills them separately, and snapshots by stored volume. Kubernetes itself has no storage price; the storage class decides which disk type is created, and the reclaim policy whether it disappears with the claim or keeps running. This page describes the mapping from persistent volume to disk, from storage class to type, why orphaned volumes are a cluster's most common storage waste, what volume snapshots cost and what a CSI driver changes. The three providers' disk types side by side are under block, object and file storage.

How it works

A pod binds a persistent volume claim (PVC), the claim binds a persistent volume (PV), and behind the PV, with dynamic provisioning, stands a provider disk the CSI driver created with the parameters of the storage class: type, size, redundancy, for some types IOPS and throughput. The provider bills the disk from its creation, by provisioned size, not by space used, and regardless of whether a pod has it mounted right now. A 100 GiB PVC costs 100 GiB even with 5 GiB written.

The storage class's reclaim policy sets what happens when the claim is deleted. Delete, the default of the built-in classes at all three providers, deletes PV and disk. Retain leaves both: the PV enters the state Released, the disk keeps running and keeps costing until someone deletes it by hand. Retain protects data from an accidental deletion and is at the same time the origin of most orphaned volumes. A second origin is clusters deleted while their disks stayed (non-production clusters), and StatefulSets whose PVCs survive a scale-down because Kubernetes does not delete them along.

the claim is deletedDeleteRetainA pod binds a claimThe claim binds a volume; the CSIdriver creates a provider disk withthe storage class's type, sizeand redundancyBilled from creation byprovisioned size, mountedor notReclaim policy?Volume and disk goneThe volume Released, the diskrunning and costing untilsomeone deletes it by hand
A claim becomes a disk billed by provisioned size from creation, and the reclaim policy decides whether the disk dies with the claim or keeps costing as an orphan

A snapshot of a volume is created through the CSI objects VolumeSnapshot and VolumeSnapshotClass as a provider snapshot and billed like one: by stored volume per month, incremental against the previous snapshot at AWS and Azure, with the snapshot class's own reclaim policy. A backup tool that takes daily snapshots and never deletes builds a line that grows with every day and belongs to no running pod.

AWS

The EBS CSI driver creates EBS volumes; the storage class names the type (gp3, gp2, io2, st1, sc1) and, for gp3 and io2, optional IOPS and throughput billed separately above the baseline. In the Cost and Usage Report the volumes sit under Amazon EC2 with usage types such as EUC1-EBS:VolumeUsage.gp3 and snapshots under EUC1-EBS:SnapshotUsage; the prices per type and the dimensions are explained under Amazon EBS.

Azure

The built-in AKS classes: managed-csi (Standard SSD; the class default is the same), managed-csi-premium (Premium SSD) and, from Kubernetes 1.35, managed-csi-premium-v2, plus azurefile-csi for file shares; all with reclaim policy Delete. In clusters across several availability zones the built-in classes create zone-redundant disks (ZRS) since Kubernetes 1.29, which cost more than locally redundant ones (LRS); LRS needs a class of your own.

Google Cloud

GKE creates a default class that provisions balanced persistent disks (standard-rwo), with Delete as the default policy; Retain leaves PV and disk when the claim is deleted. Autopilot pods bind disks the same way, and the disk is billed beside the pod requests.

What it means for your cost

Storage is the cluster line that scales with the cluster least: disks stay when pods go, and snapshots stay when disks go. Three things are therefore decided. The classes: which types teams may request and which is the default, because the default decides what every StatefulSet gets without saying; a default class with a premium disk makes every test cluster expensive. The reclaim policy: Delete for everything restorable from a backup, Retain only where losing a disk would be losing the data, and then with a process that reviews Released volumes regularly. The snapshots: a retention period per class that the tool enforces.

yesno: losing the diskis losing the dataThe classes: which types teamsmay request, and which is thedefault every StatefulSet getswithout sayingRestorable froma backup?Reclaim policy DeleteRetain, with a regular reviewof Released volumesSnapshots: a retention period,so the line stops growingwith every day
Three decisions set the storage line: the default class, the reclaim policy per class, and a retention period for snapshots

In billing data a disk sits under the provider's storage service with its resource ID, not under the cluster and not with the pod, whose price what a pod costs derives from the node; the link to cluster and namespace runs through the tags the CSI driver sets and the PVC data from the cluster (Kubernetes cost data). A disk without a pod cannot be told from one with a pod in billing data; only the reconciliation with the cluster's PVs shows the orphans (idle and orphaned resources). The choice of type is a lever of storage optimisation: the same claim on gp3 instead of gp2 costs less with no pod changed.

Where it goes wrong

  • Released volumes keep running. Symptom: a cluster's storage line does not fall although workloads were removed. Cause: the storage class has Retain; PV and disk survive the claim's deletion.
  • StatefulSet scaled down, PVCs stay. Symptom: a StatefulSet with three replicas has ten PVCs. Cause: Kubernetes does not delete a StatefulSet's PVCs on scale-down; each stays a paid disk.
  • Cluster deleted, disks not. Symptom: an account shows disks without an instance. Cause: the volumes belonged to a deleted cluster; the provider does not delete them along.
  • Snapshots without retention. Symptom: the snapshot line grows linearly with time. Cause: daily snapshots without a retention rule; snapshots of deleted volumes stay too.
  • Default class too expensive. Symptom: every namespace pays for premium storage. Cause: the default class provisions the expensive type, and claims name no class.
  • Zone redundancy unnoticed. Symptom: an AKS cluster's disks cost more than the class's price suggests. Cause: in multi-zone clusters the built-in classes create ZRS disks.
  • Size instead of usage. Symptom: volumes are 5 percent full and fully billed. Cause: disks cost by provisioned size; a generous claim stays generous.

Example

List prices read on 2026-10-21 from the AWS price list for Frankfurt (eu-central-1): gp3 USD 0.0952 and gp2 USD 0.119 per GB-month, EBS snapshots USD 0.054 per GB-month.

A 100 GiB PVC on gp3 costs 100 × 0.0952 = USD 9.52 a month; on gp2 USD 11.90, USD 2.38 more for the same size. Twenty orphaned 50 GiB volumes left behind by Retain cost 20 × 50 × 0.0952 = USD 95.20 a month for data no pod reads. A daily snapshot backup of the 100 GiB volume with 5 GiB of change per day and 30 days of retention keeps one full and 29 incremental snapshots, 100 + 29 × 5 = 245 GiB, so 245 × 0.054 = USD 13.23 a month; without a retention period, 150 GiB and USD 8.10 are added every month.

Sources

Read on 2026-10-21. Kubernetes persistent volumes, storage classes and volume snapshots, AWS Price List bulk API, offer AmazonEC2, eu-central-1, AWS EBS CSI driver, Microsoft storage in AKS, Google Cloud persistent volumes in GKE.