open-local

446 阅读4分钟

1、概述

open-local 是阿里巴巴开源的一款本地存储管理系统。通过 open-local,在 Kubernetes 上使用本地存储就像使用集中式存储一样简单。目前 open-local 支持以下存储特性: 本地存储池管理、存储卷动态分配、存储调度算法扩展、存储卷扩容、存储卷快照、存储卷监控、存储卷 IO 限流、原生块设备及临时卷。

2、为什么要用用open-local?

如果你要使用open-local 一定要满足 你服务本身是分布式的,如果你服务本身不是分布式的。依赖存储实现分布式,那么不建议使用。可以使用minio ceph等分布式存储。

像zk这种服务,它本身是分布式的,不依赖存储,open-local这种方式比hostpath要好一些,实现集中分布式的管理

目前的存储类型:一种是持久化存储(PV)和网络共享存储,一种是本地存储(HostPath)。

  • 网络共享存储像cephfs这些,支持高可用,维护成本较高,可以通过pv/pvc等方式挂载,但是会影响磁盘性能。
  • 本地存储(HostPath):通过 Hostpath 无法做到节点保持,使得 Pod 漂移后应用数据丢失;而使用半自动静态 Local PV 可保证节点保持,但是无法实现全自动,仍然需要为人为参与(如创建文件夹路径,为节点打标等);无法使用一些高级存储能力(例如快照)。

他们单个都不满足我们的需求,我们需要的是既可以使用pv/pvc这种方式集中管理磁盘,也想有本地磁盘的速度。 针对以上问题,open-local就比较符合我们的需求。相当于是二者的集合

4、架构

open-local 包含四个组件:

1、scheduler-extender: 作为 Kube-Scheduler 的扩展组件,通过 Extender 方式实现,新增本地存储调度算法。

2、CSI 插件: 按照 CSI(Container Storage Interface) 标准实现本地磁盘管理能力,包含创建/删除/扩容存储卷、创建/删除快照、暴露存储卷 metrics 等能力。

3、 agent: 运行在集群中的每个节点,根据配置清单初始化存储设备,并通过上报集群中本地存储设备信息以供 Scheduler-Extender 决策调度。

4、controller: 获取集群存储初始化配置,并向运行在各个节点的 Agent 下发详细的资源配置清单。

open-local 包含两个 CRD

1、NodeLocalStorage: open-local 通过 NodeLocalStorage 资源上报每个节点上的存储设备信息,该资源由 controller 创建,由每个节点的 agent 组件更新其 status。该 CRD 属于全局范围的资源。

2、NodeLocalStorageInitConfig: open-local controller 可通过 NodeLocalStorageInitConfig 资源创建每个 NodeLocalStorage 资源。NodeLocalStorageInitConfig 资源中包含全局默认节点配置和特定节点配置,若节点的 node label 满足表达式则使用特定节点配置,否则使用默认配置

存储类型

目前支持两种存储类型:

  • LVM: 共享盘类型,即通过 LVM 方式管理存储设备。当在 K8s 中创建 PV 资源时,Open-Local会从对应 VolumeGroup 中创建 LogicalVolume 来代表该PV。
  • Device: 独占盘类型,即一个 PV 一个块设备。这里块设备可以是一整块磁盘,也可以是一个分区。

需要注意的是:独占盘类型的 PV 不支持 PV 扩容、PV 快照等操作。

5、部署

集群中默认并没有供分配的独占盘。需要用户手动配置对应节点的 NodeLocalStorage 资源。

wget https://github.com/alibaba/open-local/archive/refs/tags/v0.7.0.tar.gz
tar xf v0.7.0.tar.gz
cd open-local-0.7.0/helm
helm install open-local .
[root@iZbp1ivvojxl3kdojcbphbZ helm]# kubectl  -n kube-system get pod  |grep open-local
open-local-agent-2gspz                                    3/3     Running     0          7m59s
open-local-agent-5njhp                                    3/3     Running     0          7m59s
open-local-agent-8rgrs                                    3/3     Running     0          7m59s
open-local-agent-dnm8b                                    3/3     Running     0          7m59s
open-local-agent-z5tvq                                    3/3     Running     0          7m59s
open-local-controller-6bd8bd7bb5-wcj4k                    6/6     Running     0          7m59s
open-local-scheduler-extender-bff95b6d-vdxrx              1/1     Running     0          3m39s

186已经创建了vgs,185因为已经有了文件系统,所有没有创建vg

查看有哪些纳管到了open-local

for i in {5..9};do echo "172.16.165.18$i";kubectl get nodelocalstorage -ojson cn-hangzhou.172.16.165.18$i|jq .status.filteredStorageInfo ;done   

如上图可以看到186和188成功纳管到open-local中

6、验证

我这里部署了一个nginx进行验证,申请了5G大小

7、扩容

直接从5G扩容到30G

数据正常

8、磁盘扩容

可以选择手动扩容的方式