虚拟化技术
type
status
date
slug
summary
tags
category
icon
password
概览
- 目的:提高物理资源利用率、降低成本;在不同场景权衡是否适合虚拟化方案。
- 常见用途:服务隔离、测试/开发环境、桌面虚拟化、云平台基础。
一、虚拟化的分类与基本概念
1. 按设计架构
- 平台层虚拟化(Platform):在硬件或主机上运行完整虚拟机(如 KVM、VMware ESXi)。
- 虚拟硬件
- Guest OS(客户机操作系统)

“虚拟机监控器”(Hypervisor)
完整虚拟机组成:
虚拟机运行的完整执行流程
当虚拟机中的应用程序(app)运行时,指令执行会经过多层抽象与转译:
- 操作系统层虚拟化(OS-level):依赖宿主操作系统实现隔离(如 LXC、Docker 容器)。
- 区别示例: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)。
国产化虚拟化厂商:
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_intel与kvm - AMD 平台:
kvm_amd与kvm
- 提示:若模块未加载,可尝试
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-all或firewall-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(示例)
创建虚拟机:
- virt-manager 图形化
- 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...