/topols

Capacity-aware CSI plugin for Kubernetes

Primary LanguageGoApache License 2.0Apache-2.0

Main

Introduction

TopoLS is fork of TopoLVM project. TopoLS goal is the same as TopoLVM - provisioning of local storage, but TopoLS uses btrfs quotas instead of lvm2. TopoLS runs in separate namespace and can be installed alongside with TopoLVM.

TopoLS code is ready for testing, but documentation is not yet finished (even touched), so please wait for corrected docs.

Last synced to TopoLVM code on 22 May 2023 at commit 995c3e2dc8e299fbdb8731f447893906b966a4e4.

TopoLS

TopoLS is a CSI plugin using btrfs quotas for Kubernetes. It can be considered as a specific implementation of local persistent volumes using CSI and LVM.

  • Project Status: Testing for production
  • Conformed CSI version: 1.6.0

Supported environments

  • Kubernetes: 1.26, 1.25, 1.24
  • Node OS: Linux
  • Filesystems: btrfs

Features

  • Dynamic provisioning: Volumes are created dynamically when PersistentVolumeClaim objects are created.
  • Topology: TopoLS uses CSI topology feature to schedule Pod to Node where free space on btrfs volume exists.
  • Extended scheduler: TopoLS 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.
  • Storage capacity tracking: You can enable Storage Capacity Tracking mode instead of using topols-scheduler.

Programs

This repository contains these programs:

  • topols-controller: CSI controller service.
  • topols-scheduler: A scheduler extender for TopoLS.
  • topols-node: CSI node service.

Getting started

For production deployments, see deploy/README.md.

Docker images

Docker images are available on ghcr.io: topols, topols-with-sidecar.