云平台
ZStack Cloud 在 ZCF 中承载云平台基础能力,负责将服务器计算能力、存储连接能力和网络连接能力抽象为可统一管理、按需交付的云资源,为资源供给和业务负载运行提供基础。
计算虚拟化
计算虚拟化是将物理服务器资源通过虚拟化技术抽象成逻辑资源,让一台物理服务器变成多台相互隔离的虚拟服务器,CPU、内存、磁盘、I/O 设备等硬件资源变成虚拟化资源池进行统一动态管理,从而提高资源利用率,降低系统管理成本,让 IT 对业务变化更具适应力。

云平台支持采用基于 KVM 的硬件虚拟化技术。KVM 是一个 Linux 内核模块,将 Linux 内核变成一个 Hypervisor。KVM 在 Linux 系统内以进程形式出现,由标准 Linux 调度程序进行调度,因此 KVM 能够使用 Linux 内核已有功能,例如:内存管理、CPU 调度等。但是,KVM 本身仅提供 CPU 与内存虚拟化,I/O 设备虚拟化需结合 Qemu 才能完成。Qemu 是一个用户态的设备模拟器,为云主机提供虚拟设备模型,负责各种虚拟设备的创建、调用及管理。

CPU 虚拟化
在 x86 体系架构上,CPU 一般有 4 个特权级别:RING0~RING3,用于给操作系统和应用程序访问硬件。在 Linux 中,仅使用其中 2 个特权级别:RING0(内核态)、RING3(用户态)。
关于 VMX 根模式与 VMX 非根模式。对于硬件辅助虚拟化而言,为能在不对操作系统做任何修改的前提下使用云主机,CPU 引入 2 种运行模式:VMX 根模式、VMX 非根模式。宿主机运行在根模式下,宿主机内核处于 RING0,用户态程序处于 RING3。云主机运行在非根模式下,云主机内核处于 RING0,用户态程序处于 RING3。
关于 VM Exit 与 VM Entry。处于非根模式的云主机,当外部中断或缺页异常,或主动调用 VMCALL 指令来调用 VMM 服务时,CPU 会从非根模式切换至根模式,整个过程称为 VM Exit。相反,当 VMM 通过显式调用 VMLAUNCH 或 VMRESUME 指令切换至非根模式时,硬件自动加载云主机上下文,运行云主机指令,这一转换称为 VM Entry。

当云主机通过 VM Exit 从非根模式退出至根模式后,KVM 会根据退出原因执行进一步操作,若是 I/O 操作则交由 QEMU 处理,若是非 I/O 操作则由 KVM 自行处理,处理完成后通过 VM Entry 再次切入非根模式运行。

内存虚拟化
云主机管理器(VMM)负责管理和分配每个云主机的物理内存。云主机操作系统看到的是一个虚构的云主机物理地址(GPA)空间。操作系统的内存管理模块负责将云主机虚拟地址(GVA)映射到云主机物理地址(GPA),其指令目标地址也是一个云主机物理地址(GPA)。这样的地址在无虚拟化情况下,其实是实际物理地址。但在有虚拟化情况下,这样的地址不能被直接处理使用,需 VMM 先将云主机物理地址(GPA)转换成一个物理机物理地址(HPA),再交由物理处理器执行。
- 维护云主机物理地址(GPA)到物理机物理地址(HPA)之间的映射关系。
- 当云主机访问云主机物理地址(GPA)到时,根据映射关系,将其转换成物理机物理地址(HPA)。

内存的硬件辅助虚拟化使用扩展页表(EPT)技术,通过硬件完成云主机虚拟地址(GVA)到物理机物理地址(HPA)的转换。

关于内存隔离。在物理机操作系统上,云主机进程需使用 vMMU 和 EPT 进行地址翻译。云主机进程在物理机上实际也作为普通进程存在,但它维护了两套页表:EPT 页表、物理机端的普通页表。当为云主机分配内存时,首先在物理机上以普通进程的身份分配内存,然后通过 EPT 页表将这些内存分配给云主机。该方法可确保:物理机物理地址(HPA)分配的统一性,不同云主机之间的内存隔离,并建立了 EPT 页表与物理机页表之间的对应关系。云主机上看到的连续内存,实际上可能映射到物理机上多个不连续的地址区间,并且是由 Hypervisor 按需动态分配的。这种设计实现了不同类型进程的有效隔离和资源管理,同时保持系统的灵活性和效率。
关于内存完全释放。在云主机内存分配过程中,初始分配并不涉及实际的物理内存。当云主机真正使用内存时,控制权会转移至物理机的 Hypervisor 进行实际分配。对 Hypervisor 而言,给云主机分配内存实质是为云主机的进程分配内存空间,这些空间对应于物理机虚拟地址(HVA)。物理机虚拟地址(HVA)最终映射到哪个物理机物理地址(HPA),由物理机的内存管理子系统负责。该子系统统一管理物理机上的所有物理内存,并在分配时进行标记,确保不同进程获得不同的物理机物理地址(HPA)。当物理机物理地址(HPA)不足时,可能会回收部分分配给云主机的内存,并在 EPT 页表中标记为页面不存在。云主机再次访问被回收的内存时,会重新分配新的物理机物理地址(HPA)空间。这一机制可确保云主机的物理内存不会被重复分配给不同的云主机,从而维护内存隔离和安全性。
设备虚拟化
设备虚拟化方式主要有三种:设备模拟、半虚拟化设备、设备直通。
设备模拟
设备模拟通过 QEMU 提供的设备模型,可完全模拟出与物理设备一样的接口。因此,在云主机操作系统中,使用原生驱动即可使用设备。设备模拟只能模拟出具有基本功能的设备,不支持复杂功能和模型的设备。完全模拟的设备兼容性好,但由于是纯软件模拟,性能相对较低。

半虚拟化设备
半虚拟化设备实现前后端驱动。利用云主机中的前端驱动,通过基于事务的通信机制,将请求直接发给宿主机端的后端驱动,从而很大程度上减少上下文切换的开销,性能相比完全设备模拟有较大提升。然而,Virtio 后端驱动仍在 QEMU 中实现,在 IO 处理过程中会经过用户态与内核态之间的多次切换。为进一步提升性能,可将 Virtio 后端驱动的功能放至内核态实现,称为 Vhost-kernel 后端,于是数据仅需经过从用户态到内核态的一次切换,就可完成数据传输,实现性能提升。
随着技术发展,将数据放入用户态处理可得到更灵活的形式。因此,在原有 Vhost 架构中进行改动,增加 Vhost-user 后端,搭配 DPDK、SPDK 中相关用户态函数库,性能进一步提升。

设备直通
设备透传基于硬件的设备虚拟化技术,支持将 PCI/PCIe 物理设备直接映射到云主机的地址空间,在云主机中,使用原生设备驱动就可直接使用设备,达到近乎物理设备的性能。物理设备被透传后由云主机独享,其它云主机无法共享使用该设备。

SR-IOV 是由 PCI-SIG 组织定义的 PCIe 规范的扩展规范,目的是通过提供一种标准规范,为云主机提供独立的内存空间、中断、DMA 数据流。SR-IOV 支持单个物理 PCIe 设备(PF)虚拟出多个虚拟 PCIe 设备(VF),然后通过设备透传技术将虚拟 PCIe 设备直通到各云主机,以实现单个物理 PCIe 设备支撑多云主机的应用场景。

GPU 与异构算力
GPU 与异构算力用于承载图形处理、AI 推理、模型训练等高性能计算场景。云平台中的 GPU 算力主要通过 GPU 直通、vGPU 切分与直通,以及容器 GPU 显存切分等方式提供。
GPU 直通
支持将物理 GPU 卡直接映射到云主机的地址空间。在云主机中,使用原生设备驱动就可直接使用设备,达到近乎物理设备的性能。GPU 被透传后由云主机独享,其它云主机无法共享使用该设备。

vGPU 切分与直通
支持将物理 GPU 卡切割成更细粒度的 vGPU,形成 vGPU 资源池,并支持将 vGPU 直接映射到云主机的地址空间。vGPU 被透传后由云主机独享,其它云主机无法共享使用该设备。

容器 GPU 显存切分
容器 GPU 显存切分主要使用软件层面的 vCUDA 方案,对原生 CUDA 驱动进行重写,然后挂载到 Pod 中进行替换,以及在 CUDA 驱动中对 API 进行拦截,从而实现资源隔离以及限制的效果。


存储虚拟化
存储虚拟化是将服务器存储资源池化,实现服务器存储资源的统一整合、管理及调度,并向上层提供多种存储接口,供业务云主机根据自身的存储需求灵活分配使用资源池中的存储空间。在 ZCF 架构中,集中式存储和分布式存储等存储能力由存储服务承载,云平台负责将这些存储资源组织为可交付的云资源,并向云主机等业务负载提供数据访问能力。详情可参考存储服务。
网络虚拟化
云平台可通过原生网络或 ZNS 网络服务实现网络虚拟化,为云主机、裸金属和弹性裸金属等资源提供网络连接、隔离、访问控制和常用网络服务,详情可参考网络服务。
容器服务
容器服务将云平台的资源承载范围扩展到容器集群和云原生应用,为云平台提供容器集群管理、容器化应用编排和应用运行维护能力,详情可参考容器服务。
云资源调度与管理
云资源调度与管理建立在计算虚拟化、存储连接和网络连接之上,负责将云主机、裸金属、弹性裸金属等资源纳入统一生命周期和调度体系。该能力面向资源创建、运行、迁移、伸缩和编排等环节,支撑业务负载按需获得计算、存储和网络资源。
云主机管理
云主机是云平台承载业务负载的基础资源形态。云平台围绕云主机提供创建、启动、停止、重启、迁移、克隆、删除等生命周期管理能力,并通过计算规格、镜像、云盘、网络和安全策略等资源组合定义云主机运行环境。
在 ZCF 架构中,云主机仍由 ZStack Cloud 承担专业资源管理职责;ZCF 通过统一入口、统一认证和可观测运维能力,为云主机所在环境提供一致的访问路径和运行状态视图。
调度策略
云主机调度策略用于决定云主机创建、启动或迁移时可运行的物理机范围。调度过程会综合资源容量、集群边界、存储和网络可达性、云主机规格,以及用户配置的调度策略,选择满足运行条件的目标节点。
通过亲和、反亲和等调度策略,云平台可以将业务相关云主机尽量调度到同一组资源中,或将关键业务实例分散到不同物理机上运行,以兼顾性能、可用性和故障隔离需求。对于加载 GPU 等专用设备的云主机,调度还需要结合设备可用性和 GPU 分配策略完成最终节点选择。
云主机克隆
云平台提供三种云主机克隆方式以满足不同业务场景需求:链接克隆、全量克隆、快速全量克隆。
链接克隆
链接克隆的云主机启动速度快,仅占用少量存储空间。但是链接克隆的云主机共享使用源云主机的磁盘链,因为两者之间存在依赖关系。云平台提供的链接克隆不受限于源云主机的快照链长度,且支持各类主存储。
在执行链接克隆新云主机时,无需复制源云主机所有数据,而是基于源云主机快照链创建一个新磁盘文件,并做关联作为新云主机实例。新云主机实例共享源云主机快照链,且该部分共享快照链只读,因此通过链接克隆创建云主机过程中并无实际数据拷贝,从而实现云主机快速启动。
基于源云主机快照链创建的新磁盘文件具有写时重定向特性,即刚创建时仅占用极少存储空间。后续当云主机实例尝试修改云主机内容时,会把修改数据写入新磁盘文件中,不影响源快照链数据,从而确保克隆云主机与源云主机的相对独立性。
如希望将克隆云主机与源云主机从快照链上完全独立开来,则需使用云平台提供的扁平合并功能。当执行批量链接克隆时,由于多个云主机实例共享相同的只读快照链,链接克隆大幅减少存储空间需求。
云主机链接克隆技术提供一种有效管理云主机方式,尤其在创建多个相似云主机实例时(如测试集群或桌面云 VDI 场景),通过共享的快照链,链接克隆显著节省存储成本,并提高云主机创建和管理效率。

