1. 背景介绍
1.1. 业务背景
在云原生技术迅速发展的当下,容器技术因其轻量级、可移植性和快速部署的特性而成为应用部署的主流选择,但裸金属服务器依然有其独特的价值和应用场景,是云原生架构中不可或缺的一部分。
裸金属服务器是一种高级的云计算解决方案,它成功地融合了传统云主机的灵活性、便捷性与物理服务器的强大性能与独立性。作为一类特别设计的计算类云服务,裸金属服务器直接向用户提供了云端部署的专属物理服务器,这意味着客户不再需要与其他租户共享硬件资源,从而确保了资源的独占性、性能的最优化以及数据的最高级别安全。
这种服务模式特别适合那些运行核心数据库系统、承载关键业务应用、实施大规模高性能计算项目或处理海量大数据分析的任务。裸金属服务器以其强大的计算能力,能够高效处理复杂的计算密集型作业,同时保证了低延迟和高吞吐量,是驱动企业数字化转型和创新业务场景的重要基石。
1.2. 问题与挑战
传统的裸金属服务通常采用Openstack Ironic架构,并通过PXE和TFTP实现安装引导流程,服务器的本地盘作为裸金属服务器的存储资源。这种方式导致了用户体验差、灵活性不足等诸多问题,难以满足用户越来越高的业务和技术需求。
Ironic 采用本地物理盘进行启动时,首先将远程镜像下载并写入到本地物理盘中,然后再从本地盘启动进入系统。流程如下:
可以看到,其重点是通过 PXE 启动一个小系统(在内存中运行),这个小系统中运行了 Ironic 定制的 ironic-python-agent(简称 IPA),IPA 负责从 Glance 下载真正的用户镜像,并写入到本地磁盘上。
物理服务器支持基于云盘的无盘启动方式,Ironic 也支持无盘启动,但目前支持的协议有限,仅支持 iSCSI Boot,且仍然依赖PXE。
目前在云原生生态中,提供裸金属服务的开源组件只有 metal3(或称Metal Kubed),但我们对其调研后发现,metal3只是抽象了裸金属的一个生命周期状态机,但裸金属本身的网络、存储、镜像管理等都依赖外部实现,而且目前仅有基于 Ironic 的实现。因此,相关的方案架构和 Ironic 没有区别。
因此,我们总结裸金属服务器部署和存储的关键痛点:
- 部署周期长:传统裸金属服务采用PXE+TFTP技术安装引导,部署时间长(约20分钟),主要耗时在三个环节:(1)两次启动,(2)镜像下载,(3)镜像写入本地盘。这导致了业务弹性不足和效率低下,最终用户体验较差。
- 存储能力弱:服务器本地盘作为系统盘,无法实现灵活扩容、整机克隆和冷迁移等操作;数据保存在本地,如果挂载云存储则需要侵入用户镜像,且云存储客户端运行于 Host,消耗计算资源,影响运维效率和使用体验。
- 在云原生生态下无解决方案:目前在Kubenetes架构下,无法支持裸金属服务,不能以云原生统一的方式实现裸金属服务器的创建、删除、重启等操作,导致管理效率低下,服务器资源利用率低。
2. 方案介绍
2.1. 整体架构
为了解决传统裸金属服务方案的问题,中科驭数基于DPU开发了全新的云原生裸金属服务解决方案,整体架构图如下:
在本方案中,DPU支持裸金属服务器的网络和存储资源虚拟化,使得物理服务器能够像虚拟机一样灵活配置,动态添加或删除网卡、硬盘等资源。这为裸金属服务器提供了类似云服务的弹性,同时保持了物理机级别的性能。另外,DPU能够管理远程存储资源,如云盘,使得裸金属服务器可以使用云存储服务,同时通过DPU加速存储I/O,提高读写性能,使得云盘接近本地存储的体验。
我们定义了一类名为 BareMetalMachine 的 CRD 资源来管理裸金属实例,并自研了相关的 Kubenetes组件管理裸金属的生命周期,包含以下关键组件:
bmctl:类似于 kubectl 的一个便于操作裸金属的命令行工具。
bm-controller:裸金属核心控制器,工作在 master 节点。负责裸金属对象生命周期的管理,通过 BMC 来操作裸金属服务器的电源(开关机、重启等)状态。
bm-api:作为K8s APIServer 的扩展,封装裸金属的 api 接口,实现 console、重启等功能。
bm-handler:作为DaemonSet 部署在 DPU Soc 上,负责该DPU上裸金属的管理。
ycloud-cni:为裸金属提供虚拟网卡配置功能,调用 OVS 进行配置。
ycloud-csi:为裸金属提供云盘挂载功能,最终通过SPDK 进行配置,SPDK 通过 PCIe给裸金属模拟磁盘。是一个框架,对接到外部或开源的 CSI Driver。
以上组件均为自研,完全基于云原生生态,在用户平面实现和Kubevirt虚机类似的管理操作,填补了云原生生态中管理裸金属服务的空白。
2.2. 方案描述
在基于DPU的裸金属服务方案下,实现了裸金属的部署启动、云盘热插拔、热扩容、cloudinit、冷迁移、快照恢复及克隆等常用功能,以下对主要部分做详细描述,并和传统 Ironic 方案进行部分对比。
2.2.1. 基于DPU的无盘启动方案
在基于 DPU 的方案中,我们采用直接挂载云盘系统的方式,不使用本地盘,过程如下:
bm-controller 根据裸金属资源描述,创建系统盘对应的 PVC,指定从原始镜像所在的PVC 进行克隆。
ycloud-csi 监听到 PVC 创建后,调用后端存储以快照方式克隆原始镜像卷,创建新的镜像卷。远程存储卷拷贝的时候采用的是快照方式(COW),并不是完整拷贝,速度很快,一般在数秒内完成。
镜像卷创建完成后,ycloud-csi 将其映射到DPU,调用 SPDK 进行配置,给Host 侧挂载对应的系统盘。
系统盘挂载完成后,bm-controller 通过 BMC重启裸金属节点,此时BIOS 能扫描到系统盘,启动进入系统,裸金属启动完成。
与Ironic 方案相比,没有 PXE 过程,也只需启动一次。
2.2.2. 存储对接
Ironic 存储对接方案:
Ironic 的存储对接在 Host 侧,Host 网络需和存储网络连通,且Host 中如安装相关组件,如下图:
为了完成云盘的挂载/卸载,Host 中需要安装一个 ironic-agent 及相应存储客户端,ironic-agent调用存储客户端完成云盘的挂载/卸载操作。Ironic 的 StorageDriver 会配置好存储服务端,并调用 ironic-agent 完成云盘的操作。
基于DPU的存储对接方案:
在基于DPU 的方案中,存储对接在DPU 侧,如下图所示:
裸金属上看到的盘,是DPU 上的 SPDK 通过 PCIe 模拟的设备。存储网络也是由 OVS 连接的和配置的。为了便于系统组件通过统一的框架屏蔽存储的细节,我们开发了ycloud-csi 这个基于 DPU的通用框架,可以和多种外部 CSI Driver进行对接。ycloud-csi 和 API Server 通信,监听 PVC 的更新,通过 CSI Driver 调用后端存储,并调用 SPDK 给Host 配置相应的模拟盘。
与 Ironic 方案相比,存储相关组件全部下沉到了DPU侧,存储网络也统一通过 DPU 侧OVS 对外连接,Host侧屏蔽了网络细节。
2.2.3. 硬盘热插拔
如Ironic存储对接方案中所示,Ironic 中的 StorageDriver 调用 Host 中的 ironic-agent 完成硬盘热插拔,用户镜像需安装相关依赖。
在基于 DPU 的方案中,由于裸金属上的盘是 DPU 通过PCIe 模拟的,因此,通过动态调整 DPU 上的 SPDK 配置,即可实现硬盘的热插拔。
2.2.4. 硬盘热扩容
Ironic 中,支持云盘热扩容,在 Cinder 中调整存储卷的大小后,刷新客户端即可。
在基于 DPU 的方案中,ycloud-csi 调用存储完成后端存储卷的扩容,然后通过 SPDK 支持 bdev 的热扩容,并通过PCIe 通知到 Host侧。
3. 方案测试结果
3.1. K8s上裸金属创建及管理
与其他K8s 资源的创建类似,裸金属的通过一个yaml描述进行创建,类似以下命令:
|------------------------------|
| kubectl apply -f bm-xxx.yaml |
(由于描述yaml较长,这里不贴出)
创建后,可通过 kubectl 命令查看:
可以看到bm-01、bm-02及 bm-node3三个裸金属实例,均为 Running 状态。
我们提供了类似 kubectl 的一个 bmctl 命令行工具,方便进行管理维护。通过该命令,可以方便的进行开关机、重启、硬盘插拔、网卡插拔等操作:
3.2. 部署启动时间
我们定义裸金属的部署启动时间为:下发创建裸金属实例的命令,到裸金属实例网络 IP 可以ping 通的时间。
在联创万通 LCWT R7220 服务器上,镜像 OS 为 Ubuntu 22.04 Server,内核版本为 5.15.0-106-generic 时测得的启动时间:
从创建到可ping 通共耗时 153 秒(2min33s)。
基于DPU的裸金属服务方案启动时间在 2-3min 内,具体耗时取决于服务器类型和镜像版本。相比之下,我们测试传统 Ironic 本地盘方式在 20min 以上。
3.3. CPU消耗
在裸金属实例上对多块盘同时执行 fio 测试,查看 CPU 消耗,可以看到,由于存储组件全部卸载到了DPU侧,Host几乎没有 CPU 消耗(fio 和 top 进程除外):
相比之下,若 Host 直接运行 Ceph RBD客户端连接存储,fio 读写时,通过Top可看到 RBD 内核进程:
将以上Ceph RBD 内核进程的消耗CPU 百分百相加,可以看到,fio读写时消耗CPU为**++235.2%++**,超过200%(即2个物理Core),在更多的盘读写时,会消耗更多CPU:
3.4. 硬盘热插拔
本测试为在不关机重启的情况下插拔云盘,测试结果显示可正常操作。
拔盘前:
拔盘后:
插入新盘后:
3.5. 硬盘热扩容
热扩容测试时,使用 fio 对目标盘进行读写,扩容过程中fio 的数据操作不受影响。
扩容前:
扩容后:
4. 总结
4.1. 方案优势
本方案创新性地在云原生架构框架下融入裸金属服务,依托自研的Kubenetes插件,巧妙运用DPU技术,实现系统盘与数据盘的云端托管,显著优化资源配置与管理效能。其核心优势概览如下:
•填补空白,引领创新:鉴于目前云原生生态系统中缺乏成熟的开源裸金属服务解决方案,本方案的成功实施不仅填补了这一市场和技术空白,更为行业树立了新的标杆,推动了云原生技术的深入发展与应用。
•加速部署,效率飞跃:依托DPU驱动的云盘启动机制,与传统的本地盘启动方式相比,本方案极大提升了裸金属服务器的交付速度,部署时间从20分钟锐减至大约2分钟,显著增强了业务敏捷性。
•深度整合,简化管理:通过DPU挂载云盘,将裸金属服务器的控制面与数据面下沉至DPU层面,无需依赖用户自定义镜像,且存储客户端功能与用户系统完全隔离,确保了环境的纯净与管理的便捷。
•强化安全,隐匿复杂性:该方案有效屏蔽存储网络架构及后端存储细节,既增强了存储层面的安全防御能力,又简化了运维视图,提升了整体系统的安全性和可维护性。
•资源优化,专注业务:通过将存储功能外移到DPU,彻底释放了裸金属服务器本身的资源约束,确保所有服务器资源都能集中服务于业务需求,极大提升了资源的有效利用率。
•性能卓越,逼近本地:充分利用DPU提供的硬件加速能力,本方案中的云盘性能逼近甚至达到本地硬盘水平,确保了数据访问的高速度与低延迟,满足了高性能计算与大数据处理的严苛要求。
综上所述,本方案凭借其在部署效率、资源管理、安全性能、资源优化及技术创新方面的显著优势,为云原生环境下的裸金属服务应用开辟了新的路径,展现了强大的竞争力和前瞻视野。
4.2. 未来与展望
随着企业对高性能计算、数据安全及业务敏捷性的需求日益增长,本方案将进一步整合云原生架构的灵活性与物理服务器的性能优势,助力客户在激烈的市场竞争中脱颖而出。客户将享受到更短的业务上线时间、更低的总体拥有成本(TCO)、更强的数据安全性和定制化的高性能计算环境,从而加速数字化转型,推动业务创新与发展。
伴随云原生技术的普及与深化,裸金属服务作为关键基础设施之一,其市场需求将持续攀升,特别是在金融、电信、医疗、大数据分析和AI训练等对计算性能和数据隔离有着极高要求的行业。本方案以其独特的技术优势,有望成为行业标准,吸引更广泛的客户群体,推动整个云服务市场的多元化与高端化发展。
本方案来自于中科驭数软件研发团队,团队核心由一群在云计算、数据中心架构、高性能计算领域深耕多年的业界资深架构师和技术专家组成,不仅拥有丰富的实战经验,还对行业趋势具备敏锐的洞察力,该团队致力于探索、设计、开发、推广可落地的高性能云计算解决方案,帮助最终客户加速数字化转型,提升业务效能,同时降低运营成本。