{"id":13439947,"url":"https://github.com/openebs/lvm-localpv","last_synced_at":"2025-07-23T23:05:54.019Z","repository":{"id":37724639,"uuid":"323909407","full_name":"openebs/lvm-localpv","owner":"openebs","description":"Dynamically provision Stateful Persistent Node-Local Volumes \u0026 Filesystems for Kubernetes that is integrated with a backend LVM2 data storage stack.","archived":false,"fork":false,"pushed_at":"2025-06-05T07:35:05.000Z","size":9227,"stargazers_count":293,"open_issues_count":29,"forks_count":100,"subscribers_count":18,"default_branch":"develop","last_synced_at":"2025-06-05T07:46:36.265Z","etag":null,"topics":["csi","csi-driver","data-visualization","hacktoberfest","kubernetes","lvm","lvm-snapshot","lvm-volumes","lvm2","storage","storage-api","storage-engine","storage-manager"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openebs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":"GOVERNANCE.md","roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-12-23T13:27:56.000Z","updated_at":"2025-06-05T07:03:28.000Z","dependencies_parsed_at":"2023-01-24T10:15:18.880Z","dependency_job_id":"3e8efc71-ac05-434c-8dbd-98c5a9d0f95e","html_url":"https://github.com/openebs/lvm-localpv","commit_stats":{"total_commits":238,"total_committers":55,"mean_commits":4.327272727272727,"dds":0.907563025210084,"last_synced_commit":"46d06a3ebd8486f0209f3e17b2244dd3156acc86"},"previous_names":["pawanpraka1/dynamic-lvm"],"tags_count":67,"template":false,"template_full_name":null,"purl":"pkg:github/openebs/lvm-localpv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openebs%2Flvm-localpv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openebs%2Flvm-localpv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openebs%2Flvm-localpv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openebs%2Flvm-localpv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openebs","download_url":"https://codeload.github.com/openebs/lvm-localpv/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openebs%2Flvm-localpv/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266765008,"owners_count":23980674,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csi","csi-driver","data-visualization","hacktoberfest","kubernetes","lvm","lvm-snapshot","lvm-volumes","lvm2","storage","storage-api","storage-engine","storage-manager"],"created_at":"2024-07-31T03:01:18.417Z","updated_at":"2025-07-23T23:05:54.014Z","avatar_url":"https://github.com/openebs.png","language":"Go","funding_links":[],"categories":["HarmonyOS","Go","kubernetes"],"sub_categories":["Windows Manager"],"readme":"## OpenEBS Local PV LVM\n\n[![CNCF Status](https://img.shields.io/badge/cncf%20status-sandbox-blue.svg)](https://www.cncf.io/projects/openebs/)\n[![LICENSE](https://img.shields.io/github/license/openebs/openebs.svg)](./LICENSE)\n[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fopenebs%2Flvm-localpv.svg?type=shield\u0026issueType=license)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fopenebs%2Flvm-localpv?ref=badge_shield\u0026issueType=license)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/4548/badge)](https://www.bestpractices.dev/projects/4548)\n[![Slack](https://img.shields.io/badge/chat-slack-ff1493.svg?style=flat-square)](https://kubernetes.slack.com/messages/openebs)\n[![Community Meetings](https://img.shields.io/badge/Community-Meetings-blue)](https://github.com/openebs/community/blob/HEAD/README.md#community)\n[![Go Report](https://goreportcard.com/badge/github.com/openebs/lvm-localpv)](https://goreportcard.com/report/github.com/openebs/lvm-localpv)\n[![CLOMonitor](https://img.shields.io/endpoint?url=https://clomonitor.io/api/projects/cncf/openebs/badge)](https://clomonitor.io/projects/cncf/openebs)\n[![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/openebs)](https://artifacthub.io/packages/helm/openebs/openebs)\n\n## Overview\n\nOpenEBS Local PV LVM is a [CSI](https://github.com/container-storage-interface/spec) plugin for implementation of [LVM](https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)) 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:\n\n1. CSI Controller - Frontends the incoming requests and initiates the operation.\n2. CSI Node Plugin - Serves the requests by performing the operations and making the volume available for the initiator.\n\n## Why OpenEBS Local PV LVM?\n\n1. Lightweight, easy to set up storage provisoner for host-local volumes in K8s ecosystem.\n2. Makes LVM stack available to K8s, allowing end users to use the LVM functionalites like snapshot, thin provisioning, resize, etc for their Persistent Volumes.\n3. Cloud native, i.e based on CSI spec, hence suitable for all K8s deployments.\n\n## Architecture\n\nLocalPV 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.\n\n\u003cb\u003eUse Case\u003c/b\u003e: Ideal for workloads that require low-latency access to storage or when data locality is critical (e.g., databases, caching systems).\n\n### Characteristics:\n\n- \u003cb\u003eNode-bound\u003c/b\u003e: The volume is tied to the node where the disk is physically located.\n- \u003cb\u003eNo replication\u003c/b\u003e: Data is not replicated across nodes, so if the node fails, the data may become inaccessible.\n- \u003cb\u003eHigh performance\u003c/b\u003e: Since the storage is local, it typically offers lower latency compared to network-attached storage.\n\nThe diagram below depicts the mapping to the host disks, the LVM stack on top of the disks and the kubernetes persistent volumes to be consumed by the workload. Local PV LVM CSI Controller upon creation of the Persistent Volume Claim, creates a LVMVolume CR, which emits an event for Local PV LVM CSI Node Plugin to create the LV(logical volume). When workloads are scheduled the Local PV LVM CSI Node Plugin makes this lv/logical volume available via a mount point on the host.\n\n```mermaid\ngraph TD;\n  subgraph Node2[\"Node 2\"]\n    subgraph K8S_NODE1[\" \"]\n      N1_PV1[\"PV\"] --\u003e N1_APP1[\"APP\"]\n      N1_PV2[\"PV\"] --\u003e N1_APP2[\"APP\"]\n    end\n    subgraph LVM_Stack2[\"LVM Stack\"]\n      P1_1[\"PV\"] --\u003e V1_1[\"VG\"]\n      P1_2[\"PV\"] --\u003e V1_1\n      V1_1 --\u003e L1_1[\"LV\"]\n      V1_1 --\u003e L3_1[\"LV\"]\n      L1_1 --\u003e N1_PV1 \n      L3_1 --\u003e N1_PV2\n    end\n    subgraph Blockdevices1[\" \"]\n      D1[\"/dev/sdc\"] --\u003e P1_1\n      D2[\"/dev/sdb\"] --\u003e P1_2\n    end\n  end\n\n  subgraph Node1[\"Node 1\"]\n    subgraph K8S_NODE2[\" \"]\n      N2_PV1[\"PV\"] --\u003e N2_APP1[\"APP\"]\n    end\n    subgraph LVM_Stack1[\"LVM Stack\"]\n      P2_2[\"PV\"] --\u003e V2_2[\"VG\"]\n      V2_2 --\u003e Z2_2[\"LV\"]\n      Z2_2 --\u003e N2_PV1 \n    end\n    subgraph Blockdevices2[\" \"]\n      D3[\"/dev/sdb\"] --\u003e P2_2\n    end\n  end\n\n  classDef pv fill:#FFCC00,stroke:#FF9900,color:#000;\n  classDef app fill:#99CC00,stroke:#66CC00,color:#000;\n  classDef disk fill:#FF6666,stroke:#FF3333,color:#000;\n  classDef vg fill:#FFCCFF,stroke:#FF99FF,color:#000;\n  classDef lv fill:#99CCFF,stroke:#6699FF,color:#000;\n\n  class N1_PV1,N1_PV2,N2_PV1 pv;\n  class N1_APP1,N1_APP2,N2_APP1 app;\n  class D1,D2,D3 disk;\n  class P1_1,P1_2,P2_2 vg;\n  class V1_1,V2_2 lv;\n  class L1_1,L3_1,Z2_2 lv;\n\n```\n\n## Supported System\n\n\u003e | Name | Version |\n\u003e | :--- | :--- |\n\u003e | K8S | 1.23+ |\n\u003e | Distro | Alpine, Arch, CentOS, Debian, Fedora, NixOS, SUSE, Talos, RHEL, Ubuntu |\n\u003e | Kernel | oldest supported kernel is 2.6 |\n\u003e | LVM2 | 2.03.21 |\n\u003e | Min RAM | LVM2 is a kernel native module. It is very efficent and fast. It has no strict memory requirements |\n\u003e Stability | LVM2 is extremly stable and very mature. The Kernel was released ~2005. It exists in most LINUX distros |\n\n## Documents\n\n- [Prerequisites](./docs/quickstart.md#prerequisites)\n- [Quickstart](./docs/quickstart.md#setup)\n- [Developer Setup](./docs/developer-setup.md#development-workflow)\n- [Testing](./docs/developer-setup.md#testing)\n- [Contibuting Guidelines](./CONTRIBUTING.md)\n- [Governance](./GOVERNANCE.md)\n- [Changelog](./CHANGELOG.md)\n- [Release Process](./RELEASE.md)\n\nFeatures\n---\n\n- [x] Access Modes\n    - [x] ReadWriteOnce\n    - ~~ReadOnlyMany~~\n    - ~~ReadWriteMany~~\n- [x] Volume modes\n    - [x] `Filesystem` mode\n    - [x] [`Block`](docs/raw-block-volume.md) mode\n- [x] Supports fsTypes: `ext4`, `btrfs`, `xfs`\n- [x] Volume metrics\n- [x] Topology\n- [x] Snapshot\n    - [x] [Create](docs/snapshot.md)\n    - [ ] Restore\n- [ ] Clone\n- [x] [Volume Resize](docs/resize.md)\n- [x] [Thin Provision](docs/thin_provision.md)\n- [ ] Backup/Restore\n- [ ] Ephemeral inline volume\n\n## Limitation\n\n- Resize of volumes with snapshot is not supported.\n- Restore of a volume from snapshot is not supported.\n- Clone of a volume from volume is not supported.\n\n## Dev Activity dashboard\n\n![Alt](https://repobeats.axiom.co/api/embed/1bb8799af15de72cbe5cca8edb1641c7fdc31cb2.svg \"Repobeats analytics image\")\n\n## License Compliance\n\n[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fopenebs%2Flvm-localpv.svg?type=large\u0026issueType=license)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fopenebs%2Flvm-localpv?ref=badge_large\u0026issueType=license)\n\n## OpenEBS is a [CNCF Sandbox Project](https://www.cncf.io/projects/openebs)\n\n![OpenEBS is a CNCF Sandbox Project](https://github.com/cncf/artwork/blob/main/other/cncf/horizontal/color/cncf-color.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenebs%2Flvm-localpv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenebs%2Flvm-localpv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenebs%2Flvm-localpv/lists"}