虚拟化技术

type
status
date
slug
summary
tags
category
icon
password

概览

  • 目的:提高物理资源利用率、降低成本;在不同场景权衡是否适合虚拟化方案。
  • 常见用途:服务隔离、测试/开发环境、桌面虚拟化、云平台基础。

一、虚拟化的分类与基本概念

1. 按设计架构

  • 平台层虚拟化(Platform):在硬件或主机上运行完整虚拟机(如 KVM、VMware ESXi)。
    • notion image
      “虚拟机监控器”(Hypervisor)
      完整虚拟机组成:
    • 虚拟硬件
    • Guest OS(客户机操作系统)
    • 虚拟机运行的完整执行流程
      当虚拟机中的应用程序(app)运行时,指令执行会经过多层抽象与转译:
  • 操作系统层虚拟化(OS-level):依赖宿主操作系统实现隔离(如 LXC、Docker 容器)。
    • notion image
    • 区别示例:KVM 提供完整虚拟机(可运行不同内核),LXC 只能运行与宿主兼容的内核。
    • 在容器中,应用程序依旧由基本的二进制文件与依赖库组成:
    • bin:应用程序的可执行文件(例如 /usr/bin/nginx)。
    • lib:程序运行所需的动态链接库(例如 /lib64/libc.so.6)。
    • 与虚拟机不同,容器不需要完整的操作系统,只需打包应用及其依赖文件。
      容器运行应用的流程
      容器的运行路径更为简洁:

2. 按 hypervisor(管理程序)部署方式

  • 裸金属/原生虚拟化(Type-1 hypervisor):直接运行在物理硬件之上,没有宿主操作系统。(例如 VMware ESXi(企业级)、citrix Xen 原生模式(企业级)、Microsoft Hyper-V(个人)、(redhat:KVM(个人/云平台底层)、rhev(企业级)、openshift(企业级)))。
  • 寄宿/托管型虚拟化(Type-2 hypervisor):运行在宿主操作系统之上,依赖宿主操作系统来管理硬件资源。(例如 Oracle VirtualBox(个人)、早期 VMware Workstation(个人)、Parallels Desktop)。
page icon
国产化虚拟化厂商:
1、华为 FusionCompute FC
2、浪潮 Incloud sphere
3、深信服 aCloud
4、云宏
 

