Storage Analysis
Overview
Storage Analysis provides visibility into persistent volume usage and costs:
- Storage costs - Monthly spending on persistent volumes
- Utilization tracking - How much of each volume is actually used
- Volume status - Bound, Released, Available, or Failed volumes
- Storage classes - Distribution across gp2, gp3, io1, etc.
- Right-sizing opportunities - Volumes with low utilization
Access: Select cluster (Clusters page or sidebar dropdown) → Storage
Why Analyze Storage? Storage costs are a significant portion of Kubernetes spending with common waste sources:
- Released volumes - Volumes no longer bound to claims but still incurring costs
- Low utilization - Volumes with low capacity usage
- Expensive storage classes - Using premium storage when standard would suffice
Storage Metrics
Summary Cards:
- Total Storage: Aggregate capacity across all volumes in GB
- Used Storage: Actual data stored across all volumes
- Avg Utilization: Average usage percentage across volumes
- Total Cost: Monthly cost based on hourly rates
- Volume Count: Number of persistent volumes
Timeframe Selection:
- Current (real-time)
- Historical data
Volume List
Table Columns:
- Name - PV name (truncated if >30 chars)
- Storage Class - gp2, gp3, io1, etc.
- Namespace - Bound namespace (or "Not bound")
- Claim - PVC name (or "Not bound")
- Size - Allocated capacity in GB or MB
- Status - Bound, Released, Available, Failed
- Cost - Monthly and hourly rates
Status Types:
- Bound - Volume attached to a PVC and in use
- Released - Volume was bound but PVC deleted (still costing money)
- Available - Volume created but never bound
- Failed - Volume in error state
Filtering & Sorting
Available Filters:
- Search by name, storage class, PVC, or namespace
- Filter by storage class (gp2, gp3, io1, etc.)
- Filter by status (Bound, Released, Available, Failed)
- Filter by namespace
Sorting Options:
- By size (allocated bytes)
- By cost (hourly rate)
- By usage (utilization percentage)
- Ascending or descending order
Clear Filters: Shows active filter count with "Clear filters (N)" button
Storage Classes
Common Storage Classes:
gp3 (General Purpose SSD):
- Cost: ~$0.08/GB/month
- Use case: General workloads, recommended default
gp2 (Legacy General Purpose SSD):
- Cost: ~$0.10/GB/month
- 25% more expensive than gp3
- Recommendation: Migrate to gp3
io1 (High IOPS SSD):
- Cost: ~$0.125/GB/month + IOPS charges
- Use case: High performance databases
- Check if baseline gp3 (3K-16K IOPS) is sufficient
sc1 (Cold HDD):
- Cost: ~$0.025/GB/month
- Use case: Infrequent access, backups
Cost Optimization Strategies
1. Migrate gp2 → gp3:
- Identify volumes using legacy gp2
- Save 20% by migrating to gp3
- No performance impact (gp3 often faster)
2. Review io1 Usage:
- Check actual IOPS requirements
- Consider downgrading to gp3 if <16K IOPS needed
- Potential 20-50% cost reduction per volume
3. Right-size Low Utilization Volumes:
- Focus on volumes with low capacity usage
- Consider workload growth patterns before resizing
- Note: Kubernetes doesn't support shrinking volumes directly
4. Clean Up Released Volumes:
- Released status = paying for unused storage
- Review reclaim policy before deletion
- Check if data backup exists