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.
Join our community on Slack: Invitation form
- Project Status: Testing for production
- Conformed CSI version: 1.1.0
- Kubernetes
- 1.15
- 1.16
- 1.17
- 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