๐งช Testing DirectPV on Mac M1 using Colima, K3s, and NBD - cniackz/public GitHub Wiki
This guide explains how to test MinIO with DirectPV on a Mac M1 by simulating block devices using Colima + K3s + QEMU-NBD.
โ Goal
Create a lightweight local Kubernetes environment where DirectPV can discover and use virtual disks โ even without native block devices โ by using NBD (Network Block Devices) instead of loopback devices.
๐ ๏ธ Prerequisites
- Apple Silicon Mac (M1 or newer)
- Homebrew
- Colima installed:
brew install colima
kubectl
installed and configured
PreSteps:
colima stop
colima delete # To start fresh
๐ Step 1: Start Colima with K3s (ARM64)
colima start --arch aarch64 --kubernetes
This creates a virtual Linux ARM64 environment with K3s already running.
๐ Step 2: Enter the Colima VM
colima ssh
๐ฝ Step 3: Create a raw disk image
mkdir -p ~/fake-disks
fallocate -l 1G ~/fake-disks/nbd-disk-a.img
๐ฆ Step 4: Install NBD utilities and load the kernel module
sudo apt update
sudo apt install -y qemu-utils
sudo apt install -y xfsprogs
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash # install helm in ubuntu
sudo modprobe nbd max_part=8
sudo apt-get install vim -y # install vim
.img
as /dev/nbd0
๐ Step 5: Connect the sudo qemu-nbd --connect=/dev/nbd0 ~/fake-disks/nbd-disk-a.img
๐๏ธ Step 6: Format the disk with XFS
sudo mkfs.xfs /dev/nbd0 -f
๐ฅ Step 7: Install DirectPV in your K3s cluster
$ kubectl directpv install
Installing on unsupported Kubernetes v1.31
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 100%
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ NAME โ KIND โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ directpv โ Namespace โ
โ directpv-min-io โ ServiceAccount โ
โ directpv-min-io โ ClusterRole โ
โ directpv-min-io โ ClusterRoleBinding โ
โ directpv-min-io โ Role โ
โ directpv-min-io โ RoleBinding โ
โ directpvdrives.directpv.min.io โ CustomResourceDefinition โ
โ directpvvolumes.directpv.min.io โ CustomResourceDefinition โ
โ directpvnodes.directpv.min.io โ CustomResourceDefinition โ
โ directpvinitrequests.directpv.min.io โ CustomResourceDefinition โ
โ directpv-min-io โ CSIDriver โ
โ directpv-min-io โ StorageClass โ
โ node-server โ Daemonset โ
โ controller โ Deployment โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโ
DirectPV installed successfully
๐ Step 8: Discover and init the drive
cniackz@colima:~/fake-disks$ kubectl directpv discover
Discovered node 'colima' โ
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
โ ID โ NODE โ DRIVE โ SIZE โ FILESYSTEM โ MAKE โ AVAILABLE โ DESCRIPTION โ
โโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโโโค
โ 43:0$a3P2cTSl9td... โ colima โ nbd0 โ 1.0 GiB โ xfs โ - โ YES โ - โ
โโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโดโโโโโโโโโโโโดโโโโโโโโโโโโโโ
Generated 'drives.yaml' successfully.
cniackz@colima:~/fake-disks$ kubectl directpv init drives.yaml --dangerous
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 100%
Processed initialization request '706ebeb6-f147-4979-8daa-0fca661dd4b5' for node 'colima' โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโ
โ REQUEST_ID โ NODE โ DRIVE โ MESSAGE โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโผโโโโโโโโโโค
โ 706ebeb6-f147-4979-8daa-0fca661dd4b5 โ colima โ nbd0 โ Success โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโดโโโโโโโโโโ
โ Expected Output
cniackz@colima:~/fake-disks$ kubectl directpv list drives
โโโโโโโโโโฌโโโโโโโฌโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโ
โ NODE โ NAME โ MAKE โ SIZE โ FREE โ VOLUMES โ STATUS โ
โโโโโโโโโโผโโโโโโโผโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโค
โ colima โ nbd0 โ - โ 1.0 GiB โ 1014 MiB โ - โ Ready โ
โโโโโโโโโโดโโโโโโโดโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโ