介绍

对于采用基于虚拟机架构的企业,迁移到 Kubernetes 和基于容器的架构必然需要进行应用现代化改造。然而,受限于业务需要持续在线或开发习惯难以改变等因素,企业往往无法在短时间内完全脱离虚拟化架构。

因此,一个能够在同一平台上统一配置、管理和控制容器资源与虚拟机资源的解决方案就显得尤为重要。

容器编排虚拟机解决方案

本平台基于开源组件 KubeVirt 实现虚拟机(VMI,VirtualMachineInstance)方案,使创建容器编排虚拟机以及运行虚拟化应用更加便捷和高效。

特性

快速转型

无需重写应用或修改镜像。只需将现有应用打包为 qcow2 或 raw 格式的虚拟机镜像,并在平台上使用该镜像创建虚拟机,即可将应用部署到容器平台。

保持使用习惯

容器化虚拟机可以采用与传统虚拟机相似的方式进行管理,而无需关注底层容器实现,包括虚拟机生命周期管理、磁盘和网络以及快照管理。

虚拟化与容器化共存

  • 统一平台既支持管理虚拟化服务,也支持基于 Kubernetes 的容器调度与管理。

  • 在继续使用虚拟机工作负载的基础上,可逐步推进容器化应用现代化改造。

  • 需要与虚拟化应用交互的新容器化应用的开发不受影响。

产品特性

  • 虚拟机:支持使用管理员分配的镜像创建虚拟机并进行管理,包括启动和停止虚拟机、管理快照、远程登录虚拟机以及修改虚拟机配置。

  • 虚拟磁盘:支持查看和管理当前项目中创建的磁盘信息,包括创建磁盘、查看磁盘名称、存储类、容量以及关联的虚拟机。

  • 虚拟机快照:支持查看虚拟机快照的状态、关联的虚拟机以及最近一次回滚时间等详情。

  • 虚拟机镜像:支持查看当前项目下的虚拟机镜像信息,包括镜像提供方式和操作系统。

  • 密钥对:支持查看和管理当前项目中创建的密钥对,包括创建密钥对以及查看关联的虚拟机列表。

  • 可启动卷:跨命名空间管理黄金镜像启动源,支持四种导入来源(HTTP/HTTPS、container registry、clone PVC、clone snapshot)。

  • Live Migration:在无停机的情况下将运行中的虚拟机在节点之间迁移,并受集群级迁移限制和按命名空间划分的迁移策略约束。

  • 存储迁移:在线将运行中虚拟机的磁盘在不同存储类之间迁移。

  • 更多生命周期操作:克隆整个虚拟机、暂停和恢复虚拟机,以及打开串口控制台(文本 TTY)或 VNC 控制台。

控制台特性与 API 对象的映射

控制台特性Kubernetes 资源
虚拟机VirtualMachine (kubevirt.io/v1)
虚拟磁盘DataVolume / PVC (cdi.kubevirt.io/v1beta1)
虚拟机快照VirtualMachineSnapshot (snapshot.kubevirt.io/v1beta1)
可启动卷DataSource (cdi.kubevirt.io/v1beta1)
克隆VirtualMachineClone (clone.kubevirt.io/v1beta1)
Live MigrationVirtualMachineInstanceMigration (kubevirt.io/v1)
存储迁移VirtualMachineStorageMigrationPlan + VirtualMachineStorageMigration (migrations.kubevirt.io/v1alpha1)
密钥对Secret (type kubernetes.io/ssh-public-key)
暂停 / 恢复,串口 / VNC 控制台虚拟机实例子资源 (subresources.kubevirt.io)

架构和权限

平台的虚拟化基于 KubeVirt 和 CDI 构建,由 HyperConverged (HCO) operator 管理:

  • HyperConverged (HCO) 是唯一事实来源——它负责部署并持续协调 KubeVirt 和 CDI。集群级别的设置(例如 Live Migration 限制)必须配置在 HyperConverged 资源上,而不是直接配置在 KubeVirt 上。
  • CDI (Containerized Data Importer) 负责将磁盘镜像导入并克隆到 PVC 中——它是可启动卷和虚拟机磁盘背后的引擎。
  • virt-controller 负责调度虚拟机,virt-handler 运行在每个节点上,virt-launcher 则将每个运行中的虚拟机封装在一个 Pod 中。

要委派访问权限,请在命名空间中绑定 KubeVirt 集群角色:

集群角色授予权限
kubevirt.io:view对虚拟机和实例的只读访问
kubevirt.io:edit创建 / 更新 / 删除虚拟机并打开控制台
kubevirt.io:admin完整的虚拟机管理,包括子资源
kubevirt.io:migrate触发 Live Migration

CDI 还提供对应的 cdi.kubevirt.io:view / :edit / :admin 角色,用于管理 DataVolumes 和 DataSources。

限制与约束

必须基于物理机集群实现,并且需要在启用虚拟化的情况下将 KubeVirt 组件部署到集群中。平台提供通过 Operator 部署 KubeVirt 组件的能力,以及启用虚拟化的界面,所有相关配置均由平台管理员完成。