Persistent Volumes
Rackspace Spot provides four out-of-the-box storage classes for persistent volumes, in addition to the ephemeral storage available on worker nodes.
Ephemeral Storage
Spot worker nodes have a certain amount of local storage that can be used as ephemeral storage. Please note that this is intended to be available as temporary storage, and data stored here will be lost when nodes are de-provisioned. Ephemeral storage is also not intended to store large amounts of data, since that space must be shared with containers and for other purposes.
Persistent Volume Storage Classes
Spot provides the following storage classes with their performance characteristics and supported access modes:
| Datacenter | Storage Class | Volume Size | Performance | Access Modes | IOPS | Network | Pricing | 
|---|---|---|---|---|---|---|---|
| Gen-1 | ssd (default) | 5GB - 20GB | Standard SSD | ReadWriteOnce | - | 10Gig | $0.06/GB-mo | 
| Gen-1 | ssd-large | >= 50GB | Standard SSD | ReadWriteOnce | - | 10Gig | $0.06/GB-mo | 
| Gen-1 | sata | 5GB - 20GB | SATA | ReadWriteOnce | - | 10Gig | $0.02/GB-mo | 
| Gen-1 | sata-large | >= 75GB | SATA | ReadWriteOnce | - | 10Gig | $0.02/GB-mo | 
| Gen-2 | ssdv2-performance (default) | >= 10GB | High-performance NVMe | ReadWriteOnce | 10 IOPS/GB | 25Gig | $0.06/GB-mo | 
| Gen-2 | ssdv2 | >= 10GB | Standard NVMe | ReadWriteOnce | 1 IOPS/GB | 25Gig | $0.06/GB-mo | 
Access Mode Support
All storage classes support only ReadWriteOnce access mode:
- ✅ ReadWriteOnce (RWO): Volume can be mounted as read-write by a single node
 - ❌ ReadWriteMany (RWX): Not currently supported
 - ❌ ReadOnlyMany (ROX): Not currently supported
 
Pricing Overview
Persistent volumes are billed monthly based on the provisioned storage size, regardless of actual usage. Billing continues until the PVC is deleted.
Cost Examples
| Storage Type | Volume Size | Monthly Cost | Use Case | 
|---|---|---|---|
sata | 20GB | $0.40/month | Log storage, backups | 
ssd | 15GB | $0.90/month | Application data | 
ssd-large | 100GB | $6.00/month | Database storage | 
ssdv2 | 50GB | $3.00/month | Standard workloads | 
ssdv2-performance | 50GB | $3.00/month | High-performance databases | 
Cost Calculation
- Formula: Volume Size (GB) × Price per GB-month
 - Example: 100GB 
ssd-largevolume = 100GB × $0.06/GB-mo = $6.00/month - Billing: Charged monthly, prorated to the second
 
Cost Optimization Tips:
- Use 
satastorage for cost-effective, less performance-critical data - Choose appropriate volume sizes to avoid overpaying for unused capacity
 - Delete unused PVCs promptly to avoid ongoing charges
 
