topols

package module
v0.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 17, 2021 License: MIT Imports: 1 Imported by: 0

README

GitHub release Main PkgGoDev Go Report Card

TopoLS

TopoLS is for of TopoLVM project. TopoLS goal is the same as TopoLVM - provisioning of local storage, but TopoLS uses btrfs qoutas 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.

TopoLVM

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

Supported environments

  • Kubernetes: 1.18, 1.17, 1.16
  • Node OS: Linux with LVM2
  • Filesystems: ext4, xfs, btrfs

Features

  • 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.
Planned features

Programs

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.

Getting started

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.

Documentation

docs directory contains documents about designs and specifications.

Docker images

Docker images are available on Quay.io

Documentation

Index

Constants

View Source
const CapacityKeyPrefix = "capacity.topols.kvaster.com/"

CapacityKeyPrefix is the key prefix of Node annotation that represents VG free space.

View Source
const CapacityResource = corev1.ResourceName("topols.kvaster.com/capacity")

CapacityResource is the resource name of topols capacity.

View Source
const DefaultCSISocket = "/run/topols/csi-topols.sock"

DefaultCSISocket is the default path of the CSI socket file.

View Source
const DefaultDeviceClassAnnotationName = "00default"

DefaultDeviceClassAnnotationName is the part of annotation name for the default device-class.

View Source
const DefaultDeviceClassName = ""

DefaultDeviceClassName is the name for the default device-class.

View Source
const DefaultSize = DefaultSizeGb << 30

DefaultSize is DefaultSizeGb in bytes

View Source
const DefaultSizeGb = 1

DefaultSizeGb is the default size in GiB for volumes (PVC or inline ephemeral volumes) w/o capacity requests.

View Source
const DeviceClassKey = "topols.kvaster.com/device-class"

DeviceClassKey is the key used in CSI volume create requests to specify a device-class.

View Source
const EphemeralVolumeSizeKey = "topols.kvaster.com/size"

EphemeralVolumeSizeKey is the key used to obtain ephemeral inline volume size from the volume context

View Source
const LogicalVolumeFinalizer = "topols.kvaster.com/logicalvolume"

LogicalVolumeFinalizer is the name of LogicalVolume finalizer

View Source
const NodeFinalizer = "topols.kvaster.com/node"

NodeFinalizer is the name of Node finalizer of TopoLS

View Source
const PVCFinalizer = "topols.kvaster.com/pvc"

PVCFinalizer is the name of PVC finalizer of TopoLS

View Source
const PluginName = "topols.kvaster.com"

PluginName is the name of the CSI plugin.

View Source
const ResizeRequestedAtKey = "topols.kvaster.com/resize-requested-at"

ResizeRequestedAtKey is the key of LogicalVolume that represents the timestamp of the resize request.

View Source
const TopologyNodeKey = "topology.topols.kvaster.com/node"

TopologyNodeKey is the key of topology that represents node name.

Variables

View Source
var (
	// Version is the topols version, this value will be injected on building.
	Version = "devel"
)

Functions

This section is empty.

Types

This section is empty.

Directories

Path Synopsis
api
v1
Package v1 contains API Schema definitions for the topolvm v1 API group +kubebuilder:object:generate=true +groupName=topols.kvaster.com
Package v1 contains API Schema definitions for the topolvm v1 API group +kubebuilder:object:generate=true +groupName=topols.kvaster.com
k8s
pkg
gencert command
hypertopols command
topols-node command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL