基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二)

这篇具有很好参考价值的文章主要介绍了基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要

在上一篇文章《基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案》中我们分享了在云原生KubeVirt场景中引入SPDK-vhost从而加速虚机中IO存储性能的方案,本文将在此方案基础上介绍对云原生虚机的热迁移(Live Migration)、热恢复(Live Recovery)特性的支持,并分享我们基于Intel开源的Workload Service Framework[1]在超融合系统下对集成该方案的多虚机集群部署及性能测试。

KubeVirt中的VM迁移技术

(本文基于KubeVirt v0.58.0进行讨论) 

虚拟机热迁移技术能够在不中断虚机中的服务的情况下在服务器之间实时迁移虚拟机,该技术对于实现云服务中心负载均衡,提升管理效率有着至关重要的作用。KubeVirt定义了名为VirtualMachineInstanceMigration的CRD以支持虚机的迁移,下图为一个迁移对象的YAML文件示例。 

基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二),云原生

图1 KubeVirt的迁移对象声明

图1中的vmiName字段为需要进行迁移的VM名称,部署该迁移对象声明后,针对目标VM的迁移将会被触发。 

基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二),云原生

图2 KubeVirt中VM的迁移流程

如图2所示,在KubeVirt中,假设我们在Node A部署了一台VM,将其迁移到Node B的流程总体如下:

1. 在集群中部署迁移对象实例,触发迁移开始。

2. virt-controller通过informer机制监听迁移事件,若有pending的迁移事件且目标pod不存在,则调用apiServer在目标Server(Node B)中创建virt-launcher pod。

3. Node A和Node B上的virt-handler会分别创建source migration proxy和target migration proxy两者通过unix socket以及TCP connection建立通信,从而将源VM的数据迁移到目的VM。 

4. 在Node A上,virt-launcher最终调用libvirt的migration API(virDomainMigrateToURI3)异步进行VM的迁移,因此,和libvirt的VM migration一样,KubeVirt也支持对各类迁移参数的配置,如memory拷贝策略,迁移安全性检查等,具体参数可参考KubeVirt API[4]。 

5. 在Node A上,virt-handler 检查迁移是否完成,并调用API server更新VM的迁移状态。 

6. Node A和Node B上的virt-handler开始清除VM migration的相关资源。 

在SPDK-vhost IO优化方案中支持虚拟机热迁移 

回顾SPDK-vhost IO优化方案可以知道,我们引入了spdkVhostBlkDisk类型的块设备,使得KubeVirt能够通过SPDK-vhost接口为VM提供加速的block 功能,另一方面,上文介绍了KubeVirt迁移VM最终会调用libvirt的migration API,因此,首先我们需要探究libvirt对SPDK-vhost设备热迁移的支持。 

基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二),云原生

图3:vhost-user 类型的XML 定义

图3为libvirt中vhost-user disk的XML文件,其中disk类型为vhostuser;source type字段指定了chardev的类型,该字段目前只支持unix;reconnect字段指定了设备是否自动恢复连接。SPDK vhost本身已经支持热迁移功能,详细介绍可参考《SPDK Vhost对Live Migration的支持》。libvirt 7.1.0版本开始已经支持了SPDK vhost-user类型的定义,并且能够支持设备的热迁移。 

KubeVirt中使用VirtualMachineInstance对象管理一个虚拟机,通过Converter模块将虚拟机对象的配置参数传递到一个名为Domain的结构体中,结构体的DomainSpec字段定义了与libvirt XML文件相匹配的各种虚机配置,其中与libvirt中disk类型相对应的字段如图4所示:

基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二),云原生

图4 KubeVirt中定义的Disk结构体

因此,我们在KubeVirt的Converter模块中增加SPDK-vhost接口,使得vhost类型设备的定义能够传到DomainSpec中的Disk对象中,最终就能够转化为如图3所示的XML形式,从而对使用SPDK-vhost IO优化的虚拟机支持了如图1所示的热迁移(从集群中的某一个server迁移到另一个server)。 

在SPDK-vhost IO优化方案中支持设备热恢复 

