Skip to content

Storage Classes for Helm Charts

Storage Classes

Storage classes in Kubernetes define the types of storage available for dynamic provisioning of persistent volumes. When using Helm charts with Omnistrate, you can leverage dynamic provisioning to create volumes of different types based on your application's requirements.

Omnistrate pre-provisions a defined set of storage classes for persistent volumes across different cloud providers, ensuring consistent storage options and optimal performance for your Helm deployments.

When using Compose specifications using storage classes directly is not required.

Pre-Provisioned Storage Classes

Omnistrate automatically provisions the following storage classes across different cloud providers:

AWS Storage Classes

Storage Class Type Description Use Cases
gp3 AWS EBS GP3 General Purpose SSD with configurable IOPS and throughput General workloads, databases
gp3-immediate AWS EBS GP3 General Purpose SSD with configurable IOPS and throughput General workloads, databases
gp2 AWS EBS GP2 General Purpose SSD with baseline performance Legacy applications, development
io2 AWS EBS IO2 Latest generation Provisioned IOPS SSD Mission-critical applications requiring highest performance
io2-immediate AWS EBS IO2 Latest generation Provisioned IOPS SSD Mission-critical applications requiring highest performance

Storage Class Configuration:

  • Volume Binding Mode: WaitForFirstConsumer (default), Immediate (for -immediate variants)
  • Reclaim Policy: Delete - volumes are automatically deleted when deployment instances are deleted
  • Volume Expansion: Enabled for all AWS storage classes
  • Encryption: All volumes are encrypted
  • Default: gp3

GCP Storage Classes

Storage Class Type Description Use Cases
standard-rwo GCP Standard Standard ReadWriteOnce storage Development, testing, general workloads
standard-rwo-immediate GCP Standard Standard ReadWriteOnce storage Development, testing, general workloads
pd-balanced GCP Balanced Balanced persistent disk with good performance Production workloads, databases
pd-balanced-immediate GCP Balanced Balanced persistent disk with good performance Production workloads, databases
pd-ssd GCP SSD High-performance SSD persistent disk High-performance applications, databases
pd-ssd-immediate GCP SSD High-performance SSD persistent disk High-performance applications, databases
pd-standard GCP Standard Standard persistent disk General workloads, development
pd-standard-immediate GCP Standard Standard persistent disk General workloads, development
pd-extreme GCP Extreme Highest performance persistent disk Mission-critical, high-IOPS applications
pd-extreme-immediate GCP Extreme Highest performance persistent disk Mission-critical, high-IOPS applications
hyperdisk GCP Hyperdisk Ultra-high performance storage Extreme performance requirements
hyperdisk-immediate GCP Hyperdisk Ultra-high performance storage Extreme performance requirements

Storage Class Configuration:

  • Volume Binding Mode: WaitForFirstConsumer (default), Immediate (for -immediate variants)
  • Reclaim Policy: Delete - volumes are automatically deleted when deployment instances are deleted
  • Volume Expansion: Enabled for all GCP storage classes
  • Encryption: All volumes are encrypted
  • Default: pd-balanced

Azure Storage Classes

Storage Class Type Description Use Cases
managed-premium Azure Premium LRS Premium locally redundant SSD storage Production databases, high-performance apps
managed-premium-immediate Azure Premium LRS Premium locally redundant SSD storage Production databases, high-performance apps
managed-standard Azure Standard LRS Standard locally redundant storage Development, testing, general workloads
managed-standard-immediate Azure Standard LRS Standard locally redundant storage Development, testing, general workloads
managed-ultra Azure Ultra SSD LRS Ultra-high performance SSD storage Mission-critical, high-IOPS applications
managed-ultra-immediate Azure Ultra SSD LRS Ultra-high performance SSD storage Mission-critical, high-IOPS applications
azurefiles-standard Azure Files Standard LRS Standard file storage Shared file systems, development
azurefiles-standard-immediate Azure Files Standard LRS Standard file storage Shared file systems, development
azurefiles-premium Azure Files Premium LRS Premium file storage High-performance shared file systems
azurefiles-premium-immediate Azure Files Premium LRS Premium file storage High-performance shared file systems