全量克隆
全量克隆是针对云主机的另一种克隆方法。与链接克隆不同,它不与源云主机共享数据,而将源云主机做成镜像文件后创建新的云主机实例。该源云主机镜像是一个完整的镜像文件,包含云主机所需所有文件和配置,并保存在镜像服务器中,随后将镜像文件推送到主存储作为克隆云主机的镜像缓存,以此来克隆出全新云主机。全量克隆的云主机不受主存储限制,克隆出的云主机可指定与源云主机不同的主存储来启动。
全量克隆创建的云主机是完全隔离且独立的,与源云主机没有依赖关系,云主机性能完全不受影响。全量克隆通常需要更多存储空间,但在批量全量克隆多云主机时,云平台已做存储优化,新云主机镜像缓存仅在主存储上存储一份,从而避免消耗更多主存储资源,也加快了批量克隆的云主机启动速度。

快速全量克隆
快速全量克隆是对链接克隆和全量克隆的一种整合。它既能像链接克隆快速启动克隆出的云主机,又能像全量克隆保持数据独立,不与源云主机共享快照链。
执行快速全量克隆时,在克隆初始利用链接克隆技术创建出依赖源云主机的新云主机,以此来满足快速云主机启动。随即后台会启动一个任务做快照合并,最终将克隆云主机的数据完全独立出来,不依赖于源云主机。因此,通过快速全量克隆的云主机具有启动速度快、数据最终独立的特点,且克隆完成后云主机性能不受影响。

云主机热迁移
云主机热迁移,指在不中断业务的前提下,将运行中的云主机从一台物理机迁移至另一台物理机。云主机热迁移全程用户无感知,业务不中断。该技术广泛应用于云计算和数据中心管理,以实现资源优化、负载均衡、维护升级以及灾难恢复等目的。云平台支持两种云主机热迁移:同存储不同物理机之间的热迁移、不同存储不同物理机之间的热迁移。
要理解云主机热迁移原理,重点关注云主机的 CPU、内存、磁盘、网络等核心资源的传输原理。
同存储不同物理机之间的热迁移
两台物理机使用同一存储,云主机从其中一台物理机热迁移至另一台物理机。

在热迁移过程中,源云主机的各核心资源是如何同步至目标云主机的呢?
首先是网络,云主机的网络请求基本上均为无状态,因此只需将源云主机的网络配置同步至目标云主机即可。其次是磁盘,源云主机和目标云主机均存放于共享存储中,而源物理机和目标物理机对共享存储的视野一致,因此磁盘无迁移需求。
真正重要的是 CPU 和内存的热迁移。在热迁移过程中,源云主机仍需运行,目标云主机则尚未启动,CPU 会持续产生新数据添加至内存中。我们将 CPU 产生新数据修改的内存页称为脏页。热迁移模块先将源云主机的内存数据传输至目标云主机;接下来的每一轮均会发送上一轮拷贝过程中产生的脏页内存数据,而不用再次发送源云主机中的全部内存数据;如此循环往复,直至源云主机中的脏数据量低于某一极小阈值,以致于传输该部分数据的耗时极短(通常是毫秒级别),则进入停机拷贝阶段。在停机拷贝阶段,源云主机被挂起,不再产生新的脏数据。热迁移模块将最后一轮中的脏数据传输至目标云主机,并将 CPU 状态和外设状态一并迁移至目标云主机,然后启动目标云主机。至此,目标云主机完成整个源云主机状态的交接,完全承载源云主机的业务。由于停机拷贝的时间极短,因此可实现用户无感知,业务不中断。

不同存储不同物理机之间的热迁移
两台物理机使用不同存储,云主机从其中一台物理机热迁移至另一台物理机。

