src/tools/csi-kata-directvolume/docs/spdk-usage.md
csi-kata-directvolume is deployed.spdk_tgt is available.# Environment variables
# By default, the driver uses `/var/lib/spdk/vhost` and `/var/lib/spdk/rawdisks`
# you need to set your own paths according to your environment.
export SPDK_DEVEL=<path-to-your-spdk>
export VHU_UDS_PATH=<your_vhost_path>
export RAW_DISKS=<your_rawdisk_path>
# Stop existing process
sudo pkill spdk_tgt || true
# Reset and allocate hugepages
cd $SPDK_DEVEL
sudo ./scripts/setup.sh reset
sudo sysctl -w vm.nr_hugepages=2048
sudo HUGEMEM=4096 ./scripts/setup.sh
# Start SPDK vhost target
sudo mkdir -p $VHU_UDS_PATH
sudo $SPDK_DEVEL/build/bin/spdk_tgt -S $VHU_UDS_PATH -s 1024 -m 0x3 &
Notes:
-s 1024: size of the hugepage memory pool in MB.-m 0x3: CPU mask specifying which cores SPDK will use.
Run the example script:
cd kata-containers/src/tools/csi-kata-directvolume/examples/pod-with-spdkvol
kubectl apply -f csi-storageclass.yaml
kubectl apply -f csi-pvc.yaml
kubectl apply -f csi-app.yaml
This creates:
spdk-test-adaptedkata-spdk-directvolume-pvcspdk-pod-testCheck the mounted block device:
$ kubectl exec -it spdk-pod-test -- /bin/sh
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 254:0 0 256M 1 disk
`-vda1 254:1 0 253M 1 part
vdb 254:16 0 2G 0 disk /data
$ echo "hello spdk" > /data/test.txt
$ cat /data/test.txt
hello spdk
The SPDK-backed volume /dev/vdb is mounted to /data inside the container.
On the host, inspect the raw backing file:
# Locate the raw file
ls /var/lib/spdk/rawdisks
# Attach it as a loop device
sudo losetup -fP /var/lib/spdk/rawdisks/pvc-xxxx.raw
# List loop devices
sudo losetup -a
# Mount and check data
sudo mkdir -p /mnt/testvol
sudo mount /dev/loopX /mnt/testvol
ls /mnt/testvol
cat /mnt/testvol/test.txt
hello spdk
# Cleanup
sudo umount /mnt/testvol
sudo losetup -d /dev/loopX
kubectl delete -f csi-app.yaml
kubectl delete -f csi-pvc.yaml
kubectl delete -f csi-storageclass.yaml
volumetype=spdkvol in the Storage Class.