{"id":18927989,"url":"https://github.com/openebs/dynamic-localpv-provisioner","last_synced_at":"2025-05-14T16:11:59.409Z","repository":{"id":41169695,"uuid":"309075816","full_name":"openebs/dynamic-localpv-provisioner","owner":"openebs","description":"Dynamically deploy Stateful Persistent Node-Local Volumes \u0026 Filesystems for Kubernetes that is provisioned from simple local filesystem storage.","archived":false,"fork":false,"pushed_at":"2025-05-08T10:01:16.000Z","size":29139,"stargazers_count":165,"open_issues_count":19,"forks_count":66,"subscribers_count":15,"default_branch":"develop","last_synced_at":"2025-05-14T16:11:53.737Z","etag":null,"topics":["dynamic-provisioning","hacktoberfest","kubernetes","kubernetes-storage","microservices","openebs"],"latest_commit_sha":null,"homepage":"https://openebs.io","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-11-01T10:58:00.000Z","updated_at":"2025-05-14T13:45:32.000Z","dependencies_parsed_at":"2025-01-06T07:05:17.228Z","dependency_job_id":"809af1f3-5cd5-4125-9d3b-61e202e5d8e6","html_url":"https://github.com/openebs/dynamic-localpv-provisioner","commit_stats":{"total_commits":192,"total_committers":38,"mean_commits":5.052631578947368,"dds":0.78125,"last_synced_commit":"79d1e0c6d3ac850af2c4e266bb1b8775adf9d17f"},"previous_names":[],"tags_count":79,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openebs%2Fdynamic-localpv-provisioner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openebs%2Fdynamic-localpv-provisioner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openebs%2Fdynamic-localpv-provisioner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openebs%2Fdynamic-localpv-provisioner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openebs","download_url":"https://codeload.github.com/openebs/dynamic-localpv-provisioner/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254179905,"owners_count":22027884,"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","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":["dynamic-provisioning","hacktoberfest","kubernetes","kubernetes-storage","microservices","openebs"],"created_at":"2024-11-08T11:22:12.521Z","updated_at":"2025-05-14T16:11:59.385Z","avatar_url":"https://github.com/openebs.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenEBS Dynamic LocalPV Provisioner\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[![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://us05web.zoom.us/j/87535654586?pwd=CigbXigJPn38USc6Vuzt7qSVFoO79X.1)\n[![Go Report Card](https://goreportcard.com/badge/github.com/openebs/dynamic-localpv-provisioner)](https://goreportcard.com/report/github.com/openebs/dynamic-localpv-provisioner)\n[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fopenebs%2Fdynamic-localpv-provisioner.svg?type=shield\u0026issueType=license)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fopenebs%2Fdynamic-localpv-provisioner?ref=badge_shield\u0026issueType=license)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/9666/badge)](https://www.bestpractices.dev/projects/9666)\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 Dynamic LocalPV Provisioner is an open‐source Kubernetes component that automates the dynamic provisioning of local persistent volumes. It converts local storage available on Kubernetes nodes, such as hostPath directories into persistent volumes accessible via PVCs. The provisioner automatically assigns node affinity metadata, ensuring that pods run on the node hosting the storage. The tool simplifies local storage management by automating volume creation, binding, and cleanup processes for hostpaths. It overcomes challenges of static provisioning by dynamically allocating storage on demand. Overall, the provisioner offers a robust, scalable solution for managing local persistent hostpath volumes in Kubernetes.\n\n## Why OpenEBS Dynamic LocalPV Provisioner?\n\n- \u003cb\u003eDynamic Provisioning\u003c/b\u003e: Automatically creates persistent hostpath volumes on demand from local node storage, reducing manual configuration. \n- \u003cb\u003eSeamless Kubernetes Integration\u003c/b\u003e: Uses node affinity to ensure pods are scheduled on the node where the volume is located, maintaining data consistency.  \n- \u003cb\u003eCustomizable Storage Behavior\u003c/b\u003e: Offers flexible configuration through StorageClasses, supporting hostpath features like quota enforcement etc.\n- \u003cb\u003eOptimized for High Performance\u003c/b\u003e: Ideal for high-performance, low-latency, stateful applications like replicated databases which need local storage. \n\n## Architecture\n\n```mermaid\n\ngraph TD\n    %% Define Styles with Black Text\n    style kubelet fill:#ffcc00,stroke:#d4a017,stroke-width:2px,color:#000\n    style Provisioner fill:#66ccff,stroke:#3388cc,stroke-width:2px,color:#000\n    style HelperPod fill:#99ff99,stroke:#44aa44,stroke-width:2px,color:#000\n    style App fill:#ff9999,stroke:#cc6666,stroke-width:2px,color:#000\n    style Hostpath fill:#ffdd99,stroke:#d4a017,stroke-width:2px,color:#000\n    style PVC fill:#ffdd99,stroke:#d4a017,stroke-width:2px,color:#000\n    style PV fill:#d9b3ff,stroke:#9955cc,stroke-width:2px,color:#000\n\n    subgraph \"Kubernetes Cluster\"\n        subgraph \"Kubelet\"\n            kubelet[\"Kubelet\"]\n        end\n        subgraph \"OpenEBS LocalPV\"\n            Provisioner[\"LocalPV Provisioner\"]\n            HelperPod[\"Helper Pod (Creates/Cleanup Directory)\"]\n        end\n        subgraph \"Worker Node\"\n            App[\"Application Pod\"]\n            PVC[\"Persistent Volume Claim\"]\n            PV[\"Persistent Volume\"]\n            Hostpath[\"[User-defined path on host]\"]\n        end\n    end\n\n    %% Storage Flow\n    App --\u003e|Requests Storage| PVC\n    PVC --\u003e|Binds to| PV\n    PV --\u003e|Mounted on| Hostpath\n    kubelet --\u003e|Mounts Path| Hostpath\n\n    %% Provisioning Flow\n    Provisioner --\u003e|Launches| HelperPod\n    Provisioner --\u003e|Watches PVC Requests| Provisioner\n    Provisioner --\u003e|Creates PV| PV\n    HelperPod --\u003e|Creates Directory| Hostpath\n    PV --\u003e|Bound to| PVC\n\n```\n\nPlease check [here](./design/hostpath_localpv_provisioner.md) for complete design and architecture.\n\n## Kubernetes Compatibility Matrix\n\n|          | Kubernetes \u003c= 1.18 | Kubernetes \u003e=1.19 |\n|----------|--------------------|-------------------|\n| `v4.0.x` | ✕                  | ✓                 | \n| `v4.1.x` | ✕                  | ✓                 |\n| `v4.2.x` | ✕                  | ✓                 |\n| `HEAD`   | ✕                  | ✓                 |\n\n## Documents\n\n- [Prerequisites](./docs/quickstart.md#prerequisites)\n- [Quickstart](./docs/quickstart.md#quickstart)\n- [Developer Setup](./docs/developer.md)\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\n## Features\n\n- [x] Access Modes\n    - [x] ReadWriteOnce\n    - ~~ReadOnlyMany~~\n    - ~~ReadWriteMany~~\n- [x] Volume modes\n    - [x] `Filesystem` mode\n    - [ ] `Block` mode\n- [x] [Volume Resize(Via Quotas)](./docs/tutorials/hostpath/xfs_quota/)\n\n## Inspiration/Credit\n\nOpenEBS Local PV has been inspired by the prior work done by the following the Kubernetes projects:\n\n- \u003chttps://github.com/kubernetes-sigs/sig-storage-lib-external-provisioner/tree/HEAD/examples/hostpath-provisioner\u003e\n- \u003chttps://github.com/kubernetes-sigs/sig-storage-local-static-provisioner\u003e\n- \u003chttps://github.com/rancher/local-path-provisioner\u003e\n\n## Dev Activity dashboard\n\n![Alt](https://repobeats.axiom.co/api/embed/d7011cfd2ca7cfc49674fc2b64c587adf20862e2.svg \"Repobeats analytics image\")\n\n## License Compliance\n\n[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fopenebs%2Fdynamic-localpv-provisioner.svg?type=large\u0026issueType=license)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fopenebs%2Fdynamic-localpv-provisioner?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)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenebs%2Fdynamic-localpv-provisioner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenebs%2Fdynamic-localpv-provisioner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenebs%2Fdynamic-localpv-provisioner/lists"}