环境检查 检查kvm环境
1 2 3 egrep -c '(vmx|svm)' /proc/cpuinfo sudo apt install -y cpu-checker kvm-ok
软件包安装 ARCH系 1 2 sudo pacman -S qemu libvirt ovmf virt-manager virt-viewer dnsmasq vde2 bridge-utils openbsd-netcatsudo pacman -S ebtables iptables
kvm 负责CPU和内存的虚拟化
qemu 向Guest OS模拟硬件(例如,CPU,网卡,磁盘,等)
ovmf 为虚拟机启用UEFI支持
libvirt 提供管理虚拟机和其它虚拟化功能的工具和API
virt-manager 是管理虚拟机的GUI 安装libguestfs
Debian系 1 2 3 sudo apt updatesudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils libguestfs-tools virt-viewer virt-manager virtinstsudo apt install python3-libvirt
qemu-kvm:即qemu+kvm,kvm负责cpu和内存的虚拟化,而qemu负责IO设备,如网卡和磁盘等的虚拟化。
libvirt-daemon-system:KVM管理工具,为不同的虚拟机监视器提供了统一的接口。
libvirt-clients: 包含了一组用于与 libvirt 库交互的命令行工具,包括virsh、virt-install,virt-clone
virsh: 用于虚拟机的创建,启动,停止,迁移,克隆,配置文件管理等操作。
virt-install:用于GuestOS安装
virt-clone:用于虚拟机克隆
bridge-utils:配置网桥
libguestfs-tools:虚拟机镜像管理工具,包括virt-cat、virt-edit、virt-ls、virt-rescue
virt-viewer:用于虚拟机控制台
virt-manager:图形界面管理KVM虚拟化
virtinst: 命令行工具,包括virt-install、virt-clone、virt-manager等。
python3-libvirt:libvirt库的Python 绑定,在Python中使用 libvirt 的功能,包括对虚拟机、存储池、网络等资源的管理,以及对虚拟化宿主机的监控和控制。
启动libvirt服务 1 2 3 sudo systemctl start libvirtd.servicesudo systemctl enable libvirtd.servicesudo systemctl status libvirtd.service
检查kvm模块 1 2 3 $ lsmod | grep kvm kvm_intel 372736 5 kvm 1032192 1 kvm_intel
添加当前用户到 kvm和libvirt 组(可选) 修改组后,需要重新登录或注销再登录才能使更改生效。
方法一 1 2 3 4 sudo usermod -aG kvm $USER sudo usermod -aG libvirt $(whoami )id $(whoami ) uid=1001(gycx) gid=1001(gycx) groups =1001(gycx),108(kvm),138(libvirt)
方法二 1 sudo vim /etc/libvirt/libvirtd.conf
将UNIX域套接字组所有权设置为libvirt(第85行):
1 unix_sock_group = "libvirt"
设置R/W套接字的UNIX套接字权限(第102行):
1 unix_sock_rw_perms = "0770"
将你的用户帐户添加到libvirt组:
1 2 sudo usermod -a -G libvirt $(whoami) newgrp libvirt
重启libvirt守护进程:
1 sudo systemctl restart libvirtd.service
启用嵌套虚拟化(可选)
嵌套虚拟化功能使你可以在VM中运行虚拟机,通过启用内核模块为kvm_intel启用嵌套虚拟化: 1 2 sudo modprobe -r kvm_intel sudo modprobe kvm_intel nested=1
要使此配置持久,请运行: 1 echo "options kvm-intel nested=1" | sudo tee /etc/modprobe.d/kvm-intel.conf
确认嵌套虚拟化设置为是: 1 2 3 4 5 systool -m kvm_intel -v | grep nested nested = "Y" nested_early_check = "N" cat /sys/module/kvm_intel/parameters/nested Y
创建网桥(br0),配置同一网段 为实现从本机外访问该虚拟机必须将虚拟机的网卡映射至网桥。virbr0 网桥是 KVM 安装完成后自动创建的,仅做测试用途。
1 2 3 brctl show bridge name bridge id STP enabled interfaces virbr0 8000.525400a882e2 yes virbr0-nic
通过如下内容在 /etc/netplan 目录下创建文件 01-netcfg.yaml 来新建网桥: 输入ifconfig确认当前网口设备、ip地址和mac地址,本案例中设备为eno2,ip地址填入addresses中,mac地址填入macaddress中 输入ip route得到默认via和metric,填入routes的via和metric中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 network : ethernets : eno2 : dhcp4 : false dhcp6 : false bridges : br0 : interfaces : [eno2] dhcp4 : false addresses : [192.168 .100 .123 /24 ] macaddress : 7c :c2 :55 :4d :e1 :e9 routes : - to : default via : 192.168 .100 .1 metric : 101 nameservers : addresses : [223.5 .5 .5 ] parameters : stp : false dhcp6 : false version : 2
应用网络配置
1 2 sudo netplan applyip add show
创建虚拟机(二选一)
图形化创建虚拟机 运行virt-manager,启动图形化界面进行kvm虚拟机安装 add connection——local install media——choose iso or CDROM install media——选择要安装的iso镜像点击choose volume——Forward——设置CPU和Memory点击Forward——点击enable storage for this virtual machine并点击create a disk image for the virtual machine选择硬盘大小点击Forward——选择网桥为br0点击Finish
终端创建虚拟机 创建4c8g200G的虚拟机,磁盘为稀疏模式,格式为qcow2,总线类型为virtio。同启动一个串行终端打印输出
1 virt-install --virt-type=kvm --name=win10 --vcpus=4 --memory=8192 --osinfo=win10 --cdrom=/var/lib/libvirt/images/win10.iso --disk path=/var/lib/libvirt/images/win10.qcow2,size=200,format=qcow2,bus=virtio,sparse --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole --force