Skip to main content
Two lists describe what a supervisor’s storage can actually do. StorageClasses are what everything provisions against; CDI StorageProfiles — one per class, maintained by KubeVirt’s containerized data importer — declare each class’s clone strategy and the access-mode/volume-mode combinations it supports. The second list is the one that answers the questions that matter for VMs: will cloning be fast and can this VM live-migrate.

StorageClasses

The class list shows every StorageClass on the supervisor — the ones Celum’s backends created and any third-party classes provisioned outside the wizard — with the facts a picker needs:
Every storage-class picker in the product — monitoring PVCs, VM disks, image imports, tenant-cluster defaults — reads this one list, sorted default-first. When a wizard step needs a class and you did not pick one, the cluster default wins.
Exactly one class should carry the default annotation. Two defaults make claim placement provisioner-dependent; zero means every claim must name its class explicitly. The backends never set the default flag without being asked.

CDI StorageProfiles

CDI mirrors each StorageClass with a StorageProfile and fills in what the class’s CSI driver supports. The profile is what CDI consults when a DataVolume — a VM disk, an imported image — leaves access mode or volume mode unspecified:
claimPropertySets is the authoritative capability list: each entry is an access-mode set with its volume mode, and CDI defaults unspecified DataVolume fields from the first matching set. The derived flags (supportsRWX, supportsBlock, …) are the same information pre-scanned, and rwxVolumeMode names the volume mode that comes with ReadWriteMany on this class — Block on RBD-backed classes, Filesystem on file-backed ones. cloneStrategy decides how a clone of an existing volume — every VM created from a golden image — is executed: The constraint column is the trap: both fast strategies refuse a cross-volume-mode pair. A Filesystem-mode source cloned to a Block-mode target silently falls through to copy no matter what the profile says.

Which class for VMs and images

1

Golden images: RWX + Block on an RBD class

Import Image Library goldens as ReadWriteMany on a class like ceph-block — the profile above shows RWX arrives as Block mode. A Block golden cloned to a Block VM disk takes the csi-clone path: seconds instead of the minute-plus host copy, roughly a 20× difference in practice.
2

Live-migratable VMs: RWX disks

Live migration requires the disk readable from two nodes at once — ReadWriteMany. On RBD that again means Block mode, which is exactly what a Block golden clones into. RWO pins the VM to its node.
3

Keep source and target modes aligned

The fast clone path survives only while golden and disk share a volume mode and class. Cross-pool clones within one provisioner (e.g. ceph-blockceph-san-block) stay on csi-clone, so goldens do not need per-class copies.
4

File-backed classes for file workloads

NFS-style classes support RWX in Filesystem mode — fine for shared data, but VM disks on them clone via copy and profiles without Block support cannot back Block claims at all.
VM storage & disks covers the same decision from the VM side — how the class choice surfaces as migratability and clone time.
An empty profiles list means CDI is not installed on this supervisor — profiles are CDI’s view of the classes, so the Virtualization step has to come first.

The test-PVC diagnostic

The profile says what CDI believes the class supports; the test PVC asks the CSI driver directly. It creates a raw claim — deliberately bypassing CDI and its profile defaulting — with the class, access mode, volume mode, and size you pick, waits up to 30 seconds for it to bind, reports what actually landed, and deletes it. Two readings:
  • The raw claim binds with the requested modes → the driver is fine. If a VM disk on the same class still lands downgraded (RWX requested, RWO bound), the change happened above the CSI layer — profile defaulting is overriding intent, and the profile’s claimPropertySets is where to look.
  • The raw claim stays Pending → the driver, class parameters, or backend genuinely cannot satisfy the combination; the response carries the claim’s events with the provisioner’s own reason.

Permissions

VM storage & disks

The consumer side — what the class choice does to a VM.

PVCs & snapshots

The claims these classes actually hold, and the Pending checklist.

Rook-Ceph

Where ceph-block and ceph-san-block come from.

NFS & Fibre Channel

The file-backed and array-backed classes.