KubeVirt 云原生虚拟化生产运维实战
KubeVirt 在 Kubernetes 上以自定义资源管理虚拟机,使容器和虚拟机能够共享声明式 API、调度、网络、存储和 GitOps 流程。它适合传统应用迁移、Windows 工作负载、需要完整内核的系统和容器化前的过渡场景,但并不意味着把现有虚拟机 YAML 化就自动获得高可用。生产环境需要同时理解 Kubernetes、QEMU/KVM、libvirt、CSI、CNI 和虚拟机操作系统。
一、核心组件与对象
- KubeVirt Operator:安装与升级;
- virt-api:提供 API、Webhook 和子资源;
- virt-controller:协调 VirtualMachine 与 VirtualMachineInstance;
- virt-handler:节点侧管理虚拟机;
- virt-launcher:承载单个虚拟机进程的 Pod;
- CDI:导入、上传、克隆虚拟磁盘;
- virtctl:控制台、启停、迁移和镜像操作。
VirtualMachine 描述期望状态,VirtualMachineInstance 表示一次运行实例。虚拟机重启后 VMI 会变化,监控和资产系统不能只绑定临时 Pod 名称。
二、节点与硬件准备
节点必须支持硬件虚拟化并启用 KVM。上线前检查 BIOS/UEFI、CPU 虚拟化、IOMMU、内核模块、设备插件和嵌套虚拟化限制。
生产节点建议:
- 独立节点池或明确污点与容忍;
- 统一 CPU 特性或定义可迁移的 CPU Model;
- 预留系统与迁移带宽;
- 配置 HugePages、NUMA 和 CPU Pinning 时保持拓扑一致;
- GPU、SR-IOV、PCI 直通节点使用标签与专用调度;
- 避免宿主机超售失控。
不同代际 CPU 可能阻止热迁移。采购和扩容前就要建立 CPU 兼容基线。
三、虚拟机规格与资源治理
使用 InstanceType 和 Preference 统一 CPU、内存、设备和操作系统偏好,减少每台 VM 重复配置。资源请求应反映真实保底,Limit 与 Overcommit 策略要结合工作负载。
关键业务可使用 Dedicated CPU、CPU Manager、NUMA 和 HugePages,但会降低调度灵活性。内存 Balloon、热插拔和超售需经过应用验证,数据库等延迟敏感系统不应激进超售。
记录每台 VM 的:业务负责人、环境、操作系统、CPU/内存、磁盘、网络、备份策略、维护窗口、许可证和恢复级别。
四、镜像与 CDI
CDI 可从 HTTP、Registry、S3、PVC 或上传方式导入镜像。建立受控 Golden Image 流程:
- 固定镜像来源和校验值;
- 安装安全补丁和 VirtIO 驱动;
- 清理机器唯一标识;
- 配置 cloud-init/Sysprep;
- 扫描恶意软件和漏洞;
- 记录构建版本;
- 发布到只读镜像仓库;
- 定期淘汰旧镜像。
不要让生产虚拟机直接从互联网下载未知镜像。Windows 镜像要验证 VirtIO 存储、网络、QEMU Guest Agent 和激活方式。
五、存储设计
虚拟机系统盘和数据盘通常由 PVC 提供。存储类必须明确:
- ReadWriteOnce/ReadWriteMany 能力;
- Block 或 Filesystem 模式;
- 快照、克隆、扩容;
- 热迁移支持;
- IOPS、吞吐、延迟;
- 故障域和副本;
- 在线恢复与备份工具兼容性。
热迁移要求源、目标节点都能访问虚拟磁盘,或使用支持的块迁移能力。只在单节点可见的 Local PV 会限制迁移和节点维护。
数据库 VM 应使用真实 IO 基准测试,并监控宿主、CSI、存储阵列和 Guest 四层延迟。
六、网络设计
默认 Pod 网络适合一般场景;Multus 可提供多个网络;Masquerade、Bridge、SR-IOV 和 Network Binding Plugin 适合不同需求。
设计前明确:
- VM 是否需要固定 IP;
- 二层邻接与 VLAN;
- North-South 和 East-West 流量;
- DHCP、DNS、网关与 MTU;
- NetworkPolicy 是否生效;
- 热迁移网络是否独立;
- SR-IOV 是否允许迁移;
- 服务发现使用 Service 还是外部负载均衡。
MTU 不一致常表现为小包正常、大包超时。排查时同时检查 CNI、物理网络、Guest 和隧道封装。
七、启动、更新与关机策略
RunStrategy 决定 VM 是否保持运行、手工控制或在故障后重启。操作系统关机需要 Guest Agent 或 ACPI 正常响应,强制终止可能损坏文件系统。
VM 更新分为可热更新与需重启更新。CPU、内存热插拔、磁盘和网络更新的支持取决于版本、Guest 和配置。变更平台应显示是否需要迁移、重启或重建,不能静默应用。
八、热迁移与迁移策略
热迁移把运行 VM 从一个节点移动到另一个节点,用于节点维护和负载平衡。生产需要配置 MigrationPolicy,控制并发、带宽、超时和完成策略。
迁移前检查:
- CPU 兼容;
- 存储共享或支持块迁移;
- 直通设备限制;
- 目标节点资源;
- 网络与 MTU;
- PDB 和迁移并发;
- Guest 时钟与应用连接。
高内存脏页率的 VM 可能长期无法收敛。应降低写入、提高迁移带宽、使用合适策略或安排停机迁移。
九、节点维护
不要直接 Drain 承载 VM 的节点而不确认驱逐策略。使用 KubeVirt 节点维护和迁移能力,先评估不可迁移 VM,再执行:
停止新调度 → 迁移可迁移 VM → 处理直通/本地盘 VM
→ 验证业务 → 维护节点 → 恢复调度 → 验证 VM
为关键 VM 设置合适 PDB,但 PDB 不能创造额外容量。集群必须保留足够目标节点承接故障或维护。
十、快照、备份与恢复
VolumeSnapshot 只保护存储卷,不一定包含 VM 定义、Secret、网络和外部依赖。应用一致性需要 Guest Agent、文件系统冻结或数据库自身备份。
完整保护包括:
- VM、DataVolume、PVC、Secret 和网络对象;
- 磁盘快照或备份;
- Guest 内应用备份;
- Golden Image 和安装介质;
- KubeVirt/CDI 版本;
- 外部 DNS、IP 和负载均衡配置。
恢复演练要在隔离 Namespace 完成,避免恢复 VM 使用相同 IP、主机名或集群身份接入生产。
十一、安全治理
- 限制谁能创建带特权设备、HostDevice、SR-IOV 或 HostPath 的 VM;
- 使用 Namespace、RBAC 和准入策略;
- 镜像签名、扫描和来源控制;
- VNC/Serial Console 接入审计;
- Secret 不写入 cloud-init 明文日志;
- Guest OS 继续执行补丁、EDR、账号和防火墙管理;
- 控制 USB、GPU 和 PCI 直通;
- 对 Confidential Computing 能力单独验证。
Kubernetes RBAC 只控制平台 API,不替代 Guest 操作系统权限。
十二、监控与告警
平台层:Operator、virt-api、virt-controller、virt-handler、Webhook、队列、错误率和证书。
VM 层:状态、重启、CPU、内存、网络、磁盘、Guest Agent、迁移、快照和探针。
节点层:KVM、CPU 兼容、可分配资源、HugePages、直通设备、IO 和迁移带宽。
业务层:Guest 内服务可用性、数据库延迟、Windows 服务、补丁和备份结果。
仅看到 VMI Running 不能证明 Guest 业务正常,应配置 Readiness/Liveness 或外部监控。
十三、升级策略
升级 KubeVirt/CDI 前检查 Kubernetes 版本、API、Feature Gate、Operator 路径、虚拟机迁移和 Guest 兼容性。在预生产复制 Windows、Linux、直通设备、不同存储和网络 VM。
升级期间监控 Operator、组件滚动、Webhook、VMI、迁移和新建 VM。保留 CR、配置、镜像和 etcd 备份。Feature Gate 从实验变为 GA 或删除时要清理旧配置。
十四、故障排查
VM Pending
查看调度事件、资源请求、节点标签、CPU Model、HugePages、设备插件、PVC 和亲和规则。
VM 启动失败
检查 virt-launcher、libvirt、磁盘权限、镜像格式、cloud-init、UEFI/TPM 和 Guest 日志。
热迁移失败
核对 CPU、存储、网络、带宽、脏页率、目标资源和迁移策略。
磁盘性能差
分别查看 Guest、virt-launcher、CSI、节点和后端存储,确认 Cache/IO Mode、队列和卷模式。
Windows 蓝屏或无网卡
检查 VirtIO 驱动版本、磁盘控制器、网卡模型、Guest Agent 和镜像 Sysprep。
十五、生产检查清单
- [ ] 节点 KVM、IOMMU 和 CPU 兼容性已验证;
- [ ] VM 规格使用 InstanceType/Preference 治理;
- [ ] Golden Image 有构建和淘汰流程;
- [ ] 存储支持目标迁移、快照和恢复能力;
- [ ] 网络、MTU、固定 IP 和 VLAN 有统一设计;
- [ ] 关键 VM 已验证热迁移;
- [ ] 节点维护有不可迁移 VM 预案;
- [ ] 备份同时保护对象与磁盘;
- [ ] 控制台、直通设备和镜像权限受控;
- [ ] Guest OS 纳入补丁与安全管理;
- [ ] 升级覆盖 Windows、Linux 和设备直通测试;
- [ ] 已在隔离环境演练恢复。
参考资料
- KubeVirt 用户指南:https://kubevirt.io/user-guide/
- KubeVirt 架构:https://kubevirt.io/user-guide/architecture/
- KubeVirt 热迁移:https://kubevirt.io/user-guide/compute/live_migration/
- KubeVirt 快照恢复:https://kubevirt.io/user-guide/storage/snapshot_restore_api/