OpenEBS Local PV LVM
Overview
OpenEBS Local PV LVM is a CSI plugin for implementation of LVM) backed persistent volumes for Kubernetes. It is a local storage solution, which means the device, volume and the application are on the same host. It doesn't contain any dataplane, i.e only its simply a control-plane for the kernel lvm volumes. It mainly comprises of two components which are implemented in accordance to the CSI Specs:
- CSI Controller - Frontends the incoming requests and initiates the operation.
- CSI Node Plugin - Serves the requests by performing the operations and making the volume available for the initiator.
Why OpenEBS Local PV LVM?
- Lightweight, easy to set up storage provisoner for host-local volumes in K8s ecosystem.
- Makes LVM stack available to K8s, allowing end users to use the LVM functionalites like snapshot, thin provisioning, resize, etc for their Persistent Volumes.
- Cloud native, i.e based on CSI spec, hence suitable for all K8s deployments.
Architecture
LocalPV refers to storage that is directly attached to a specific node in the Kubernetes cluster. It uses locally available disks (e.g., SSDs, HDDs) on the node.
Use Case: Ideal for workloads that require low-latency access to storage or when data locality is critical (e.g., databases, caching systems).
Characteristics:
- Node-bound: The volume is tied to the node where the disk is physically located.
- No replication: Data is not replicated across nodes, so if the node fails, the data may become inaccessible.
- High performance: Since the storage is local, it typically offers lower latency compared to network-attached storage.
graph TD;
subgraph Node2["Node 2"]
subgraph K8S_NODE1[" "]
N1_PV1["PV"] --> N1_APP1["APP"]
N1_PV2["PV"] --> N1_APP2["APP"]
end
subgraph LVM_Stack2["LVM Stack"]
P1_1["PV"] --> V1_1["VG"]
P1_2["PV"] --> V1_1
V1_1 --> L1_1["LV"]
V1_1 --> L3_1["LV"]
L1_1 --> N1_PV1
L3_1 --> N1_PV2
end
subgraph Blockdevices1[" "]
D1["/dev/sdc"] --> P1_1
D2["/dev/sdb"] --> P1_2
end
end
subgraph Node1["Node 1"]
subgraph K8S_NODE2[" "]
N2_PV1["PV"] --> N2_APP1["APP"]
end
subgraph LVM_Stack1["LVM Stack"]
P2_2["PV"] --> V2_2["VG"]
V2_2 --> Z2_2["LV"]
Z2_2 --> N2_PV1
end
subgraph Blockdevices2[" "]
D3["/dev/sdb"] --> P2_2
end
end
classDef pv fill:#FFCC00,stroke:#FF9900,color:#000;
classDef app fill:#99CC00,stroke:#66CC00,color:#000;
classDef disk fill:#FF6666,stroke:#FF3333,color:#000;
classDef vg fill:#FFCCFF,stroke:#FF99FF,color:#000;
classDef lv fill:#99CCFF,stroke:#6699FF,color:#000;
class N1_PV1,N1_PV2,N2_PV1 pv;
class N1_APP1,N1_APP2,N2_APP1 app;
class D1,D2,D3 disk;
class P1_1,P1_2,P2_2 vg;
class V1_1,V2_2 lv;
class L1_1,L3_1,Z2_2 lv;
Supported System
| Name | Version |
| :--- | :--- |
| K8S | 1.23+ |
| Distro | Alpine, Arch, CentOS, Debian, Fedora, NixOS, SUSE, Talos, RHEL, Ubuntu |
| Kernel | oldest supported kernel is 2.6 |
| LVM2 | 2.03.21 |
| Min RAM | LVM2 is a kernel native module. It is very efficent and fast. It has no strict memory requirements |
Stability | LVM2 is extremly stable and very mature. The Kernel was released ~2005. It exists in most LINUX distros |
Documents
- Prerequisites
- Quickstart
- Developer Setup
- Testing
- Contibuting Guidelines
- Governance
- Changelog
- Release Process
- [x] Access Modes
- [x] Volume modes
Filesystem mode
- [x] Block mode
- [x] Supports fsTypes:
ext4,btrfs,xfs - [x] Volume metrics
- [x] Topology
- [x] Snapshot
- [ ] Clone
- [x] Volume Resize
- [x] Thin Provision
- [x] Backup/Restore
- [ ] Ephemeral inline volume
Limitation
- Resize of volumes with snapshot is not supported.
- Restore from snapshot of thick volume is not supported.
- Clone of a volume from volume is not supported.
Dev Activity dashboard
!Alt