Examples
July 21, 2026 · View on GitHub
Ready-to-apply manifests for common RawFile LocalPV scenarios. All examples assume the
default StorageClass/SnapshotClass names (rawfile-localpv) created by the Helm chart.
1. Basic PVC + Pod (Filesystem mode)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-fs
spec:
storageClassName: rawfile-localpv
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 2Gi
---
apiVersion: v1
kind: Pod
metadata:
name: example-fs-pod
spec:
containers:
- name: app
image: busybox
command: ["sh", "-c", "sleep infinity"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: example-fs
2. Raw Block volume
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-block
spec:
storageClassName: rawfile-localpv
accessModes: [ReadWriteOnce]
volumeMode: Block
resources:
requests:
storage: 2Gi
---
apiVersion: v1
kind: Pod
metadata:
name: example-block-pod
spec:
containers:
- name: app
image: busybox
command: ["sh", "-c", "sleep infinity"]
volumeDevices:
- name: data
devicePath: /dev/xvda
volumes:
- name: data
persistentVolumeClaim:
claimName: example-block
3. Custom StorageClass — thin-provisioned xfs on an NVMe pool
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rawfile-nvme-xfs
provisioner: rawfile.csi.openebs.io
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
mountOptions:
- noatime
parameters:
csi.storage.k8s.io/fstype: xfs
thinProvision: "true"
storagePool: nvme
(Requires an nvme pool in node.storagePools — see
StorageClass Configuration.)
4. Volume expansion
kubectl patch pvc example-fs \
-p '{"spec":{"resources":{"requests":{"storage":"4Gi"}}}}'
# watch the resize complete (online, no pod restart)
kubectl get pvc example-fs -w
5. Snapshot and restore
Take a snapshot:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: example-fs-snap
spec:
volumeSnapshotClassName: rawfile-localpv
source:
persistentVolumeClaimName: example-fs
Wait for readiness:
kubectl get volumesnapshot example-fs-snap \
-o jsonpath='{.status.readyToUse}'
Restore into a new PVC (lands on the same node as the source):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-fs-restored
spec:
storageClassName: rawfile-localpv
accessModes: [ReadWriteOnce]
dataSource:
apiGroup: snapshot.storage.k8s.io
kind: VolumeSnapshot
name: example-fs-snap
resources:
requests:
storage: 2Gi
6. Clone a PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-fs-clone
spec:
storageClassName: rawfile-localpv
accessModes: [ReadWriteOnce]
dataSource:
kind: PersistentVolumeClaim
name: example-fs
resources:
requests:
storage: 2Gi
Note
Cloning requires roughly 3× the volume size of free pool capacity during the copy and currently happens on the same node as the source.
7. StatefulSet with volumeClaimTemplates
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: example-sts
spec:
serviceName: example-sts
replicas: 3
selector:
matchLabels: { app: example-sts }
template:
metadata:
labels: { app: example-sts }
spec:
containers:
- name: app
image: busybox
command: ["sh", "-c", "sleep infinity"]
volumeMounts:
- name: data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: data
spec:
storageClassName: rawfile-localpv
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 1Gi
Each replica gets its own node-local volume; replicas stay pinned to their node.
8. Snapshotting an in-use volume without CoW (freezeFs)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rawfile-freeze
provisioner: rawfile.csi.openebs.io
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
csi.storage.k8s.io/fstype: ext4
copyOnWrite: "false"
freezeFs: "true"
Volumes of this class are briefly frozen (fsfreeze) while snapshots are taken,
producing crash-consistent snapshots even without copy-on-write support.