pillar-csi

Export your ZFS and LVM pools to Kubernetes.

Run one CSI driver for every pool on your storage nodes. The Linux kernel's NVMe-oF target serves each volume to your pods over TCP.

Section through a pillar-csi clusterPods sit on Kubernetes worker nodes. Two storage nodes, one with a ZFS pool and one with an LVM volume group, run pillar-agent and take control calls from pillar-controller over gRPC port 9500. The data path runs only through the Linux kernel: nvmet on the storage node, NVMe-oF over TCP port 4420, and nvme_tcp on the worker. iSCSI, NFS and SMB are drawn dashed because they are planned.One Helm releasepillar-controllerpodpodpodWorker nodes · pillar-nodegRPC :9500agentZFS poolagentLVM VGStorage nodeszvols and logical volumesin pools you already runLinux kernelnvmetnvme_tcpNVMe-oF/TCP :4420iSCSI · plannedNFS · plannedSMB · planned123
Section A-ABrass is the data path, and it runs only through the kernel. Dashed lines are planned.

One driver for every backend and protocol

Install one Helm release instead of a driver for each backend. ZFS and LVM pools share one configuration model: each setting has the same YAML shape in a PillarStore or PillarProtocol, a PillarStorageClass, and a PVC annotation.

How overrides work

Driver schedule
AxisShippedPlanned
BackendsZFS zvols, LVM logical volumesMore backends
ProtocolsNVMe-oF/TCPiSCSI, NFS, SMB

Shipped Planned, not available yet

Detail A One release serves both backends
# values.yaml
agent:
  backends:
    - zfs:
        pool: tank
        parentDataset: k8s
    - lvm:
        volumeGroup: data-vg

Your hosts need kernel modules and a pool

The driver images carry the ZFS, LVM, and filesystem tools, and the agent writes the NVMe-oF target configuration itself. You install no pillar-csi packages on the host, and the driver needs no SSH.

Check your kernel

In the images

  • zfs and zpool from OpenZFS 2.4
  • lvm2
  • mkfs.ext4, mkfs.xfs, and the resize tools
  • NVMe-oF target setup through configfs, replacing nvmetcli and targetcli
  • NVMe-oF connect through /dev/nvme-fabrics, replacing nvme-cli

On your hosts

Storage nodes
nvmet, nvmet_tcp, and a ZFS pool or LVM volume group
Workers
nvme_fabrics, nvme_tcp
Cluster
Kubernetes 1.24 or later, Helm 3.8 or later

General notes

  1. Each volume lives on one storage node. pillar-csi does not replicate data, so a volume is unavailable while its node is down.
  2. The kernel carries every read and write. The controller, agent, and node plugin can restart without interrupting connected volumes.
  3. iSCSI, NFS, and SMB are planned as new protocols in the same driver and configuration model. NVMe-oF/TCP ships today.

Star pillar-csi on GitHub

Stars help other self-hosters find the project.

Star pillar-csi
Star pillar-csi on GitHub