TopoLVM is a CSI plugin using LVM for Kubernetes. It can be considered as a specific implementation of local persistent volumes using CSI and LVM.
The team presented the motivation and implementation of TopoLVM at KubeCon Europe 2020: https://kccnceu20.sched.com/event/ZerD
Join our community on Slack: Invitation form
- Project Status: Testing for production
- Conformed CSI version: 1.1.0
- Kubernetes: 1.18, 1.17, 1.16
- Node OS: Linux with LVM2
- Filesystems: ext4, xfs, btrfs
- Dynamic provisioning: Volumes are created dynamically when
PersistentVolumeClaim
objects are created. - Raw block volume: Volumes are available as block devices inside containers.
- Ephemeral inline volume: Volumes can be directly embedded in the Pod specification.
- Topology: TopoLVM uses CSI topology feature to schedule Pod to Node where LVM volume exists.
- Extended scheduler: TopoLVM extends the general Pod scheduler to prioritize Nodes having larger storage capacity.
- Volume metrics: Usage stats are exported as Prometheus metrics from
kubelet
. - Volume Expansion: Volumes can be expanded by editing
PersistentVolumeClaim
objects.
- Snapshot: When we want it.
A diagram of components is available in docs/design.md.
This repository contains these programs:
topolvm-controller
: CSI controller service.topolvm-scheduler
: A scheduler extender for TopoLVM.topolvm-node
: CSI node service.lvmd
: gRPC service to manage LVM volumes.
lvmd
is a standalone program that should be run on Node OS as a systemd service.
Other programs are packaged into a container image.
A demonstration of TopoLVM running on kind (Kubernetes IN Docker) is available at example directory.
For production deployments, see deploy directory.
User manual is at docs/user-manual.md. If you want to use TopoLVM on Rancher/RKE, see docs/rancher.md.
docs directory contains documents about designs and specifications.
Docker images are available on Quay.io