alibaba/open-local

cloud-native local storage management system for stateful workload, low-latency with simplicity

Go

515

428 commits

updated Dec 11, 2024

See the code

README

Open-Local

Go Report Card workflow build codecov

English | 简体中文

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.

Features

  • Local storage pool management
  • Dynamic volume provisioning
  • Extended scheduler
  • Volume expansion
  • Volume snapshot
  • Volume metrics
  • Raw block volume
  • IO Throttling(direct-io only)
  • Ephemeral inline volume

Open-Local Feature Matrix

FeatureOpen-Local VersionK8S Version
Node Disk poolingv0.1.0+1.18-1.20
Dynamic Provisioningv0.1.0+1.20-1.22
Volume Expansionv0.1.0+1.20-1.22
Volume Snapshotv0.1.0+1.20-1.22
LVM/Block Device/Mountpoints as fsv0.1.0+1.18-1.20
Raw Block Device(volumeMode: Block)v0.3.0+1.20-1.22
IO-Throttlingv0.4.0+1.20-1.22
CSI ephemeral volumesv0.5.0+1.20-1.22
IPv6 Supportv0.5.3+1.20-1.22
SPDK host devicev0.6.0+1.20-1.22
Read-write snapshotv0.7.0+1.20-1.22

Overall Architecture

┌─────────────────────────────────────────────────────────────────────────────┐
│ Master                                                                      │
│                   ┌───┬───┐           ┌────────────────┐                    │
│                   │Pod│PVC│           │   API-Server   │                    │
│                   └───┴┬──┘           └────────────────┘                    │
│                        │ bound                ▲                             │
│                        ▼                      │ watch                       │
│                      ┌────┐           ┌───────┴────────┐                    │
│                      │ PV │           │ Kube-Scheduler │                    │
│                      └────┘         ┌─┴────────────────┴─┐                  │
│                        ▲            │     open-local     │                  │
│                        │            │ scheduler-extender │                  │
│                        │      ┌────►└────────────────────┘◄───┐             │
│ ┌──────────────────┐   │      │               ▲               │             │
│ │ NodeLocalStorage │   │create│               │               │  callback   │
│ │    InitConfig    │  ┌┴──────┴─────┐  ┌──────┴───────┐  ┌────┴────────┐    │
│ └──────────────────┘  │  External   │  │   External   │  │  External   │    │
│          ▲            │ Provisioner │  │   Resizer    │  │ Snapshotter │    │
│          │ watch      ├─────────────┤  ├──────────────┤  ├─────────────┤    │
│    ┌─────┴──────┐     ├─────────────┴──┴──────────────┴──┴─────────────┤GRPC│
│    │ open-local │     │                 open-local                     │    │
│    │ controller │     │             CSI ControllerServer               │    │
│    └─────┬──────┘     └────────────────────────────────────────────────┘    │
│          │ create                                                           │
└──────────┼──────────────────────────────────────────────────────────────────┘
           │
┌──────────┼──────────────────────────────────────────────────────────────────┐
│ Worker   │                                                                  │
│          │                                                                  │
│          ▼                ┌───────────┐                                     │
│ ┌──────────────────┐      │  Kubelet  │                                     │
│ │ NodeLocalStorage │      └─────┬─────┘                                     │
│ └──────────────────┘            │ GRPC                     Shared Disks     │
│          ▲                      ▼                          ┌───┐  ┌───┐     │
│          │              ┌────────────────┐                 │sdb│  │sdc│     │
│          │              │   open-local   │ create volume   └───┘  └───┘     │
│          │              │ CSI NodeServer ├───────────────► VolumeGroup      │
│          │              └────────────────┘                                  │
│          │                                                                  │
│          │                                                 Exclusive Disks  │
│          │                ┌─────────────┐                  ┌───┐            │
│          │ update         │ open-local  │  init device     │sdd│            │
│          └────────────────┤    agent    ├────────────────► └───┘            │
│                           └─────────────┘                  Block Device     │
│                                                                             │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

Open-Localcontains four types of components:

  • Scheduler extender: as an extended component of Kubernetes Scheduler, adding local storage scheduling algorithm
  • CSI plugins: providing the ability to create/delete volume, expand volume and take snapshots of the volume
  • 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
  • Controller: getting the cluster initial configuration of the storage and deliver a detailed configuration list to Agents running on each node

Open-Local also includes a monitoring dashboard:

Who uses Open-Local

Open-Local has been widely used in production environments, and currently used products include:

  • ACK Distro
  • Alibaba Cloud ECP (Enterprise Container Platform)
  • Alibaba Cloud ADP (Cloud-Native Application Delivery Platform)
  • CNStack Products
  • AntStack Plus Products

User guide

More details here

Collecting User Cases

Before adopting open-local in production, k8s users usually want to know use cases for open-local. Please send us PR to update Use Cases with company, use case and since for wider adoption.

Contact

Join us from DingTalk: Group No.34118035

License

Apache 2.0 License

cloud-native
csi
kubernetes
localstorage
low-latency
lvm
snapshot
stateful-workloads
storage

alibaba/open-local

cloud-native local storage management system for stateful workload, low-latency with simplicity

Go

515

428 commits

updated Dec 11, 2024

See the code

README

Open-Local

Go Report Card workflow build codecov