在热迁移过程中,由于源物理机与目标物理机在不同存储上,因此磁盘有迁移需求。磁盘承接的数据可分为两类:已落盘的数据和未落盘的数据。我们将未落盘的数据(即内存中的数据)称为脏数据。磁盘迁移首先在对端存储上创建一个相同的目标磁盘,然后将目标磁盘和源磁盘设置镜像,Qemu 接收到指定的源磁盘和目标磁盘设备,并创建一个镜像任务(Mirror Job),该任务在后台持续运行,直至完成所有数据复制。
全量同步(Full Sync)。镜像任务启动后,首先会进行一次全量数据同步,Qemu 按顺序遍历源磁盘的所有数据块,逐块读取并写入目标磁盘。在此期间,若云主机产生新的写操作,Qemu 会将这些写入暂存,并在初始同步完成后立即将增量数据同步至目标磁盘。
增量同步(Incremental Sync)。在全量数据同步过程中,云主机仍可能对源磁盘进行写入。为确保源磁盘与目标磁盘之间的数据一致性,Qemu 会拦截源磁盘的写操作,并将变动的数据块增量复制至目标磁盘。
写操作拦截。Qemu 的块设备层(Block Layer)负责拦截磁盘的 I/O 请求,并将写操作日志化。写操作会被暂存,并记录写操作的时间戳、写入的块偏移等元信息,以确保增量复制正确进行。Qemu 将新的写入操作通过增量同步方式同步至目标磁盘,以确保目标磁盘始终与源磁盘保持一致。
镜像完成与切换。镜像任务结束时,Qemu 会进行最后一次数据同步,将剩余未同步的数据块复制至目标磁盘,然后用户可选择将云主机的 I/O 从源磁盘切换至目标磁盘。至此,源磁盘中的数据完全同步至目标磁盘,待后续内存和 CPU 热迁移完成即可完成整个云主机热迁移。

裸金属管理
- 管理网络:用于管理云平台相关硬件资源。
- 扁平网络:用于裸金属主机的业务网络,对外提供应用服务。
- IPMI 网络:用于管理节点对裸金属设备与裸金属主机远程开关机、重启、获取硬件信息等操作。
- 部署网络:用于 PXE 服务器通过 DHCP 服务下发 IP 地址,以及通过 TFTP 服务传输镜像。

裸金属管理核心:硬件信息获取、裸金属设备无人值守部署。
- 管理节点通过 PXE 服务器指定裸金属设备通过 PXE 启动。
- PXE 服务器封装 DHCP、TFTP 和镜像存储服务。裸金属设备 PXE 启动后,通过 DHCP 获得 IP 地址,随后从 TFTP 服务器下载pxelinux.0和引导文件,并将内核加载至内存中执行,引导进 LiveCD 系统。
- 在 LiveCD 系统中执行检测脚本,将裸金属设备的硬件信息回传至管理节点。
- 根据回传的硬件信息,对裸金属设备设置预配置模板,包括:分区信息、设置网卡 Bond、IP 地址等。
- 选择一个待安装的操作系统 ISO,即可部署裸金属主机。
- 重启裸金属设备至 PXE 启动,PXE 服务器会预先下载待安装操作系统 ISO,裸金属设备根据预设好的配置模板实行无人值守部署,部署完毕后会自动根据预配置模板配置网卡等信息,至此裸金属主机配置完毕。
- 为更好地运维裸金属主机,PXE 服务器支持下发裸金属监控服务,实现裸金属主机内部数据的实时监控,包括:CPU、内存、磁盘容量、磁盘 IO、网卡等信息。
弹性裸金属管理
弹性裸金属管理可为应用提供专属物理服务器,保障核心应用的高性能和稳定性,并结合云平台资源的弹性优势,实现灵活申请,按需使用。弹性裸金属管理融合物理机和云主机各自优势,业务应用不仅可使用物理机强劲稳定的计算能力,而且可使用云平台内主存储、三层网络等资源。避免虚拟化开销的同时,突破云资源与物理资源的边界,提高云资源的可用性,特别适合部署传统的非虚拟化场景应用。