3. 按实现技术

  • 软件虚拟化:通过软件模拟 CPU 指令和设备(效率较低)。(已被淘汰
    • 通过QEMU实现
  • 半虚拟化(para-virtualization):虚拟机内使用特殊驱动与宿主/虚拟化层协作,提升 I/O 性能(例如 virtio 驱动、vmware-tools、华为FC(uvp tools))。
    • 可以跳过虚拟硬件 (Virtual Hardware)
    • 示例:KVM 上的 virtio-net、virtio-blk 可以显著提高网卡与磁盘性能。
    • 由citrix(思杰)提出,红帽(5.x—>6.x)(更新KVM及virtio)
  • 硬件辅助虚拟化:CPU 提供 VM 支持指令集(Intel VT-x / AMD-V),启用后性能与兼容性更好。
    • 检查方式lscpu 或查看 /proc/cpuinfo 中的 vmx(Intel)/svm(AMD)标志。

二、基于 KVM 的环境安装与验证(详尽步骤)

1. 前提:确认 CPU 虚拟化支持并开启(BIOS/UEFI)

  • 命令示例:
    • lscpu | grep -i -E "vmx|svm|vt-x|amd-v"
    • egrep -wo 'vmx|svm' /proc/cpuinfo | uniq
  • 说明:如果输出有 VT-x / vmx(Intel)或 AMD-V / svm(AMD),表示 CPU 支持虚拟化。若无,需要在 BIOS/UEFI 中开启 “Intel VT-x” / “AMD SVM”。

2. 安装 KVM 与常用工具(RHEL/CentOS 示例)

  • 命令:
    • 说明/变体
      • Debian/Ubuntu: apt install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst virt-manager
      • virt-install 是命令行创建 VM 的工具,virt-manager 提供 GUI。

    3. 启动并检查 libvirtd(libvirt 服务)

    • 查看状态:systemctl status libvirtd
    • 启用/启动:systemctl enable --now libvirtd
    • 说明:输出应显示 active (running);若失败,查看 journalctl -u libvirtd -e 获取日志。文档示例展示了 systemctl status 的典型输出。

    4. 验证内核模块加载(KVM 驱动)

    • 命令:lsmod | grep -i kvm
      • 期望的模块:
        • Intel 平台:kvm_intelkvm
        • AMD 平台:kvm_amdkvm
      • 提示:若模块未加载,可尝试 modprobe kvm / modprobe kvm_intel / modprobe kvm_amd 并检查 dmesg。

      5. 主机网络变化(libvirt 默认网络)

      • libvirt 会创建一个 NAT 网络桥接 virbr0(默认网段通常是 192.168.122.0/24)。
      • 查看网卡信息:ip addr show virbr0
        • 可能输出类似:
          • 注意:如果 virbr0 显示 state DOWN,通常表示没有 VM 使用该桥或网络未激活,不必惊慌。文档示例显示了 NO-CARRIER 状态,需区分是否真的不可用。
        • 自动路由转发(使虚拟机能访问外网):
          • 查看:cat /proc/sys/net/ipv4/ip_forward(应为 1 表示已启用)。文档提到这一点。

        6. NAT 与 iptables(MASQUERADE)

        • 查看 NAT 表:iptables -t nat -nL
          • MASQUERADE 规则将 192.168.122.0/24 地址做源地址伪装(SNAT)以访问外网。
          • 说明
            • 实际查看时应得到整行规则,若使用 nftables(现代发行版)则命令与输出不同(nft list ruleset)。
            • 若系统使用 firewalld,libvirt 可能通过 firewalld 管理这些规则,直接用 firewall-cmd --list-allfirewall-cmd --zone=libvirt 等查看。

          7. 查看与导出 libvirt 网络定义

          • 列表:virsh net-list(显示 default 网络是否 active & autostart)
            • 导出 XML:virsh net-dumpxml default(查看网段、DHCP 范围、桥接名称等)
              • 备注:若需自定义网络,可用 virsh net-define <xml> / virsh net-start / virsh net-autostart。文档演示了 virsh net-dumpxml 的输出片段。

              三、常用操作示例(实战便捷命令)

              1. 创建一个基础 VM(示例)

              创建虚拟机:
              1. virt-manager 图形化
              1. virt-install 命令行
              • 说明virt-install 支持多种参数组合;若使用 ISO 替代 -location,可用 -cdrom /path/to.iso

              2. 虚拟机管理常用 virsh 命令

              • 列表:virsh list --all
              • 启动:virsh start <vmname>,停止:virsh shutdown <vmname> / 强制 virsh destroy <vmname>
              • 获取控制台:virsh console <vmname>(需在 VM 内启用串口控制台)
              • 导出/导入:virsh dumpxml <vm> > vm.xml / virsh define vm.xml

              四、重要概念简短解释(便于记忆)

              • KVM:Linux 内核模块(Kernel-based Virtual Machine),将 Linux 变为 hypervisor 平台;结合 QEMU 提供设备模拟。
              • libvirt:虚拟化管理接口与守护进程(libvirtd),提供统一的 API 和工具(virsh、virt-manager)。
              • virtio:半虚拟化驱动标准(网络/磁盘),提高 I/O 性能。
              • virbr0:libvirt 创建的默认 NAT 虚拟桥接,使 VM 能通过宿主机访问外网。
              • MASQUERADE:iptables 的一种 SNAT 机制,用于将内网地址伪装成宿主机外网地址。

              五、复习小结(要点回顾)

              • 核心:确认 CPU 虚拟化支持 → 安装 kvm/qemu/libvirt → 启动并验证 libvirtd → 检查 kvm 内核模块 → 理解 virbr0 与 NAT(ip_forward + MASQUERADE)→ 使用 virsh/virt-install 管理虚拟机。

              Loading...