English | 简体中文

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.

Features

  • Local storage pool management
  • Dynamic volume provisioning
  • Extended scheduler
  • Volume expansion
  • Volume snapshot
  • Volume metrics
  • Raw block volume
  • IO Throttling(direct-io only)
  • Ephemeral inline volume

Open-Local Feature Matrix

FeatureOpen-Local VersionK8S Version
Node Disk poolingv0.1.0+1.18-1.20
Dynamic Provisioningv0.1.0+1.20-1.22
Volume Expansionv0.1.0+1.20-1.22
Volume Snapshotv0.1.0+1.20-1.22
LVM/Block Device/Mountpoints as fsv0.1.0+1.18-1.20
Raw Block Device(volumeMode: Block)v0.3.0+1.20-1.22
IO-Throttlingv0.4.0+1.20-1.22
CSI ephemeral volumesv0.5.0+1.20-1.22
IPv6 Supportv0.5.3+1.20-1.22
SPDK host devicev0.6.0+1.20-1.22
Read-write snapshotv0.7.0+1.20-1.22

Overall Architecture

┌─────────────────────────────────────────────────────────────────────────────┐
│ Master                                                                      │
│                   ┌───┬───┐           ┌────────────────┐                    │
│                   │Pod│PVC│           │   API-Server   │                    │
│                   └───┴┬──┘           └────────────────┘                    │
│                        │ bound                ▲                             │
│                        ▼                      │ watch                       │
│                      ┌────┐           ┌───────┴────────┐                    │
│                      │ PV │           │ Kube-Scheduler │                    │
│                      └────┘         ┌─┴────────────────┴─┐                  │
│                        ▲            │     open-local     │                  │
│                        │            │ scheduler-extender │                  │
│                        │      ┌────►└────────────────────┘◄───┐             │
│ ┌──────────────────┐   │      │               ▲               │             │
│ │ NodeLocalStorage │   │create│               │               │  callback   │
│ │    InitConfig    │  ┌┴──────┴─────┐  ┌──────┴───────┐  ┌────┴────────┐    │
│ └──────────────────┘  │  External   │  │   External   │  │  External   │    │
│          ▲            │ Provisioner │  │   Resizer    │  │ Snapshotter │    │
│          │ watch      ├─────────────┤  ├──────────────┤  ├─────────────┤    │
│    ┌─────┴──────┐     ├─────────────┴──┴──────────────┴──┴─────────────┤GRPC│
│    │ open-local │     │                 open-local                     │    │
│    │ controller │     │             CSI ControllerServer               │    │
│    └─────┬──────┘     └────────────────────────────────────────────────┘    │
│          │ create                                                           │
└──────────┼──────────────────────────────────────────────────────────────────┘
           │
┌──────────┼──────────────────────────────────────────────────────────────────┐
│ Worker   │                                                                  │
│          │                                                                  │
│          ▼                ┌───────────┐                                     │
│ ┌──────────────────┐      │  Kubelet  │                                     │
│ │ NodeLocalStorage │      └─────┬─────┘                                     │
│ └──────────────────┘            │ GRPC                     Shared Disks     │
│          ▲                      ▼                          ┌───┐  ┌───┐     │
│          │              ┌────────────────┐                 │sdb│  │sdc│     │
│          │              │   open-local   │ create volume   └───┘  └───┘     │
│          │              │ CSI NodeServer ├───────────────► VolumeGroup      │
│          │              └────────────────┘                                  │
│          │                                                                  │
│          │                                                 Exclusive Disks  │
│          │                ┌─────────────┐                  ┌───┐            │
│          │ update         │ open-local  │  init device     │sdd│            │
│          └────────────────┤    agent    ├────────────────► └───┘            │
│                           └─────────────┘                  Block Device     │
│                                                                             │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

Open-Localcontains four types of components:

  • Scheduler extender: as an extended component of Kubernetes Scheduler, adding local storage scheduling algorithm
  • CSI plugins: providing the ability to create/delete volume, expand volume and take snapshots of the volume
  • 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
  • Controller: getting the cluster initial configuration of the storage and deliver a detailed configuration list to Agents running on each node

Open-Local also includes a monitoring dashboard:

Who uses Open-Local

Open-Local has been widely used in production environments, and currently used products include:

  • ACK Distro
  • Alibaba Cloud ECP (Enterprise Container Platform)
  • Alibaba Cloud ADP (Cloud-Native Application Delivery Platform)
  • CNStack Products
  • AntStack Plus Products

User guide

More details here

Collecting User Cases

Before adopting open-local in production, k8s users usually want to know use cases for open-local. Please send us PR to update Use Cases with company, use case and since for wider adoption.

Contact

Join us from DingTalk: Group No.34118035

License

Apache 2.0 License

cloud-native
csi
kubernetes
localstorage
low-latency
lvm
snapshot
stateful-workloads
storage

Project health

Overall

3.8/10

Maintained

0/10

Code review

6/10
OpenSSF Scorecard

Latest release

v0.7.1 · Apr 20, 2023

Releases this year

0

Significant stargazers

Peter Pan

79 followers · starred Feb 2023

Fu Wei

513 followers · starred Sep 2021

Min Jin

354 followers · starred Nov 2021

Arian van Putten

361 followers · starred Mar 2022