Storage Class Configuration:

  • Volume Binding Mode: WaitForFirstConsumer (default), Immediate (for -immediate variants)
  • Reclaim Policy: Delete - volumes are automatically deleted when deployment instances are deleted
  • Volume Expansion: Enabled for managed-premium storage classes only
  • Encryption: All volumes are encrypted
  • Default: managed-premium

Cloud Agnostic Storage Class

Omnistrate configures default storage classes for each cloud, if you don't have specific performance requirements you can rely on the default storage class for simplicity.

Using Storage classes on your Helm

When deploying Helm charts through Omnistrate, you can specify storage classes in your Helm values to dynamically provision persistent volumes. The storage class determines the type and performance characteristics of the underlying storage.

Example of using storage classes on you Helm Chart

# values.yaml
persistence:
  enabled: true
  storageClass: "gp3"  # AWS GP3 storage
  size: 100Gi
  accessMode: ReadWriteOnce
# templates/pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: {{ include "myapp.fullname" . }}-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: {{ .Values.persistence.size }}
  {{- if .Values.persistence.storageClass }}
  storageClassName: {{ .Values.persistence.storageClass }}
  {{- end }}

Multi-Cloud Storage Configuration

For applications that need to work across different cloud providers, you can use layered config logic in your Helm config values in Omnistrate.

Creating Custom Storage Classes

If the pre-provisioned storage classes don't meet your specific requirements, you can create your own storage classes using the pre-installed drivers that Omnistrate provides for each cloud provider.

Note

Custom storage classes must be created in each deployment cell where you plan to use them. Omnistrate automatically manages the lifecycle of pre-provisioned storage classes, but custom storage classes require manual management across your deployment cells.

Available Pre-Installed Drivers

Omnistrate pre-installs the following storage drivers in each deployment cell:

Block Storage Drivers

AWS: - ebs.csi.aws.com - AWS EBS CSI driver for block storage

GCP: - pd.csi.storage.gke.io - GCP Persistent Disk CSI driver for block storage

Azure: - disk.csi.azure.com - Azure Disk CSI driver for block storage

File Storage Drivers

AWS: - efs.csi.aws.com - AWS EFS CSI driver for shared file systems

GCP: - filestore.csi.storage.gke.io - GCP Filestore CSI driver for shared file systems

Azure: - file.csi.azure.com - Azure Files CSI driver for shared file systems

Blob Storage Drivers

AWS: - s3.csi.aws.com - AWS S3 CSI driver for object storage

GCP: - gcs.csi.storage.gke.io - GCP Cloud Storage CSI driver for object storage

Azure: - blob.csi.azure.com - Azure Blob Storage CSI driver for object storage

Custom Storage Class Examples

Custom Block Storage Class

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: custom-high-iops
provisioner: ebs.csi.aws.com
parameters:
  type: io2
  iops: "20000"
  throughput: "1000"
  encrypted: "true"
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
allowVolumeExpansion: true

Custom File Storage Class

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: custom-efs-performance
provisioner: efs.csi.aws.com
parameters:
  provisioningMode: efs-ap
  fileSystemId: fs-12345678
  directoryPerms: "0755"
  performanceMode: maxIO
  throughputMode: provisioned
  provisionedThroughputInMibps: "500"
volumeBindingMode: Immediate
reclaimPolicy: Delete

Custom Blob Storage Class

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: custom-s3-storage
provisioner: s3.csi.aws.com
parameters:
  mounter: geesefs
  bucketName: my-custom-bucket
  region: us-west-2
  storageClass: STANDARD_IA
volumeBindingMode: Immediate
reclaimPolicy: Delete

Monitoring and Troubleshooting

Check Storage Class Availability

# List available storage classes
kubectl get storageclass

# Describe a specific storage class
kubectl describe storageclass gp3

Monitor PVC Status

# Check PVC status
kubectl get pvc

# Describe PVC for troubleshooting
kubectl describe pvc my-app-data

Common Issues

  1. PVC Stuck in Pending: Verify the storage class exists and there is sufficient quota in the deployment cell
  2. Volume Mount Failures: Ensure the storage class supports the requested access mode
  3. Performance Issues: Consider upgrading to a higher-performance storage class or adjusting IOPS settings

Note

Omnistrate automatically handles storage class provisioning and configuration. If you encounter persistent issues, contact support for assistance with your specific deployment environment.