在维护基于SPDK-vhost方案的云服务的过程中,有时我们会不可避免地需要中断SPDK进程进行设备升级等操作,因此,我们需要集成SPDK-vhost 设备热恢复功能,从而实现更高效灵活的后端存储在线升级。该功能的具体介绍可以参考《SPDK Vhost在线恢复:让I/O飞一会儿》。 

SPDK-vhost热恢复功能需要SPDK侧与QEMU侧的配合,由于相关patch都已合入,我们可以方便地在基于KubeVirt云原生的SPDK-vhost IO优化方案中集成该功能。在QEMU命令行中,我们需要在启动VM时给SPDK-vhost设备增加reconnect=1参数从而支持设备热恢复,该参数在KubeVirt中对应DiskSourceReconnect结构体,因此,我们需要在自定义的SPDK-vhost接口中为该结构体赋值,如图5所示,其中Timeout为设备尝试恢复的最大时间。

基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二),云原生

图5 KubeVirt中的Reconnect接口

多虚机集群部署及性能对比 

与上一篇文章中的对比测试一样,我们同样使用基于Intel WSF (Workload Service Framework)框架搭建的端到端全栈式Workload,Workload的最新release版本[2]已支持虚机的批量部署测试,我们在三节点超融合集群中部署多虚机(每个虚机挂载一个虚拟卷)及rook-ceph(2副本),对SPDK-vhost IO优化方案和KubeVirt原有的内置VirtIO方案进行性能对比测试如下: 

基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二),云原生

图6 1M顺序读带宽性能对比

基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二),云原生

图7 4k随机读吞吐量性能对比

如图6和图7所示,以VirtIO方案为基准对测试数据做归一化处理,可以看到在测试集群中部署3到90个虚机时,SPDK-vhost方案对于4k随机读及1M顺序读场景均有一定程度的性能提升。

*性能数据在一定测试配置中完成,仅供参考。

WSF最新的release 

上一篇文章中我们详细介绍了Intel开源的WSF测试框架,WSF仓库中包含一系列完整,独立,可单独执行的workload, 囊括AI,网络,存储,安全等行业类型的软件栈和使用场景。Intel计划会在每个季度做一次workload的发布和更新,最新的一次是23.4的版本[3], 该release一共新增了8个workload,并更新4个workload,包括HAProxy, Nginx DLB, Calico VPP, Istio Envoy forward Proxy, Edge-Ceph-VirtIO, FFMPEG x264, Spark, Cassandra, MongoDB, Kafka, Malconv and Istio Envoy 。各workload最新release的具体介绍可以查看WSF 23.4 Release Note。 

参考和引用 

[1] WSF Repo:

https://github.com/intel/workload-services-framework 

[2] Edge-Ceph-Virtio Workload: 

https://github.com/intel/workload-services-framework/tree/v23.4/workload/Edge-Ceph-VirtIO 

[3] WSF V23.4版本: 

https://github.com/intel/workload-services-framework/tree/v23.4 

[4] KubeVirt API: 

https://kubevirt.io/api-reference/v0.58.0/definitions.html#_v1_migrationconfiguration 

[5] KubeVirt官网:

https://kubevirt.io

[6] SPDK Vhost介绍:

https://spdk.io/doc/vhost.html

基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二),云原生

转载须知

DPDK与SPDK开源社区公众号文章转载声明

推荐阅读

SPDK As IPU Firmware - Part 2 & 3

SPDK As IPU Firmware - Part 1

基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二),云原生

基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二),云原生

点点“赞”“在看”,给我充点儿电吧~文章来源地址https://www.toymoban.com/news/detail-819204.html

