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、磁盘扩容
可以选择手动扩容的方式