当前位置: 首页 > news >正文

KubeVirt 虚拟化实践:在 Kubernetes 上运行虚拟机

KubeVirt 虚拟化实践:在 Kubernetes 上运行虚拟机

前言

哥们,别整那些花里胡哨的理论。今天直接上硬菜——我在大厂一线使用 KubeVirt 在 Kubernetes 上运行虚拟机的真实经验总结。作为一个白天写前端、晚上打鼓的硬核工程师,我对虚拟化的追求就像对鼓点节奏的把控一样严格。

背景

最近我们团队需要在 Kubernetes 集群上运行一些遗留的虚拟机应用。经过一周的部署和配置,我们基于 KubeVirt 实现了虚拟机和容器的统一管理,资源利用率提升了 40%,运维成本降低了 30%。今天就把这些干货分享给大家。

KubeVirt 部署

1. 安装 KubeVirt

问题:如何在 Kubernetes 上安装 KubeVirt。

解决方案:直接上代码

# 设置版本 export KUBEVIRT_VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases/latest | jq -r .tag_name) # 安装 KubeVirt 操作器 kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml # 安装 KubeVirt CR kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml # 等待部署完成 kubectl wait --for=condition=Available --timeout=300s -n kubevirt deployment/virt-operator kubectl wait --for=condition=Available --timeout=300s -n kubevirt deployment/virt-api kubectl wait --for=condition=Available --timeout=300s -n kubevirt deployment/virt-controller # 验证安装 kubectl get pods -n kubevirt # 安装 virtctl 工具 wget https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/virtctl-${KUBEVIRT_VERSION}-linux-amd64 chmod +x virtctl-${KUBEVIRT_VERSION}-linux-amd64 mv virtctl-${KUBEVIRT_VERSION}-linux-amd64 /usr/local/bin/virtctl

2. 配置存储

问题:如何为虚拟机配置存储。

解决方案

# 创建 PVC 用于虚拟机镜像 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ubuntu-image namespace: default spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: standard --- # 创建 DataVolume 用于虚拟机磁盘 apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: ubuntu-dv namespace: default spec: source: http: url: "https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img" pvc: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: standard

虚拟机管理

1. 创建虚拟机

问题:如何创建和运行虚拟机。

解决方案

# 虚拟机定义 apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: ubuntu-vm namespace: default spec: running: true template: metadata: labels: app: ubuntu-vm spec: domain: cpu: cores: 2 sockets: 1 threads: 1 memory: guest: 4Gi devices: disks: - name: rootdisk disk: bus: virtio - name: cloudinitdisk disk: bus: virtio interfaces: - name: default masquerade: {} networkInterfaceMultiqueue: true resources: requests: memory: 4Gi cpu: 2 networks: - name: default pod: {} volumes: - name: rootdisk persistentVolumeClaim: claimName: ubuntu-dv - name: cloudinitdisk cloudInitNoCloud: userData: | #cloud-config hostname: ubuntu-vm users: - name: ubuntu sudo: ALL=(ALL) NOPASSWD:ALL ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2E... ubuntu@example.com packages: - nginx runcmd: - systemctl enable nginx - systemctl start nginx

2. 虚拟机操作

问题:如何管理虚拟机的生命周期。

解决方案

# 启动虚拟机 virtctl start ubuntu-vm # 停止虚拟机 virtctl stop ubuntu-vm # 重启虚拟机 virtctl restart ubuntu-vm # 查看虚拟机状态 kubectl get vms kubectl get vmis # 查看虚拟机详情 kubectl describe vm ubuntu-vm # 进入虚拟机控制台 virtctl console ubuntu-vm # 通过 VNC 连接 virtctl vnc ubuntu-vm # 删除虚拟机 kubectl delete vm ubuntu-vm

高级特性

1. 实时迁移

问题:如何实现虚拟机实时迁移。

解决方案

# 启用实时迁移 apiVersion: kubevirt.io/v1 kind: KubeVirt metadata: name: kubevirt namespace: kubevirt spec: configuration: migrationConfiguration: bandwidthPerMigration: 64Mi completionTimeoutPerGiB: 800 parallelMigrationsPerCluster: 5 parallelOutboundMigrationsPerNode: 2 progressTimeout: 150
# 执行实时迁移 virtctl migrate ubuntu-vm # 查看迁移状态 kubectl get migrations # 取消迁移 kubectl delete migration <migration-name>

2. 快照和恢复

问题:如何实现虚拟机快照和恢复。

解决方案

# 创建快照 apiVersion: snapshot.kubevirt.io/v1alpha1 kind: VirtualMachineSnapshot metadata: name: ubuntu-snapshot namespace: default spec: source: apiGroup: kubevirt.io kind: VirtualMachine name: ubuntu-vm --- # 从快照恢复 apiVersion: snapshot.kubevirt.io/v1alpha1 kind: VirtualMachineRestore metadata: name: ubuntu-restore namespace: default spec: target: apiGroup: kubevirt.io kind: VirtualMachine name: ubuntu-vm virtualMachineSnapshotName: ubuntu-snapshot

网络配置

1. 多网络接口

问题:如何为虚拟机配置多个网络接口。

解决方案

