Explanation
Why the waste happens and who it affects.
When applications are removed or reconfigured, these resources may be left behind if not explicitly cleaned up. Over time, they accumulate as orphaned resources - not referenced by any live workload.
Some of these objects, like PVCs or Services of type LoadBalancer, result in active infrastructure that continues to incur cloud charges (e.g., retained EBS volumes or unused Elastic Load Balancers). Even lightweight objects like ConfigMaps and Secrets bloat the API server's object store, causing latency and impacting deployments/scaling, clutter the control plane, and complicate configuration management. This issue is especially common during cluster upgrades, namespace decommissioning, and workload migrations.
Billing model
The pricing dimensions that drive this cost.
EKS clusters incur cost through the underlying compute (e.g., EC2 or Fargate), attached storage (e.g., EBS volumes via Persistent Volume Claims), and any provisioned networking resources (e.g., Load Balancers from Services).
While Kubernetes control plane costs are fixed, orphaned objects such as ConfigMaps, Secrets, Services, or PVCs can indirectly consume billable cloud infrastructure - especially when Services create load balancers or PVCs keep EBS volumes provisioned. Whether deleting a PVC removes its EBS volume depends on the PersistentVolume reclaim policy: with Delete (the default for dynamically provisioned volumes) the volume is removed, while Retain leaves a Released PV and a billable EBS volume that must be cleaned up separately. These costs persist even if the associated workloads have been deleted.
How to detect
6 checks to find it in your estate.
- Review the cluster for Kubernetes objects not referenced by any current Deployment, StatefulSet, or Pod
- Identify Persistent Volume Claims that are not mounted by any active workload
- Check for Services that no longer correspond to live endpoints or backing workloads
- Evaluate whether orphaned Services are still fronting AWS Load Balancers
- Identify ConfigMaps or Secrets with old creation timestamps and no recent pod mounts
- Confirm that none of the orphaned resources are linked to active CronJobs, Jobs, or custom controllers
How to fix
6 ways to remove the waste.
- Delete orphaned Persistent Volume Claims to release underlying storage (e.g., EBS volumes), then check the reclaim policy and remove any Released PVs and EBS volumes left behind by a Retain policy
- Remove unused Services, especially those of type LoadBalancer, to eliminate unnecessary networking charges
- Clean up ConfigMaps and Secrets that are no longer referenced by any active workload
- Implement tagging/labeling standards for all workloads to simplify orphan detection
- Incorporate automated cleanup routines into CI/CD pipelines or periodic governance processes
- Schedule periodic audits after cluster upgrades or namespace deletions to prevent accumulation
Documentation
Vendor references for pricing and configuration.