Ceph是一个高度可扩展、高性能的开源分布式存储系统,设计用于提供优秀的对象存储、块存储和文件存储服务。它的几个核心特点是:
在Kubernetes(K8s)架构下,Ceph可以作为一个强大的存储后端,为容器化的应用提供持久化存储解决方案。Kubernetes通过存储卷插件与外部存储系统集成,Ceph正是通过这样的插件(如RBD插件)与K8s集成,实现存储资源的动态分配和管理。
架构如下图所示:
在传统方式下使用Ceph作为存储解决方案,会遇到一些局限性和挑战,尤其是在与现代云原生环境如Kubernetes集成时,这些问题可能会更加突出,具体表现为以下几个方面:
鉴于以上挑战,探索和实施针对Kubernetes环境优化的Ceph部署方案,如通过专门的Ceph CSI(Container Storage Interface)插件支持DPU卸载,或是利用Ceph的其他高级功能与现代硬件加速技术紧密结合,成为了提升云原生应用存储性能和效率的关键方向。
本方案采用云原生架构,引入DPU作为Kubernetes集群的Node,为集群之上的容器、虚机和裸金属实例提供存储服务的卸载和加速。整体架构如下所示:
本方案将K8s node分为不同的角色(node-role),不同的组件分别部署在不同的node,主要包含:
本方案主要由csi-framework、opi-framework和storage三个部分组成,下面将对这三个部分进行介绍。
通过csi-framework我们能快速的接入第三方的存储,让第三方存储很方便的使用DPU的能力。其包括csi-controller、csi-node-host和csi-node-dpu,主要职责是为K8s的负载提供不同的存储能力。
2.2.1.1. csi-controller
Csi-controller以deployment的形式部署在master节点,其架构如下图所示:
在csi-controller pod中,包含对接存储的csi-controller容器,主要用于在对接存储上创建卷,除此之外,为了让对接存储也能用nvmeof的方式,本架构也开发了对应的插件系统,由插件负责NVMe-oF target的管理。
结合K8s csi的external plugin,csi-controller主要实现以下两类功能:
2.2.1.2. csi-node
Csi-node以daemonset的形式,部署在所有节点,其架构如下图所示:
在csi-node的架构中,没有整合第三方的csi-node,是因为第三方csi-node往往是针对非DPU的场景,所以在本框架中,也是使用插件系统,对接不同的第三方存储。插件系统主要用于直连存储,比如通过RBD或者ISCSI,会在本地生成一个块设备,最后把这个块设备再以AIO的方式挂载到PCIE上;如果是使用本框架的NVMe-oF的方式,由csi-node-dpu负责从va获取对应的连接信息,连接NVMe-oF target。
Csi-node按node角色分为csi-node-dpu、csi-node-host和csi-node-default,不同角色的csi-node功能不同,下面分别加以说明:
主要用来兼容不同卡的功能,对上提供统一的接口;通过opi-framework,我们能将第三方存储快速对接到其他DPU。不同DPU通过opi-bridge对接到opi框架,再由volume-attacher提供opi框架没有的功能,其架构如下图所示:
Opi-framewark包括volume-attacher、opi-yusur-bridge、opi-nvidia-bridge和SPDK,提供存储卸载和加速能力。
除了第三方或者开源的存储系统之外,还提供一个GATEWAY,GATEWAY的能力就是在靠近存储的地方(所以往往和存储系统部署在一起),把卷通过NVMe-oF target的方法是暴露出去;同时支持NVMe-oF multipath实现高可用。
首先创建pvc,然后在pod的volumes中以Block或者Filesystem的方式使用pvc,关键参数如下所示:
##pvc-xxx.yaml 关键参数
storageClassName: class-ceph ## 通过不同的storageclass,使用AIO或者nvmeof的方式
创建后,相关资源信息如下:
查看对应的bdev,如下所示:
查看对应的bdev,如下所示:
本方案基于单节点ceph创建单副本存储池,在以下测试场景与传统ceph方案进行对比:
测试不同blocksize下的随机读写指标包括iops,吞吐,延迟和Host CPU消耗。
测试结果如下:
从上图我们可以得出以下结论:
随机读iops如下图所示:
如上图所示,可以得出如下结论:
测试结果如下:
如上图所示,可以得出如下结论:
随机读场景下的延迟,如下所示:
测试结果如下:
如上图所示,可以得出如下结论:
随机读场景下的资源消耗,如下所示:
基于DPU(Data Processing Unit)的Ceph存储解决方案,为云原生存储领域带来了显著的资源优化,在性能上也有一定改善,具体优势体现在以下几个方面:
1. 资源效率大幅提升:通过将Ceph的控制面和数据面操作下沉至DPU处理,显著减轻了宿主机(Host)的资源消耗。测试结果显示,在并行度为8的场景下,blocksize为4KB时,宿主机CPU资源的使用率明显下降,从502%的消耗,降低到了仅45%,这意味着在实际应用场景中,将大大节省了宝贵的CPU资源,让这些资源能够被应用服务更高效地利用。
2. 性能保持与优化:在对比分析中,基于DPU的Ceph解决方案不仅保持了与传统Ceph部署在性能上的竞争力,而且还展示了显著的提升潜力。通过对比使用Host-NVMe-CLI(分别通过TCP和RDMA协议)、NVMe/TCP和NVMe/RDMA的传统Ceph性能数据,发现基于DPU的方案并未降低原有的Ceph性能表现,反而在某些指标上有所增强。特别是当直接对比基于Host的RBD访问、NVMe/TCP和NVMe/RDMA的性能时,DPU方案展现出了超越这些传统访问方式的性能提升,这表明DPU不仅有效卸载了存储处理任务,还通过其硬件加速特性提升了存储I/O性能。
3. 填补Kubernetes生态空白:在Kubernetes(K8s)生态系统中,虽然有多种存储解决方案和插件,但之前缺乏针对DPU优化的存储卸载和加速服务。这一自研的基于DPU的Ceph解决方案,填补了这一技术空白,为Kubernetes环境下的应用提供了更高效、低延迟的存储支持。通过集成DPU加速能力,不仅增强了云原生应用的存储性能,还为用户提供了更多选择和优化存储配置的灵活性,有助于提升整个云平台的运行效率和成本效益。
综上所述,基于DPU的Ceph存储解决方案通过自研的Kubernetes组件、引入DPU深度优化存储处理流程,显著降低了宿主机资源消耗,保持甚至提升了存储性能,同时为Kubernetes生态引入了创新的存储加速服务,是面向未来云原生架构的重要技术进步。
本方案来自于中科驭数软件研发团队,团队核心由一群在云计算、数据中心架构、高性能计算领域深耕多年的业界资深架构师和技术专家组成,不仅拥有丰富的实战经验,还对行业趋势具备敏锐的洞察力,该团队致力于探索、设计、开发、推广可落地的高性能云计算解决方案,帮助最终客户加速数字化转型,提升业务效能,同时降低运营成本。
作者: Yusur_Tech, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3991230.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论