在Linux系统中,KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它将Linux内核转化为一个Type-1(裸金属)虚拟机监控程序(Hypervisor),能够在支持虚拟化扩展的CPU上运行多个虚拟机,本文将详细介绍如何在CentOS系统上通过命令行方式安装和配置KVM虚拟化环境,包括环境检查、安装必要软件包、配置网络、创建虚拟机及常用管理命令等步骤。

需要确认系统是否支持虚拟化技术,通过执行egrep -c '(vmx|svm)' /proc/cpuinfo命令,若返回值大于0,则表示CPU支持虚拟化扩展,确保在BIOS/UEFI中已启用虚拟化选项(Intel VT-x或AMD-V),更新系统并安装KVM核心组件,执行yum update -y后,安装qemu-kvm、libvirt、virt-install、virt-manager等软件包,这些是KVM虚拟化的核心依赖。qemu-kvm提供虚拟化硬件模拟,libvirt是虚拟化API和管理工具,virt-install用于命令行创建虚拟机,安装完成后,启动libvirtd服务并设置开机自启:systemctl start libvirtd和systemctl enable libvirtd。
网络配置是KVM虚拟化的重要环节,默认情况下,libvirt会创建一个名为default的NAT网络,虚拟机可通过该网络访问外部网络,但外部无法直接访问虚拟机,如需配置桥接网络(使虚拟机直接与宿主机处于同一网段),需创建网桥接口,首先安装bridge-utils工具:yum install bridge-utils -y,然后编辑网络配置文件(如/etc/sysconfig/network-scripts/ifcfg-ens33,根据实际网卡名调整),将类型改为Bridge,并关联物理网卡,重启网络服务后,可通过ip a命令查看网桥是否创建成功,创建虚拟机时,选择桥接网络即可实现虚拟机直接暴露在局域网中。
创建虚拟机主要通过virt-install命令实现,以下是一个示例命令:virt-install --name centos7 --ram 2048 --vcpus 2 --disk path=/var/lib/libvirt/images/centos7.img,size=20 --cdrom /path/to/CentOS-7-x86_64-DVD-xxxx.iso --network bridge=virbr0 --graphics none --os-variant centos7.0,该命令中,--name指定虚拟机名称,--ram和--vcpus分别分配内存和CPU核心数,--disk指定磁盘镜像路径和大小(若磁盘不存在会自动创建),--cdrom指定系统镜像路径,--network选择网络类型,--graphics none表示无图形界面(适合服务器环境),安装过程中,可通过virsh list --all查看虚拟机状态,virsh start <vm_name>启动虚拟机,virsh shutdown <vm_name>关闭虚拟机。
虚拟机磁盘管理也是常用操作,使用qemu-img命令可以创建、调整或转换磁盘镜像,例如qemu-img create -f qcow2 centos8.img 10G创建一个10GB的qcow2格式镜像(qcow2支持动态扩容和快照),若需扩容现有磁盘,可先使用virt-filesystems或lsblk查看虚拟机磁盘分区信息,然后在虚拟机内部使用growpart或fdisk调整分区大小,最后通过resize2fs(针对ext4文件系统)扩容文件系统,libvirt支持快照功能,通过virsh snapshot-create-as <vm_name> snap1 --description "first snapshot"创建快照,virsh snapshot-revert <vm_name> snap1恢复快照,便于虚拟机状态备份和回滚。

以下是KVM常用管理命令的简要总结:
| 命令分类 | 示例命令 | 功能说明 |
|---|---|---|
| 虚拟机生命周期 | virsh start <vm_name> |
启动虚拟机 |
virsh shutdown <vm_name> |
关闭虚拟机(需系统支持) | |
virsh destroy <vm_name> |
强制关闭虚拟机 | |
virsh undefine <vm_name> |
删除虚拟机配置文件(不删除磁盘) | |
| 虚拟机状态管理 | virsh list --all |
列出所有虚拟机及其状态 |
virsh dominfo <vm_name> |
查看虚拟机详细信息 | |
virsh console <vm_name> |
连接虚拟机控制台 | |
| 磁盘与快照 | qemu-img info <disk_path> |
查看磁盘镜像信息 |
virsh snapshot-create-as <vm_name> ... |
创建快照 | |
virsh snapshot-list <vm_name> |
列出虚拟机快照 |
相关问答FAQs:
-
问:KVM虚拟机无法连接网络,如何排查?
答:首先检查虚拟机网络配置是否正确,确保虚拟机内网卡已启用并获取IP,若使用NAT模式,确认default网络是否启动(virsh net-list --all),未启动则执行virsh net-start default并设置开机自启,若使用桥接模式,检查宿主机网桥是否创建成功,物理网卡是否正确桥接,以及网络服务是否重启,检查防火墙和SELinux是否阻止了网络流量,可临时关闭防火墙(systemctl stop firewalld)测试。 -
问:如何为KVM虚拟机添加新的磁盘或网卡?
答:添加磁盘可通过qemu-img创建新镜像文件,然后使用virsh attach-disk <vm_name> <disk_path> vdb --persistent命令将磁盘附加到虚拟机(vdb为设备名,需确保不与现有设备冲突),添加网卡则执行virsh attach-device <vm_name> <network_xml_file> --persistent,其中XML文件定义网卡类型(如<interface type='network'><source network='default'/></interface>),修改后需重启虚拟机使配置生效,也可使用virsh reboot <vm_name>命令。
(图片来源网络,侵删)