到了这里,关于基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Quarkus技术系列】打造基于Quarkus的云原生微服务框架实践(1)

    前提介绍 本系列文章主要讲解如何基于Quarkus技术搭建和开发\\\"专为Kubernetes而优化的Java微服务框架\\\"的入门和实践,你将会学习到如何搭建Quarkus微服务脚环境及脚手架,开发Quarkus的端点服务,系统和应用层级的配置介绍与Quarkus的编程模型分析,创建Quarkus的应用Uber-jar文件以及

    2024年02月13日
    浏览(49)
  • Spark内容分享(二十七):阿里云基于 Spark 的云原生数据湖分析实践

    目录 Spark 与云原生的结合 1. 传统 Spark 集群的痛点 2. Spark 与云原生结合的优势 Spark on K8s 原理介绍 1. Spark 的集群部署模式 2. Spark on K8s 的部署架构 3. Spark on K8s 部署架构——对比 4. Spark on K8s 社区进展 5. Spark 3.3 新特性介绍 Spark on K8s 在阿里云 EMR 上的实践 1. EMR Spark on ACK 2. 充分

    2024年01月15日
    浏览(94)
  • 为大模型工程提效,基于阿里云 ACK 的云原生 AI 工程化实践

    作者:张凯 以 GPT(Generative Pre-trained Transformer)和 Diffusion model 为代表的大语言模型(Large language model,LLM)和生成式人工智能(Generative artificial intelligence,GAI)在过往两年,将人们对 AI 的梦想与期待推向了一个新高峰。这一次,AI 带来的“智能”效果和“涌现”能力,吸引

    2024年01月22日
    浏览(50)
  • 服务网格实施周期缩短 50%,丽迅物流基于阿里云 ACK 和 ASM 的云原生应用管理实践

    作者:王夕宁、 刘强、 华相 丽迅物流是百丽旗下专注于时尚产业、为企业提供专业物流及供应链解决方案的服务商。其产品服务主要包括城市落地配、仓配一体、干线运输及定制化解决方案。通过自研智能化物流管理平台,全面助力企业合作集约化发展。目前,丽迅物流已

    2024年02月10日
    浏览(51)
  • 迈向云原生开发,我眼中的云原生

    本人是一名PHP全栈开发,做了5年的web方向的项目。因为公司的业务体量也在逐渐的增加,正好有幸在csdn上看到《云原生-降本增效》的电子书活动,从而想深入的了解云原生, 同时,在阅读过程中学习了不少新的认知和思考。 1. 云原生技术的现状: 随着云计算技术的普及和发

    2023年04月27日
    浏览(41)
  • 保送阿里云的云原生学习路线

    近期好多人都有咨询学习云原生有什么资料。与其说提供资料不如先说一说应该如何学习云原生。 Linux基础知识 :云原生技术通常在Linux环境中运行,因此建议首先掌握Linux的基础知识,包括命令行操作、文件系统、权限管理等。 容器化技术 :学习容器化技术是云原生的基础

    2024年01月17日
    浏览(46)
  • 云原生爱好者周刊:野心很大的云原生数据库 SurrealDB

    SurrealDB SurrealDB 是一个开源的端到端云原生数据库,同时支持 Table、Document 和 Graph 等多种数据模型,对外提供 SurrealQL、GraphQL、Rest 与 WebSocket 等多种查询方式,支持实时查询和权限等高级特性,既可以嵌入式部署,也可以在云端扩展为分布式的数据库。 pg_watch_demo 这个项目在

    2023年04月09日
    浏览(94)
  • 极光笔记|极光消息推送服务的云原生实践

    极光始终秉承“以开发者为中心”的战略导向 ,极光推送(JPush)是国内领先的消息推送服务。极光推送(JPush)本质上是一种软件付费应用程序,结合当前主流云厂商基础施设,逐渐演进成了云上SaaS服务。作为SaaS服务,必然要考虑云原生架构。因此,在极光推送(JPush)日

    2024年03月25日
    浏览(43)
  • 【云原生丶Docker】虚拟化技术简介

    Docker 是一款基于容器虚拟化技术构建的软件,那到底什么虚拟化技术呢?在学习 Docker 之前,先简单了解下虚拟化技术。 虚拟化是云原生的实现基础,它能够帮助我们更加有效地利用物理计算机硬件。 虚拟化技术 是一种将物理资源抽象为虚拟资源,并将虚拟的计算机资源提

    2024年02月11日
    浏览(43)
  • 虚拟化,容器化,云原生,大数据概念

    虚拟化,是指通过虚拟化技术将 一台计算机虚拟为多台逻辑计算机 。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在 相互独立的空间内运行而互不影响 ,从而显著 提高计算机的工作效率 。 虚拟化使用软件的方法重

    2024年01月23日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包