目录
KVM虚拟化
核心特性
技术架构
优势与应用场景
与其他虚拟化技术的对比
安装与使用示例
KVM运行时的三种模式
LVM工作原理
核心组件与分工
工作流程
硬件虚拟化支持
案例
KVM(Kernel-based Virtual Machine)是一种基于Linux内核的全虚拟化解决方案,允许用户在Linux系统上运行多个隔离的虚拟机(VM),每个虚拟机拥有独立的操作系统和硬件资源。
kvm.ko
)直接集成到操作系统中,通过硬件虚拟化扩展(如Intel VT-x或AMD-V)实现高效的CPU和内存虚拟化。qemu-kvm
工具提供完整的虚拟化解决方案,支持图形化管理和命令行操作。virsh
命令行工具),支持跨平台管理。virt-manager
(图形化管理)、virt-install
(自动化部署)。virt-manager
)创建虚拟机。技术 | 类型 | 性能 | 成本 | 适用场景 |
---|---|---|---|---|
KVM | 全虚拟化 | 高 | 免费 | 云计算、生产环境 |
VMware ESXi | 裸金属虚拟化 | 极高 | 收费 | 企业级关键业务 |
Xen | 半虚拟化/全虚拟化 | 中高 | 免费 | 高性能计算、安全敏感场景 |
VirtualBox | 桌面虚拟化 | 中 | 免费 | 个人开发、测试 |
安装KVM(Ubuntu/Debian)
sudo apt update |
|
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager |
|
sudo usermod -aG kvm,libvirt $(whoami) # 添加当前用户到相关组 |
|
sudo systemctl enable --now libvirtd |
创建虚拟机
virt-install \ |
|
--name=my-vm \ |
|
--memory=2048 \ |
|
--vcpus=2 \ |
|
--disk path=/var/lib/libvirt/images/my-vm.qcow2,size=20 \ |
|
--cdrom /path/to/iso/ubuntu-22.04.iso \ |
|
--os-variant ubuntu22.04 \ |
|
--graphics spice |
图形化管理
使用virt-manager
工具,通过直观界面管理虚拟机生命周期。
KVM(Kernel-based Virtual Machine)的工作原理主要基于硬件虚拟化技术和Linux内核的深度融合,通过内核模块、用户空间工具和硬件虚拟化扩展的协同工作,实现高效的虚拟机管理
/dev/kvm
设备接口与用户空间程序通信,处理虚拟机的创建、运行和销毁等关键操作。virt-manager
或virsh
)发起虚拟机创建请求。基础环境:两台虚拟机,修改hosts主机名称,101:kvm01 102:kvm02 关闭防火墙及系统内核
安装 KVM所需要的依赖包
[root@kvm01 ~]# dnf -y install gnome-shell gdm gnome-session gnome-terminal
让系统开机自动进入图形化页面
[root@kvm01 ~]# systemctl set-default graphical.target 设置开机启动自动进入图形化
[root@kvm01 ~]# poweroff
虚拟机配置勾选CPU虚拟化(先给虚拟机关机后在操作)
开机——进入系统——活动——下面九宫格——终端
下载虚拟化依赖工具
[root@kvm01 ~]# dnf -y install qemu-kvm qemu-img bridge-utils virt-manager libguestfs-tools virt-install libvirt
验证:
[root@kvm01 ~]# cat /proc/cpuinfo #查看有没有vmx的样式
[root@kvm01 ~]# lsmod | grep kvm #查看系统支不支持虚拟化
[root@kvm01 ~]# systemctl start libvirtd #启动
[root@kvm01 ~]# systemctl enable libvirtd #设置开机自启动
基于NetworkManager的网络环境中创建一个新的网络桥接连接
[root@kvm01 ~]# nmcli connection add type bridge con-name br0 ifname br0
可以通过查看配置文件来确认是否成功
[root@kvm01 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm01 network-scripts]# ls
ifcfg-br0 ifcfg-ens160
[root@kvm01 network-scripts]# cat ifcfg-br0
STP=yes
BRIDGING_OPTS=priority=32768
TYPE=Bridge
HWADDR=
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=default
NAME=br0
UUID=c90e9bee-d9c0-4b4e-8ef9-bf0b0a990496
DEVICE=br0
ONBOOT=yes
基于NetworkManager的网络环境中配置一个以太网接口,将其连接到之前创建的桥接接口
[root@kvm01 network-scripts]# nmcli connection add type ethernet con-name br0-slave-ens33 ifname ens33 master br0
验证效果并查看
[root@kvm01 network-scripts]# ls
ifcfg-br0 ifcfg-br0-slave-ens33 ifcfg-ens33
IP迁移 01
nmcli connection modify br0 ipv4.method manual ipv4.address 192.168.10.101/24 ipv4.gateway 192.168.10.254 ipv4.dns 8.8.8.8
02
nmcli connection modify br0 ipv4.method manual ipv4.address 192.168.10.102/24 ipv4.gateway 192.168.10.254 ipv4.dns 8.8.8.8
01/02查看ip并关闭ens33,远程会断,需要去虚拟机上操作
ifconfig
nmcli con down "ens33"
虚拟机操作:
nmcli con up br0
nmcli con up br0-slave-ens33
——这个地方可以做快照,方便后续操作
在桌面环境操作:
双击QEMU/KVM,点存储,左下角加号(+)
起名kgc,/data_kvm/store
点击kgc,添加卷(+),名称:test01,存储卷配额:10G
拉取镜像到/opt下,谁都能用
创建新虚拟机系统,选择本地iso或者本地目录,创建虚拟机
查看
virsh list --all
关闭
virsh shutdown centos7.0
运行,对系统来说通电皆是运行
virsh start centos7.0
强制关机,不建议
virsh destroy centos7.0
启动虚拟机
virsh create /etc/libvirt/qemu/centos7.0.xml
挂起
virsh suspend centos7.0
恢复
virsh resume centos7.0
开机自启动
virsh autostart centos7.0
备份虚拟机
/data_kvm/store/test01.qcow2
/etc/libvirt/qemu
cd /etc/libvirt/qemu
virsh dumpxml centos7.0>test01.xml
ls
virsh define test01.xml
删除掉然后关机,注册,在删除文件会更彻底一些
virsh shutdown centos7.0
virsh undefine centos7.0
重新注册(重新定义)
virsh define test01.xml
启动
virsh start centos7.0
virsh list --all #查看
关闭虚拟机
virsh shutdown centos7.0
查看虚拟机内部hosts文件,需要下载工具
使用这个命令需要安装 libguestfs-tools-c和guestfs-tools-c 工具包。
virt-cat -a /data_kvm/store/test01.qcow2 /etc/hosts
修改hosts文件
virt-edit -a /data_kvm/store/test01.qcow2 /etc/hosts
查看指定虚拟机
virt-df centos7.0
克隆
virt-clone -o centos7.0 -n test02 -f /data_kvm/stort/test02.qcow2
virsh list --all #查看所有虚拟机
快照,快照时间相隔越久,id越大
virsh snapshot-create test02
virsh snapshot-create test02
virsh snapshot-create test02
恢复快照
virsh snapshot-revert test02 快照id
查看快照
virsh snapshot-list test02
删除快照
virsh snapshot-delete test02 快照id
virsh snapshot-list test02