For complete pricing details, see Rackspace Spot - Pricing.
Default Storage Class
The 'ssd' storage class is the default in gen-1 datacenters, and will be used if you don't specify an alternate storage class in your persistent volume claim. In gen-2 datacenters, ssdv2-performance is the default storage class.
Creating Persistent Volume Claims
Basic PVC Example (Default Storage Class)
Here is an example of a persistent volume claim that uses the default storage class:
apiVersionv1kindPersistentVolumeClaimmetadata  nameapp-storagespec  accessModesReadWriteOnce  # Only supported access mode  resources    requests      storage10Gi  # Minimum 5GB for Gen-1, 10GB for Gen-2Specifying Different Storage Classes
Gen-1 Examples:
SSD Storage (5GB-20GB):
apiVersionv1kindPersistentVolumeClaimmetadata  namesmall-ssd-storagespec  storageClassNamessd  accessModesReadWriteOnce  resources    requests      storage15GiLarge SSD Storage (>=50GB):
apiVersionv1kindPersistentVolumeClaimmetadata  namelarge-ssd-storagespec  storageClassNamessd-large  accessModesReadWriteOnce  resources    requests      storage100GiSATA Storage (Cost-effective):
apiVersionv1kindPersistentVolumeClaimmetadata  namesata-storagespec  storageClassNamesata  accessModesReadWriteOnce  resources    requests      storage20GiGen-2 Examples:
High-Performance Storage (10 IOPS/GB):
apiVersionv1kindPersistentVolumeClaimmetadata  namehigh-perf-storagespec  storageClassNamessdv2-performance  # Default for Gen-2  accessModesReadWriteOnce  resources    requests      storage50Gi  # Will provide 500 IOPSStandard NVMe Storage (1 IOPS/GB):
apiVersionv1kindPersistentVolumeClaimmetadata  namestandard-nvme-storagespec  storageClassNamessdv2  accessModesReadWriteOnce  resources    requests      storage100Gi  # Will provide 100 IOPSVolume Management Operations
Creating Volumes
Volumes are created automatically when you apply a PersistentVolumeClaim. The volume will be provisioned based on your specified storage class and size requirements.
kubectl apply -f my-pvc.yamlkubectl get pvc  # Check provisioning statusChecking Volume Status
Monitor your persistent volume claims and their bound volumes:
# Check PVC statuskubectl get pvc# Get detailed informationkubectl describe pvc <pvc-name># Check bound persistent volumeskubectl get pvAttaching Volumes to Pods
Reference the PVC in your pod or deployment specification:
apiVersionv1kindPodmetadata  nameapp-podspec  containersnameapp    imagenginx    volumeMountsnameapp-storage      mountPath/data  volumesnameapp-storage    persistentVolumeClaim      claimNameapp-storage  # References the PVC nameDeleting Volumes
⚠️ Warning: Deleting a PVC will permanently delete the underlying volume and all data.
# Delete the PVC (this will also delete the underlying volume)kubectl delete pvc <pvc-name># Verify deletionkubectl get pvckubectl get pvTroubleshooting
Common Issues
PVC Stuck in Pending State
If your PVC remains in Pending status:
Check storage class availability: kubectl get storageclass kubectl describe pvc <pvc-name>
Verify volume size requirements:
- Gen-1: Minimum 5GB, avoid 20GB-50GB range
 - Gen-2: Minimum 10GB
 
- Check capacity limits: Some regions have limited capacity for certain storage classes
 
PVC Attachment Issues
Known issue where PVCs may get stuck during attachment. If you encounter this:
Check pod events: kubectl describe pod <pod-name> kubectl get events --sort-by='.lastTimestamp'
Try recycling the affected node:
- In the Spot dashboard, navigate to your Cloudspace
 - Find the affected node and select "Recycle Node"
 - This will terminate and replace the problematic node
 
- Verify volume mount path: Ensure the mount path in your pod spec doesn't conflict with existing directories
 
Performance Issues
If experiencing slow I/O performance:
- Consider upgrading storage class:
 
- Gen-1: Switch from 
satatossdorssd-large - Gen-2: Use 
ssdv2-performancefor higher IOPS 
- Check volume size: Larger volumes typically provide better performance, especially for Gen-2 storage classes
 
Best Practices
Storage Class Selection
- High IOPS workloads: Use 
ssdv2-performance(Gen-2) for databases and high-performance applications - Standard workloads: Use default storage classes (
ssdfor Gen-1,ssdv2-performancefor Gen-2) - Cost optimization: Use 
satastorage classes for less performance-critical data - Large datasets: Use 
ssd-largeorsata-largefor volumes >= 50GB 
Volume Sizing
- Plan for growth: Consider future storage needs when sizing volumes
 - IOPS calculation: For Gen-2 storage, calculate required IOPS (volume size × IOPS per GB)
 - Avoid size gaps:
 - Gen-1: Avoid 20GB-50GB range (not supported)
 - Gen-2: Use >= 10GB for optimal performance
 
Data Protection
- Backup strategy: Implement regular backup procedures for critical data
 - Multi-pod access: If multiple pods need access, ensure they're scheduled on the same node or consider alternative storage solutions
 - Persistent data: Use persistent volumes for data that must survive pod restarts and node failures
 
Regional Considerations
- London Gen-1: Prefer 
ssd-largeandsata-largedue to limited capacity for smaller volumes - Gen-2 regions: Take advantage of improved performance with 
ssdv2-performancestorage class 
Limitations and Constraints
- Access Modes: Only 
ReadWriteOnceis supported across all storage classes - Volume Size Restrictions:
 
- Gen-1: Minimum 5GB, gap between 20GB-50GB not supported
 - Gen-2: Minimum 10GB
 
- Regional Capacity: Some regions may have limited availability for specific storage classes
 - Node Affinity: Volumes can only be accessed by pods on the node where the volume is attached
 - No Volume Expansion: Volume resizing is not currently supported - plan your storage requirements carefully