Skip to content
Capacity-aware CSI plugin for Kubernetes
Go Makefile Other
Branch: master
Clone or download
Latest commit cbf6e92 Sep 13, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Switch ApiVersion for kubeadm config Sep 9, 2019
.github/ISSUE_TEMPLATE Enhance issue template Jun 6, 2019
csi Split CSI driver implementation Jul 6, 2019
deploy Bump version to 0.1.2 Sep 10, 2019
docs Fix document for topolvm-hook Aug 24, 2019
driver Fix GetCapacity() does not read node labels Sep 6, 2019
e2e Fix comments Sep 9, 2019
example Bump version to 0.1.2 Sep 10, 2019
filesystem filesystem: stabilize mount point detection Aug 13, 2019
hook Revert new features of k8s 1.15 Sep 9, 2019
lvmd lvmd: fix a bug that causes test failures Sep 9, 2019
lvmetrics [scheduler] add prioritize May 15, 2019
pkg topolvm-hook: add --development flag for logs Aug 9, 2019
scheduler Fix ineffective assignments Jul 9, 2019
topolvm-node Remove setting requeue value Sep 13, 2019
vendor Update controller-runtime to 0.2.0 Aug 25, 2019
.dockerignore Move building csi sidecar binaries to release container image Jun 20, 2019
.gitignore End-to-end test on kind (#11) Jul 5, 2019 Bump version to 0.1.2 Sep 10, 2019
Dockerfile Install btrfs-tools and xfsprogs to container for supporting btrfs an… Jun 20, 2019
LICENSE Fix typo in LICENSE Jun 16, 2019
Makefile Update Makefiles for Kubebuilder v2 Aug 25, 2019 Update Aug 25, 2019 Update Aug 25, 2019
constants.go [driver] no validation done in ValidateVolumeCapabilities Jul 8, 2019
csi.proto Generate protobuf Apr 26, 2019
go.mod Update controller-runtime to 0.2.0 Aug 25, 2019
tools_test.go Generate protobuf Apr 26, 2019
version.go Bump version to 0.1.2 Sep 10, 2019

GitHub release CircleCI GoDoc Go Report Card Docker Repository on Quay


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.

Project Status: Testing for production

Supported environments

  • Kubernetes
    • 1.14
    • 1.15
  • 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.
  • Topology: TopoLVM uses CSI topology feature to schedule Pod to Node where LVM volume exist.
  • Extended scheduler: TopoLVM extends the general Pod scheduler to prioritize Nodes having larger storage capacity.

Planned features


A diagram of components is available in docs/

This repository contains these programs:

  • csi-topolvm: Unified CSI driver.
  • lvmd: gRPC service to manage LVM volumes.
  • lvmetrics: A DaemonSet sidecar container to expose storage metrics as Node annotations.
  • topolvm-scheduler: A scheduler extender for TopoLVM.
  • topolvm-node: A sidecar to communicate with CSI controller over TopoLVM custom resources.
  • topolvm-hook: A MutatingAdmissionWebhook for topolvm-scheduler.

lvmd is a standalone program that should be run on Node OS as a systemd service. Other programs are packaged into container images.

Getting started

A demonstration of TopoLVM running on kind (Kubernetes IN Docker) is available at example directory.

For production deployments, see deploy directory.


docs directory contains documents about designs and specifications.

You can’t perform that action at this time.