Persistent volume cost discipline is the practice of paying only for the Kubernetes block storage you actually need, in the right performance tier, with nothing left billing after the workload is gone. The trap is that cloud block storage charges for provisioned capacity, so a 500 GB volume holding 40 GB still costs the full 500 GB every hour, and dynamic provisioning plus a Retain reclaim policy makes it trivial to leave disks running with no pod attached. The four levers are right sizing volumes to real usage, reclaiming orphaned and released volumes, choosing the storage class that fits the workload rather than defaulting to premium, and governing snapshots so backups do not silently outgrow the data they protect. These apply across AWS EBS, Azure managed disks, GCP persistent disks, and OCI block volumes, with the same logic and different knobs.
Storage rarely tops a cost review because no single volume is large, but the aggregate of forgotten and over sized disks across a busy cluster is consistently one of the easiest wins available. Here is where it leaks and how to close it.
Why does persistent volume spend leak?
Three mechanics combine. First, block storage bills on provisioned size, so capacity you requested but never filled is pure waste, charged whether the volume holds one gigabyte or its full allocation. Second, dynamic provisioning makes volumes effortless to create, which means teams request generous sizes to be safe and never revisit them. Third, the reclaim policy decides what happens when a claim is deleted: a Retain policy keeps the underlying cloud disk alive and billing, by design, so a deleted namespace can leave a trail of released volumes that nothing in the cluster will ever clean up. None of these announce themselves, which is exactly why the line grows unnoticed.
How do you right size a persistent volume?
Compare provisioned capacity against actual used capacity for every PersistentVolumeClaim, then look at the trend, not a single reading. A volume provisioned at 500 GB and steady at 40 GB for months is over provisioned by an order of magnitude. Because most cloud block volumes can grow but not shrink in place, the practical fix is to set new claims to a realistic size with headroom for growth, enable volume expansion so they can grow on demand, and migrate the worst offenders to a correctly sized volume rather than leaving the original. Build the target size from observed usage plus a defensible buffer, not from a round number someone picked once.
How do you find and reclaim orphaned volumes?
Reconcile the block volumes that exist in your cloud account against the claims actually bound in the cluster. Anything billing with no matching active claim is a candidate: released volumes left behind by a Retain policy, disks from deleted environments, and snapshots whose parent volume no longer exists. The inventory lives in the billing data each provider already gives you, the AWS Cost and Usage Report, Azure cost exports, GCP billing detail, and the OCI Cost Analysis console, so the reconciliation is a data join rather than a guess. Once found, the governance fix is to default new claims to a Delete reclaim policy where data does not need to survive the claim, reserve Retain for genuinely durable data, and run the reconciliation on a cadence so orphans never accumulate again.
A European SaaS company ran several busy clusters where every PersistentVolumeClaim defaulted to a generous size and a Retain reclaim policy. Reconciling provisioned against used capacity showed average utilization well under a third, and matching cloud disks against bound claims surfaced a large set of released volumes and parentless snapshots from retired environments. Right sizing new claims to observed usage, migrating gp2 volumes to gp3, deleting the orphans, and switching non durable claims to a Delete policy cut the block storage line by roughly half with no impact on running workloads. The wider program of rightsizing, waste removal, and storage tiering contributed to an estate that finished materially lighter. Figures are verified against billing data and anonymised.
Which storage class should a workload use?
The default storage class is rarely the cheapest fit. On AWS, gp3 decouples throughput and IOPS from capacity and is generally cheaper than gp2 for equal performance, so a gp2 to gp3 migration is a standing win, and io2 should be reserved for workloads that truly need guaranteed high IOPS. The same decision exists on every cloud: Azure managed disk tiers from standard HDD through premium SSD and beyond, GCP persistent disk types from standard through balanced and SSD, and OCI block volume performance tiers from lower cost through balanced and higher performance. The discipline is identical: match the tier to the workload's real IOPS and throughput needs, and stop paying premium rates for volumes that do log storage or hold cold data.
How should snapshots be governed?
Snapshots are the part of storage spend that grows in the dark. Backup automation creates them on a schedule, retention rarely gets revisited, and the total quietly compounds because each snapshot is its own billed object. Set explicit retention policies matched to the actual recovery requirement, expire snapshots automatically rather than by memory, and reconcile snapshot inventory against the volumes still in use so backups of deleted workloads do not survive indefinitely. The goal is not fewer backups; it is backups sized to the recovery you actually need, with nothing accumulating beyond it.
Frequently asked questions
Why is Kubernetes persistent volume spend so easy to lose?
How do I find orphaned persistent volumes?
Should I use gp3 or gp2 for Kubernetes volumes?
Put your storage line on a diet
We right size persistent volumes, reclaim orphans, tune storage classes, and govern snapshots across AWS, Azure, GCP, and OCI, with zero provider commissions and no change that risks production. Our guarantee: we reduce your cloud spend or we reimburse our service fee. Pricing is either a Fixed Fee scoped up front or Gainshare, a share of verified savings with no retainer and no risk.
Put a defensible number on your cloud spend.
No provider in the room, no published price list. Tell us your footprint and we will scope the savings against your billing data — we reduce your cloud spend or we reimburse our service fee.
The Cloud Spend Navigator: what changed in cloud pricing, commitments, and FinOps — no vendor spin.