弹性裸金属框架
弹性裸金属支持两种集群类型:网关代理集群、DPU 加速集群。两种集群的架构各有不同。
- 存储网络:与主存储通信使用的网络。
- 管理网络:云平台管理节点通过该网络对节点进行管控,该网络与 IPMI 网络需互通。
- IPMI 网络:裸金属节点通过 BMC 接口连接到 IPMI 网络,同时,管理节点也连接 IPMI 网络,实现对裸金属节点的远程电源控制。
- 管理节点:云平台管理节点。
- 弹性裸金属集群:为裸金属节点提供单独的集群管理,分为网关代理集群和DPU 加速集群两种类型。
- 弹性裸金属实例:性能媲美物理服务器的云实例,结合云平台资源的弹性优势,实现灵活申请,按需使用。
- 弹性裸金属规格:弹性裸金属实例涉及的 CPU、内存、CPU 架构、CPU 型号等规格定义。
- 裸金属节点:用于创建弹性裸金属实例,通过 BMC 接口以及 IPMI 配置进行唯一识别。
- 主存储:用于存储裸金属实例的磁盘文件(包括:系统盘、数据盘、系统盘快照、数据盘快照、镜像缓存等)的存储服务器。
- 部署网络:创建弹性裸金属实例时,用于 PXE 流程及下载镜像的专属网络。
- 网关节点:云平台和弹性裸金属实例的流量转发节点,提供 iPXE 服务、DHCP 服务等,通过网关节点为弹性裸金属实例下发配置。通过网关节点接管主存储,并为弹性裸金属实例分配主存储。一个网关节点只能加载到一个网关代理集群。
- DPU 设备:
- 安装于裸金属节点上的 PCIe 设备,通过内置独立处理器 SoC 与管理节点通信,实现裸金属节点操作系统部署和生命周期管理(不含电源管理)。
- 通过 SPDK 协议直连主存储,为裸金属节点提供系统盘存储空间。
- 通过 OVS-DPDK 协议实现业务网络配置下发。


获取硬件信息
为获取裸金属节点硬件信息,在网关代理集群中,管理节点会使用 IPMI 来引导裸金属节点从网络启动。裸金属节点启动过程中,通过 PXE 加载位于网关节点上的一个 LiveCD 系统,并通过系统中预置的脚本来获取裸金属节点硬件信息,同时把硬件信息返回给管理节点。

云盘启动与控制台
裸金属节点的云盘启动
裸金属节点支持使用本地磁盘或云盘作为启动源。在使用本地磁盘启动场景下,支持使用本地系统纳管或使用平台镜像部署本地系统的方式。在使用云盘启动场景下,云盘的存储资源主要由 Shared Block 主存储或 Ceph 主存储提供。因此可兼具云平台资源弹性以及本地磁盘稳定 I/O 与高吞吐优势。
- 当创建弹性裸金属实例选择镜像后,镜像会被下发到云平台主存储作为镜像缓存。
- 基于镜像缓存创建出弹性裸金属实例对应的云盘。
- 在网关节点上,云盘会被映射成 iSCSI Target 并通过部署网络暴露给裸金属节点,作为弹性裸金属实例的根盘或数据盘。
- 裸金属节点通过 PXE 启动,加载网关节点上暴露出来的根盘和数据盘从而实现云盘启动。
弹性裸金属实例的控制台
要实现在云平台上打开弹性裸金属实例的控制台以及实时监控,需在弹性裸金属实例系统中安装相应的裸金属代理服务程序。裸金属网关节点上的 Nginx 代理服务将来自管理节点的请求转发至裸金属代理服务程序,再将来自裸金属代理服务程序的反馈转发回管理节点,以此来实现弹性裸金属实例的控制台功能。
弹性伸缩
弹性伸缩用于按照业务负载变化自动调整云主机数量。管理员可基于云主机模板定义伸缩组,并配置伸缩规则、触发条件和冷却时间,使平台在业务压力上升时扩容,在业务压力下降时缩容。
弹性伸缩通常与监控报警和负载均衡联动。监控数据或告警条件触发伸缩活动后,云平台按照伸缩组模板创建或移除云主机,并在冷却时间内避免频繁触发新的伸缩活动,从而在资源利用率和业务承载能力之间保持平衡。
资源编排
资源编排用于通过模板定义一组云资源及其依赖关系,并由云平台自动完成资源创建、配置和生命周期管理。模板可以描述云主机、云盘、网络等资源对象,以及资源之间的引用、依赖和输出信息。
资源编排将一组资源作为资源栈统一管理。创建资源栈时,云平台解析模板中的资源定义和依赖关系,按照正确顺序创建资源;资源栈运行后,可查看资源、事件和模板内容,并按模板策略保留或删除栈内资源。
可视化资源编排提供图形化编排方式,用户可在画布中拖拽资源并建立依赖关系,再生成资源栈模板或直接创建资源栈。该方式降低了复杂资源组合的编排成本,也便于复用标准化交付方案。