# 网络配置 apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: bridge-network namespace: default spec: config: | { "cniVersion": "0.3.1", "name": "bridge-network", "type": "bridge", "bridge": "br0", "ipam": { "type": "host-local", "subnet": "192.168.1.0/24" } } --- # 多网卡虚拟机 apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: multi-network-vm namespace: default spec: running: true template: spec: domain: devices: interfaces: - name: default masquerade: {} - name: bridge-net bridge: {} networks: - name: default pod: {} - name: bridge-net multus: networkName: bridge-network

2. 负载均衡

问题:如何为虚拟机配置负载均衡。

解决方案

# 服务暴露 apiVersion: v1 kind: Service metadata: name: ubuntu-vm-service namespace: default spec: selector: app: ubuntu-vm ports: - port: 80 targetPort: 80 type: LoadBalancer --- # 虚拟机实例副本集 apiVersion: kubevirt.io/v1 kind: VirtualMachineInstanceReplicaSet metadata: name: ubuntu-replicaset namespace: default spec: replicas: 3 selector: matchLabels: app: ubuntu-vm template: metadata: labels: app: ubuntu-vm spec: domain: devices: disks: - name: rootdisk disk: bus: virtio resources: requests: memory: 2Gi cpu: 1 volumes: - name: rootdisk dataVolume: name: ubuntu-dv

最佳实践

  1. 资源管理

    • 合理分配 CPU 和内存
    • 配置资源限制
    • 监控资源使用
  2. 存储优化

    • 使用 DataVolume
    • 配置存储类
    • 实现快照策略
  3. 网络配置

    • 使用多网络接口
    • 配置网络策略
    • 实现负载均衡
  4. 高可用性

    • 配置实时迁移
    • 实现自动恢复
    • 定期备份

常见问题与解决方案

1. 虚拟机无法启动

问题:虚拟机创建后无法启动。

解决方案

  • 检查镜像完整性
  • 验证资源分配
  • 查看事件日志

2. 网络连接失败

问题:虚拟机无法连接网络。

解决方案

  • 检查网络配置
  • 验证 CNI 插件
  • 查看网络策略

3. 存储性能差

问题:虚拟机磁盘性能差。

解决方案

  • 使用高性能存储
  • 配置缓存策略
  • 优化 I/O 调度

4. 实时迁移失败

问题:虚拟机实时迁移失败。

解决方案

  • 检查资源充足性
  • 验证网络带宽
  • 查看迁移日志
http://www.jsqmd.com/news/550398/

相关文章:

  • 突破性遥感图像语义分割:GeoSeg革新城市环境智能解译范式
  • OpenClaw 的检索增强中,向量数据库的索引类型(HNSW、IVF)如何选择?
  • Windows系统优化方案:如何通过AtlasOS实现性能提升与隐私保护
  • leetcode1672---先飞的笨鸟
  • 格行代理_随身WiFi招商_2026低门槛副业创业项目 - 格行官方招商总部
  • 告别手动回复!用Python+uiautomation给微信PC版做个关键词自动回复机器人
  • DDrawCompat:现代Windows系统下的经典图形API兼容解决方案
  • 智能车竞赛双车跟随组规则优化:摄像头高度与车模配置的协同设计
  • OFA-VE模型性能详解:OFA-Large在SNLI-VE测试集SOTA指标复现与解读
  • 2026年河南青少年心理咨询公司推荐:厌学心理咨询/抑郁心理咨询/叛逆心理咨询机构 - 品牌推荐官
  • 新手零基础入门:跟着快马生成的互动教程完成jdk17下载安装与第一个程序
  • 游戏辅助软件功能扩展技术解析与实践指南
  • 数据恢复与Python环境重建指南
  • 秦皇岛北戴河广大汽车修理厂丨官方电话及服务详解,14年专业汽车维修 - 宁夏壹山网络
  • OptiScaler终极指南:让所有显卡都能体验AI超分辨率的完整解决方案
  • 告别繁琐的pip安装,用快马平台快速搭建python数据分析原型
  • EasyAnimateV5图生视频避坑指南:OOM解决方案、采样步数与分辨率平衡策略
  • 【2026年6月最新】英语四级历年真题及答案解析PDF电子版(2015-2025年12月)
  • 2026年电力预制舱厂家推荐:110kv预制舱/一二次预制舱/光伏预制舱/升压站预制舱专业供应商精选 - 品牌推荐官
  • npm下载卡住 / npm install太慢?别再瞎试了,这个方法我用一次就不想换回去
  • 效率提升利器:用快马生成智能脚本,一键统一团队node.js开发环境
  • 告别格式混乱:用pdf2docx实现PDF到Word的无损转换
  • 从乡村振兴到碳中和:用NVivo分析不同领域政策文本的实战思路与模板分享
  • 比迪丽LoRA模型Transformer原理浅析:理解AI绘画的底层逻辑
  • 新手零压力:跟着快马生成的图文指南,轻松完成wsl2安装
  • 让旧Mac焕发新生:OpenCore Legacy Patcher免费升级终极指南
  • 颠覆认知:重新定义macOS鼠标体验的开源黑科技
  • 2026年自动充棉机厂家推荐:枕芯充棉机/压缩打包机/上料机专业供应商精选 - 品牌推荐官
  • 5大突破解决Android固件提取难题:面向开发者与技术爱好者的全能工具指南
  • 利用快马平台与cloud code理念,十分钟构建云端待办应用原型