TopoLVM介绍及实践
LVM在Kubernetes下的最佳实践方案–TopoLVM。
1. 简介
TopoLVM 是一种基于 LVM(Logical Volume Manager)的 CSI(Container Storage Interface)插件,专为 Kubernetes 环境设计,旨在提供拓扑感知的逻辑卷管理。它允许用户在特定节点上创建逻辑卷,并利用 LVM 的灵活性和高效性来管理 Kubernetes 集群中的存储资源。
TopoLVM 的主要特点包括:
-
拓扑感知: 支持在特定节点上创建逻辑卷,可以避免跨节点的数据移动,提升性能。
-
动态卷管理: 支持动态卷创建、删除和调整大小。
-
存储资源优化: 使用 LVM 的特性,可以实现对物理存储资源的更细粒度的管理和优化。
-
按需申请:以 PVC+StorageClass 的模式来提供服务,做到 PV 动态创建。而要实现这点,容量感知是关键,因为若调度到空间不足的节点上很明显是不合理的。最好能结合 PVC 申请的容量+Node 上的剩余容量,综合选择最优的节点来做绑定。
符合的 CSI 版本:1.5.0 。支持的平台有:
-
Kubernetes版本:1.28,1.29,1.30
-
节点系统:使用LVM2(*1)的linux系统,特别是在ubuntu上进行了测试。
-
CPU架构: x86(*2), arm64(*3), ppc64le(*3), s390x(*4)
-
文件系统:ext4, xfs, btrfs测试版(*5)
-
lvm版本:2.02.163 或更高(增加了 JSON 输出支持)
标记说明:
*1 如果你使用官方的 Docker 镜像并使用 xfs 文件系统,主机的 Linux 内核必须是 v4.9 或更高版本,支持 rmapbt 和 reflink。
*2 一级支持。官方提供 Docker 镜像,并通过 CI 测试了所有功能。
*3 二级支持。官方提供 Docker 镜像,但未通过 CI 测试。
*4 三级支持。没有提供 Docker 镜像,也没有通过 CI 测试,但构建了二进制文件。
*5 截至 v0.31.0,btrfs 仍处于测试阶段。可以在生产环境中使用,但我们的用户还没有广泛使用它。
Docker 镜像可以在 ghcr.io 上获取。
2. 架构
TopoLVM 基于 CSI,因此其架构遵循 Kubernetes CSI 开发者文档中描述的架构。
TopoLVM 组件包括:
- topolvm-controller:CSI 控制器服务。
- topolvm-scheduler:TopoLVM 的调度器扩展程序。
- topolvm-node:CSI 节点服务。
- lvmd:用于管理 LVM 卷的 gRPC 服务。
3. 前提条件
TopoLVM 运行的所有节点上都必须创建一个卷组。Helm Chart 中定义的默认卷组名称是 myvg1
。在要使用TopoLVM的Kubernetes集群的所有节点中创建名为myvg1
的VG。
# 我这里以新添加的sdb创建一个名为myvg1的VG
root