1. 环境准备检查硬件与安装依赖包第一次接触KVM虚拟化的朋友最常遇到的坑就是硬件兼容性问题。我刚开始折腾KVM时就遇到过宿主机CPU不支持虚拟化的情况白白浪费了半天时间。现在我就把硬件检查这个环节拆解成具体步骤帮你避开这个坑。首先用这个命令检查CPU是否支持虚拟化技术记得用普通用户执行时前面加sudoegrep -c (vmx|svm) /proc/cpuinfo如果输出结果大于0恭喜你的CPU支持虚拟化。这里解释下原理vmx对应Intel的VT-x技术svm对应AMD的AMD-V技术。我在老笔记本上测试时遇到过返回0的情况后来发现是BIOS里的虚拟化功能没开启——这就像你买了带涡轮增压的车却忘了打开增压开关。对于物理服务器还需要进入BIOS确认Virtualization Technology是否开启。如果是VMware Workstation做实验要特别注意虚拟机设置里必须勾选虚拟化Intel VT-x/EPT或AMD-V/RVI选项就像给虚拟机套了个虚拟化buff。接下来安装必要的软件包组。CentOS/RHEL 7/8的用户推荐用这个组合拳sudo yum groupinstall Virtualization Host -y sudo yum install qemu-kvm libvirt virt-install bridge-utils virt-manager -y这里有个实用技巧用groupinstall安装虚拟化主机套件比单独装每个包更可靠。我遇到过有人漏装libvirt导致virt-manager无法启动的情况就像组装电脑忘了插内存条。安装完成后检查KVM模块是否加载lsmod | grep kvm正常应该看到kvm和kvm_intel或kvm_amd两个模块。如果这里报错可能是内核版本不匹配建议用uname -r确认内核版本后重新安装对应版本的kvm模块。最后启动libvirtd服务并设置开机自启sudo systemctl enable --now libvirtd这个服务相当于KVM的大管家管理所有虚拟机的生命周期。有次我重启服务器后忘了启动它所有虚拟机都失踪了急出一身汗才发现是这个服务没起来。2. 网络配置NAT与桥接模式实战刚入门时最让我头疼的就是KVM网络配置。虚拟机要上网就像新生儿需要脐带连接母体这里我分享两种最常用的方案。方案一默认NAT模式安装完KVM后会自动创建virbr0虚拟网桥采用192.168.122.0/24网段。这种模式的特点是虚拟机通过宿主机NAT上网外部无法直接访问虚拟机配置简单开箱即用查看默认网络配置virsh net-list --all如果状态是inactive用这个命令激活virsh net-start default virsh net-autostart default方案二桥接模式需要把物理网卡加入网桥相当于给虚拟机直接插网线。我在生产环境常用这种方案配置步骤稍复杂创建桥接配置文件以enp3s0网卡为例sudo cat /etc/sysconfig/network-scripts/ifcfg-br0 EOF DEVICEbr0 TYPEBridge BOOTPROTOdhcp ONBOOTyes DELAY0 EOF修改原网卡配置sudo sed -i s/BOOTPROTOdhcp/BOOTPROTOnone/ /etc/sysconfig/network-scripts/ifcfg-enp3s0 echo BRIDGEbr0 | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-enp3s0重启网络服务sudo systemctl restart network验证桥接是否成功brctl show应该能看到类似这样的输出bridge name interfaces br0 enp3s0有次我给服务器配桥接网络时忘了关NetworkManager服务导致配置冲突网络瘫痪。现在我都养成了先停NetworkManager的好习惯sudo systemctl stop NetworkManager sudo systemctl disable NetworkManager3. 存储配置镜像与存储池管理虚拟机磁盘就像房子的地基我建议新手先搞懂这两种存储方案方案一目录存储池适合快速实验环境用宿主机的文件系统存放镜像文件。先创建存储目录并设置权限sudo mkdir -p /var/kvm/images sudo chown -R qemu:qemu /var/kvm/images sudo chmod 755 /var/kvm/images然后用virt-manager图形界面创建存储池打开virt-manager → 选择主机 → 点击存储选项卡点按钮新建池 → 命名如images类型选文件系统目录 → 指定路径为/var/kvm/images方案二LVM存储池适合生产环境能动态调整磁盘大小。假设我们有块新磁盘/dev/sdb创建物理卷和卷组sudo pvcreate /dev/sdb sudo vgcreate vg_kvm /dev/sdb创建逻辑卷例如20G大小sudo lvcreate -n vm01_disk -L 20G vg_kvm在virt-manager中添加存储池类型选逻辑卷指定现有卷组vg_kvm自动检测现有逻辑卷我强烈建议使用qcow2格式镜像而非raw格式因为它支持动态扩容thin provisioning快照功能更小的存储占用创建qcow2镜像的命令示例qemu-img create -f qcow2 /var/kvm/images/ubuntu20.04.qcow2 20G曾经有同事误删了虚拟机镜像所以我现在的习惯是定期备份镜像文件sudo rsync -avz /var/kvm/images/ /backup/kvm_images/4. 创建第一台Linux虚拟机终于到了最激动人心的环节这里我演示两种创建方式满足不同场景需求。方法一virt-install命令行方式适合远程操作或无图形界面环境这是我最常用的方式virt-install \ --name centos8 \ --ram 2048 \ --vcpus 2 \ --disk path/var/kvm/images/centos8.qcow2,size20 \ --os-type linux \ --os-variant centos8 \ --network bridgebr0 \ --graphics vnc,listen0.0.0.0 \ --console pty,target_typeserial \ --location http://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/ \ --extra-args consolettyS0,115200n8 serial参数说明--location支持网络安装省去下载ISO的步骤--extra-args指定控制台参数方便通过virsh console连接--graphics vnc开启VNC远程访问安装完成后可以用这个命令进入虚拟机控制台virsh console centos8方法二virt-manager图形化方式适合桌面环境用户操作更直观打开virt-manager → 点击新建虚拟机选择本地安装介质 → 浏览选择ISO文件设置内存和CPU新手建议2G内存2核CPU选择创建自定义存储 → 指定qcow2格式和大小网络选择之前创建的桥接网络br0最后点击完成开始安装安装CentOS时有个小技巧在分区环节选择自动配置分区KVM虚拟机的磁盘性能足够好不需要像物理机那样精细分区。创建完成后建议立即做这些优化安装virtio驱动提升性能yum install virtio-win -y配置控制台登录编辑/etc/default/grubGRUB_CMDLINE_LINUXconsolettyS0,115200n8启用qemu-guest-agent实现高级管理yum install qemu-guest-agent -y systemctl enable --now qemu-guest-agent遇到虚拟机无法启动时可以查看日志定位问题virsh dumpxml vm_name vm.xml virsh start --debug vm_name最后分享一个实用命令清单# 查看所有虚拟机 virsh list --all # 启动/关闭虚拟机 virsh start vm_name virsh shutdown vm_name # 删除虚拟机 virsh undefine vm_name # 查看虚拟机信息 virsh dominfo vm_name # 进入虚拟机控制台 virsh console vm_name