1. 方案背景和挑战
Ceph是一个高度可扩展、高性能的开源分布式存储系统,设计用于提供优秀的对象存储、块存储和文件存储服务。它的几个核心特点是:
- 弹性扩展:Ceph能够无缝地水平扩展存储容量和性能,只需添加新的存储节点即可,无需重新配置现有系统,非常适合云环境的动态需求;
- 自我修复:通过副本或纠删码技术,Ceph能够自动检测并修复数据损坏或丢失,保证数据的高可用性和持久性;
- 统一接口:Ceph提供RADOS GW(对象存储网关)、RBD(块设备映射)和CephFS(文件系统)三种接口,满足不同存储需求,且这些接口可以同时在一个集群中使用。
在Kubernetes(K8s)架构下,Ceph可以作为一个强大的存储后端,为容器化的应用提供持久化存储解决方案。Kubernetes通过存储卷插件与外部存储系统集成,Ceph正是通过这样的插件(如RBD插件)与K8s集成,实现存储资源的动态分配和管理。
架构如下图所示:
在传统方式下使用Ceph作为存储解决方案,会遇到一些局限性和挑战,尤其是在与现代云原生环境如Kubernetes集成时,这些问题可能会更加突出,具体表现为以下几个方面:
- RBD客户端运行于Host,消耗计算资源:传统部署模式下,Ceph的RBD(RADOS Block Device)客户端运行在宿主机(Host)层面,而非直接在容器内部。这意味着所有与Ceph交互的计算任务,包括I/O请求处理、错误恢复等,都需要宿主机的CPU资源来完成。在高负载情况下,这些额外的计算需求可能会对宿主机的资源分配产生压力,影响到运行在相同宿主机上的其他容器应用的性能。
- 使用RBD协议连接后端存储,性能受限:RBD协议虽然成熟且稳定,但在某些场景下,其性能表现可能不尽人意,尤其是在需要大量小I/O操作或高带宽传输的情况下。这是因为RBD协议在设计上更多考虑了数据的可靠性和一致性,而非极致的性能。这导致数据传输延迟较高,影响到依赖快速存储响应的应用性能,如数据库服务或大数据处理系统。
- 在Kubernetes架构下,无法直接利用DPU实现卸载和加速:随着DPU(Data Processing Unit)等硬件加速技术的兴起,其在数据处理、网络和存储任务中的加速能力备受瞩目。然而,在传统的Ceph与Kubernetes集成方案中,缺乏直接利用DPU卸载存储相关处理的能力,导致无法充分利用DPU提供的硬件加速优势,限制了存储性能的进一步提升和资源的高效利用。
鉴于以上挑战,探索和实施针对Kubernetes环境优化的Ceph部署方案,如通过专门的Ceph CSI(Container Storage Interface)插件支持DPU卸载,或是利用Ceph的其他高级功能与现代硬件加速技术紧密结合,成为了提升云原生应用存储性能和效率的关键方向。
2. 方案介绍
2.1. 整体架构
本方案采用云原生架构,引入DPU作为Kubernetes集群的Node,为集群之上的容器、虚机和裸金属实例提供存储服务的卸载和加速。整体架构如下所示:
本方案将K8s node分为不同的角色(node-role),不同的组件分别部署在不同的node,主要包含