{"id":13461395,"url":"https://github.com/alibaba/open-local","last_synced_at":"2025-05-15T07:03:49.247Z","repository":{"id":37096422,"uuid":"390184133","full_name":"alibaba/open-local","owner":"alibaba","description":"cloud-native local storage management system for stateful workload, low-latency with simplicity","archived":false,"fork":false,"pushed_at":"2024-12-11T03:43:05.000Z","size":23954,"stargazers_count":488,"open_issues_count":39,"forks_count":85,"subscribers_count":21,"default_branch":"main","last_synced_at":"2025-05-15T07:03:14.562Z","etag":null,"topics":["cloud-native","csi","kubernetes","localstorage","low-latency","lvm","snapshot","stateful-workloads","storage"],"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/alibaba.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-28T02:16:17.000Z","updated_at":"2025-05-09T07:54:30.000Z","dependencies_parsed_at":"2023-11-24T06:47:10.018Z","dependency_job_id":"63e7b638-699d-4932-b67a-4ff241037eaf","html_url":"https://github.com/alibaba/open-local","commit_stats":null,"previous_names":["oecp/open-local"],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fopen-local","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fopen-local/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fopen-local/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fopen-local/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alibaba","download_url":"https://codeload.github.com/alibaba/open-local/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254291961,"owners_count":22046424,"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":["cloud-native","csi","kubernetes","localstorage","low-latency","lvm","snapshot","stateful-workloads","storage"],"created_at":"2024-07-31T11:00:37.732Z","updated_at":"2025-05-15T07:03:49.228Z","avatar_url":"https://github.com/alibaba.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# Open-Local\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/alibaba/open-local)](https://goreportcard.com/report/github.com/alibaba/open-local)\n![workflow build](https://github.com/alibaba/open-local/actions/workflows/build.yml/badge.svg)\n[![codecov](https://codecov.io/gh/alibaba/open-local/branch/main/graphs/badge.svg)](https://codecov.io/gh/alibaba/open-local)\n\nEnglish | [简体中文](./README_zh_CN.md)\n\n`Open-Local` is a **local disk management system** composed of multiple components. With `Open-Local`, **using local storage in Kubernetes will be as simple as centralized storage**.\n\n## Features\n\n- Local storage pool management\n- Dynamic volume provisioning\n- Extended scheduler\n- Volume expansion\n- Volume snapshot\n- Volume metrics\n- Raw block volume\n- IO Throttling(direct-io only)\n- Ephemeral inline volume\n\n## Open-Local Feature Matrix\n\n| Feature                             | Open-Local Version | K8S Version |\n| ----------------------------------- | ------------------ | ----------- |\n| Node Disk pooling                   | v0.1.0+            | 1.18-1.20   |\n| Dynamic Provisioning                | v0.1.0+            | 1.20-1.22   |\n| Volume Expansion                    | v0.1.0+            | 1.20-1.22   |\n| Volume Snapshot                     | v0.1.0+            | 1.20-1.22   |\n| LVM/Block Device/Mountpoints as fs  | v0.1.0+            | 1.18-1.20   |\n| Raw Block Device(volumeMode: Block) | v0.3.0+            | 1.20-1.22   |\n| IO-Throttling                       | v0.4.0+            | 1.20-1.22   |\n| CSI ephemeral volumes               | v0.5.0+            | 1.20-1.22   |\n| IPv6 Support                        | v0.5.3+            | 1.20-1.22   |\n| SPDK host device                    | v0.6.0+            | 1.20-1.22   |\n| Read-write snapshot                 | v0.7.0+            | 1.20-1.22   |\n\n## Overall Architecture\n\n```\n┌─────────────────────────────────────────────────────────────────────────────┐\n│ Master                                                                      │\n│                   ┌───┬───┐           ┌────────────────┐                    │\n│                   │Pod│PVC│           │   API-Server   │                    │\n│                   └───┴┬──┘           └────────────────┘                    │\n│                        │ bound                ▲                             │\n│                        ▼                      │ watch                       │\n│                      ┌────┐           ┌───────┴────────┐                    │\n│                      │ PV │           │ Kube-Scheduler │                    │\n│                      └────┘         ┌─┴────────────────┴─┐                  │\n│                        ▲            │     open-local     │                  │\n│                        │            │ scheduler-extender │                  │\n│                        │      ┌────►└────────────────────┘◄───┐             │\n│ ┌──────────────────┐   │      │               ▲               │             │\n│ │ NodeLocalStorage │   │create│               │               │  callback   │\n│ │    InitConfig    │  ┌┴──────┴─────┐  ┌──────┴───────┐  ┌────┴────────┐    │\n│ └──────────────────┘  │  External   │  │   External   │  │  External   │    │\n│          ▲            │ Provisioner │  │   Resizer    │  │ Snapshotter │    │\n│          │ watch      ├─────────────┤  ├──────────────┤  ├─────────────┤    │\n│    ┌─────┴──────┐     ├─────────────┴──┴──────────────┴──┴─────────────┤GRPC│\n│    │ open-local │     │                 open-local                     │    │\n│    │ controller │     │             CSI ControllerServer               │    │\n│    └─────┬──────┘     └────────────────────────────────────────────────┘    │\n│          │ create                                                           │\n└──────────┼──────────────────────────────────────────────────────────────────┘\n           │\n┌──────────┼──────────────────────────────────────────────────────────────────┐\n│ Worker   │                                                                  │\n│          │                                                                  │\n│          ▼                ┌───────────┐                                     │\n│ ┌──────────────────┐      │  Kubelet  │                                     │\n│ │ NodeLocalStorage │      └─────┬─────┘                                     │\n│ └──────────────────┘            │ GRPC                     Shared Disks     │\n│          ▲                      ▼                          ┌───┐  ┌───┐     │\n│          │              ┌────────────────┐                 │sdb│  │sdc│     │\n│          │              │   open-local   │ create volume   └───┘  └───┘     │\n│          │              │ CSI NodeServer ├───────────────► VolumeGroup      │\n│          │              └────────────────┘                                  │\n│          │                                                                  │\n│          │                                                 Exclusive Disks  │\n│          │                ┌─────────────┐                  ┌───┐            │\n│          │ update         │ open-local  │  init device     │sdd│            │\n│          └────────────────┤    agent    ├────────────────► └───┘            │\n│                           └─────────────┘                  Block Device     │\n│                                                                             │\n│                                                                             │\n└─────────────────────────────────────────────────────────────────────────────┘\n```\n\n`Open-Local`contains four types of components:\n\n- Scheduler extender: as an extended component of Kubernetes Scheduler, adding local storage scheduling algorithm\n- CSI plugins: providing the ability to create/delete volume, expand volume and take snapshots of the volume\n- Agent: running on each node in the K8s cluster, initializing the storage device according to the configuration list, and reporting local storage device information for Scheduler extender\n- Controller: getting the cluster initial configuration of the storage and deliver a detailed configuration list to Agents running on each node\n\n`Open-Local` also includes a monitoring dashboard:\n\n![](docs/imgs/open-local-dashboard.png)\n\n## Who uses Open-Local\n\n`Open-Local` has been widely used in production environments, and currently used products include:\n\n- [ACK Distro](https://github.com/AliyunContainerService/ackdistro)\n- Alibaba Cloud ECP (Enterprise Container Platform)\n- Alibaba Cloud ADP (Cloud-Native Application Delivery Platform)\n- [CNStack Products](https://github.com/alibaba/CNStackCommunityEdition)\n- AntStack Plus Products\n\n## User guide\n\nMore details [here](docs/user-guide/user-guide.md)\n\n## Collecting User Cases\nBefore adopting open-local in production, k8s users usually want to know use cases for open-local.\nPlease send us PR to update [Use Cases](docs/use-cases.md) with `company`, `use case` and `since` for wider adoption.\n\n## Contact\n\nJoin us from DingTalk: Group No.34118035\n\n## License\n\n[Apache 2.0 License](LICENSE)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falibaba%2Fopen-local","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falibaba%2Fopen-local","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falibaba%2Fopen-local/lists"}