Skip to content

Latest commit

 

History

History
119 lines (99 loc) · 9 KB

README_zh_CN.md

File metadata and controls

119 lines (99 loc) · 9 KB

Open-Local - 云原生本地磁盘管理系统

Go Report Card workflow build codecov

English | 简体中文

Open-Local是由多个组件构成的本地磁盘管理系统,目标是解决当前 Kubernetes 本地存储能力缺失问题。通过Open-Local使用本地存储会像集中式存储一样简单

Open-Local已广泛用于生产环境,目前使用的产品包括:

特性

  • 本地存储池管理
  • 存储卷动态分配
  • 存储调度算法扩展
  • 存储卷扩容
  • 存储卷快照
  • 存储卷监控
  • 原生块设备
  • IO 限流(仅支持direct-io)
  • 临时卷

Open-Local版本能力矩阵

特性 Open-Local版本 K8S版本
节点磁盘池化(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
卷快照(Snapshot) v0.1.0+ 1.20-1.22
LVM/块设备/本地路径 v0.1.0+ 1.18-1.20
块设备挂载(volumeMode: Block) v0.3.0+ 1.20-1.22
IO限流(IO-Throttling) v0.4.0+ 1.20-1.22
本地临时盘(CSI ephemeral volumes) v0.5.0+ 1.20-1.22
IPv6支持 v0.5.3+ 1.20-1.22
SPDK设备支持 v0.6.0+ 1.20-1.22
读写快照(read-write snapshot) v0.7.0+ 1.20-1.22

架构

┌─────────────────────────────────────────────────────────────────────────────┐
│ 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-Local包含四大类组件:

  • Scheduler-Extender: 作为 Kubernetes Scheduler 的扩展组件,通过 Extender 方式实现,新增本地存储调度算法
  • CSI: 按照 CSI(Container Storage Interface) 标准实现本地磁盘管理能力
  • Agent: 运行在集群中的每个节点,根据配置清单初始化存储设备,并通过上报集群中本地存储设备信息以供 Scheduler-Extender 决策调度
  • Controller: 获取集群存储初始化配置,并向运行在各个节点的 Agent 下发详细的配置清单

若集群中部署有 Prometheus 和 Grafana,部署 Open-Local 时也可选择性安装监控大盘:

用户案例收集

在生产环境中采用open-local之前,k8s用户通常想知道open-local的用户案例。 请将这些信息通过PR更新在用户案例 中,包括公司用例采用时间,以帮助open-local在更多的场景下落地并更加成熟。

用户手册

详见文档

许可证

Apache 2.0 License