Code Monkey home page Code Monkey logo

open-local's Introduction

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

Feature Open-Local Version K8S Version
Node Disk pooling v0.1.0+ 1.18-1.20
Dynamic Provisioning v0.1.0+ 1.20-1.22
Volume Expansion v0.1.0+ 1.20-1.22
Volume Snapshot v0.1.0+ 1.20-1.22
LVM/Block Device/Mountpoints as fs v0.1.0+ 1.18-1.20
Raw Block Device(volumeMode: Block) v0.3.0+ 1.20-1.22
IO-Throttling v0.4.0+ 1.20-1.22
CSI ephemeral volumes v0.5.0+ 1.20-1.22
IPv6 Support v0.5.3+ 1.20-1.22
SPDK host device v0.6.0+ 1.20-1.22
Read-write snapshot v0.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

open-local's People

Contributors

thebeatles1994 avatar peter-wangxu avatar chzhj avatar dongjiang1989 avatar lihezhong93 avatar caiwenzh avatar laurencelizhixin avatar rafi avatar tzzcfrank avatar vincecui avatar alibaba-oss avatar jenting avatar allencloud avatar caoyingjunz avatar coolhok avatar hyschumi avatar j4ckstraw avatar luokp avatar withlin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.