Skip to main content
Storage configuration in vCluster controls how persistent data is managed, including volumes, storage classes, and snapshots for both the control plane and workloads.

Control Plane Persistence

controlPlane.statefulSet.persistence
object
Persistence configuration for the vCluster control plane StatefulSet.

Etcd Persistence

controlPlane.backingStore.etcd.deploy.statefulSet.persistence
object
Persistence configuration for deployed etcd.

Workload Storage Syncing

sync.toHost.persistentVolumeClaims
object
Sync PersistentVolumeClaims from virtual cluster to host.
sync.toHost.persistentVolumes
object
Sync PersistentVolumes from virtual cluster to host.
sync.toHost.storageClasses
object
Sync StorageClasses from virtual cluster to host.
sync.fromHost.storageClasses
object
Sync StorageClasses from host to virtual cluster.

Volume Snapshots

sync.toHost.volumeSnapshots
object
Sync VolumeSnapshots from virtual cluster to host.
sync.toHost.volumeSnapshotContents
object
Sync VolumeSnapshotContents from virtual cluster to host.
sync.fromHost.volumeSnapshotClasses
object
Sync VolumeSnapshotClasses from host to virtual cluster.
deploy.volumeSnapshotController
object
Deploy CSI volume snapshot controller.
rbac.enableVolumeSnapshotRules
object
Enable RBAC rules for volume snapshots.

CSI Storage

sync.fromHost.csiDrivers
object
Sync CSIDrivers from host to virtual cluster.
sync.fromHost.csiNodes
object
Sync CSINodes from host to virtual cluster.
sync.fromHost.csiStorageCapacities
object
Sync CSIStorageCapacities from host to virtual cluster.

Local Path Provisioner

deploy.localPathProvisioner
object
Deploy local path provisioner for local storage.

Example: Control Plane with Custom Storage

controlPlane:
  statefulSet:
    persistence:
      volumeClaim:
        enabled: true
        size: 20Gi
        storageClass: fast-ssd
        retentionPolicy: Retain

Example: Etcd with Persistent Storage

controlPlane:
  backingStore:
    etcd:
      deploy:
        enabled: true
        statefulSet:
          persistence:
            volumeClaim:
              enabled: true
              size: 10Gi
              storageClass: fast-storage

Example: Enable Volume Snapshots

# Enable volume snapshot syncing
sync:
  toHost:
    volumeSnapshots:
      enabled: true
    volumeSnapshotContents:
      enabled: true
  fromHost:
    volumeSnapshotClasses:
      enabled: true

# Deploy snapshot controller
deploy:
  volumeSnapshotController:
    enabled: true

# Enable RBAC rules
rbac:
  enableVolumeSnapshotRules:
    enabled: true

Example: Custom Volumes and Mounts

controlPlane:
  statefulSet:
    persistence:
      addVolumes:
        - name: custom-ca-certs
          secret:
            secretName: ca-certificates
        - name: config-volume
          configMap:
            name: vcluster-config
      
      addVolumeMounts:
        - name: custom-ca-certs
          mountPath: /etc/ssl/certs/custom
          readOnly: true
        - name: config-volume
          mountPath: /etc/vcluster
          readOnly: true

Example: Sync StorageClasses

# Sync storage classes from host to virtual cluster
sync:
  fromHost:
    storageClasses:
      enabled: true
    csiDrivers:
      enabled: true
    csiNodes:
      enabled: true
    csiStorageCapacities:
      enabled: true

# Enable virtual scheduler to use host storage
controlPlane:
  distro:
    k8s:
      scheduler:
        enabled: true

Example: Local Path Provisioner Configuration

deploy:
  localPathProvisioner:
    enabled: true
    image: rancher/local-path-provisioner:v0.0.24
    imagePullPolicy: IfNotPresent
    nodePath: /var/lib/vcluster-storage

Use Cases

High Availability with Persistent Storage

controlPlane:
  statefulSet:
    highAvailability:
      replicas: 3
    persistence:
      volumeClaim:
        enabled: true
        size: 20Gi
        storageClass: replicated-ssd

Ephemeral Storage Only

controlPlane:
  statefulSet:
    persistence:
      volumeClaim:
        enabled: false
      dataVolume:
        - name: data
          emptyDir: {}

Enable All Storage Features

sync:
  toHost:
    persistentVolumeClaims:
      enabled: true
    persistentVolumes:
      enabled: true
    storageClasses:
      enabled: true
    volumeSnapshots:
      enabled: true
    volumeSnapshotContents:
      enabled: true
  fromHost:
    storageClasses:
      enabled: true
    volumeSnapshotClasses:
      enabled: true
    csiDrivers:
      enabled: true
    csiNodes:
      enabled: true
    csiStorageCapacities:
      enabled: true

deploy:
  volumeSnapshotController:
    enabled: true

rbac:
  enableVolumeSnapshotRules:
    enabled: true

Important Notes

  1. Backing Store Selection: The choice between embedded database, external database, or etcd affects persistence requirements:
    • Embedded database (SQLite): Requires persistent volume
    • External database: No local persistence needed for data (only for binaries)
    • Etcd: Requires persistent volume for etcd pods
  2. Volume Claim Templates: Cannot be modified after initial creation. Plan your storage requirements carefully.
  3. Storage Class Changes: Changing storage classes requires manual PVC migration.
  4. Retention Policy: Set to Retain to preserve data after vCluster deletion.

Build docs developers (and LLMs) love