English | 简体中文
Open-Local
是由多个组件构成的本地磁盘管理系统,目标是解决当前 Kubernetes 本地存储能力缺失问题。通过Open-Local
,使用本地存储会像集中式存储一样简单。
Open-Local
已广泛用于生产环境,目前使用的产品包括:
- ACK 发行版
- 阿里云 ADP (云原生应用交付平台)
- 云原生 CNStack 产品
- 蚂蚁金融分布式架构 SOFAStack
- 本地存储池管理
- 存储卷动态分配
- 存储调度算法扩展
- 存储卷扩容
- 存储卷快照
- 存储卷监控
- 原生块设备
- IO 限流(仅支持direct-io)
- 临时卷
特性 | 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在更多的场景下落地并更加成熟。
详见文档