KVM — 使用 libvirt 工具栈创建管理虚拟机实例
应用准备
启用硬件虚拟化支持功能,对于不同宿主机,启用方式略有不同
如果虚拟机的宿主机为Windows,假如使用VMware中的虚拟机作为宿主机,需要在VMware选项中的”处理器”选项中启用”虚拟化 Intel VT-x/EPT 或 AMD-V/RVI(V) ” 选项。
如果虚拟机的宿主机为Linux,需要在BIOS处启动 Intel VT-x/EPT 或 AMD-V/RVI(V) 虚拟化技术
验证系统已经支持KVM并加载该模块,使宿主机成为hyperViso
- 搜索cpu信息中是否有以下字段
grep -E -i "(svm|vmx|lm)" /proc/cpuinfo
- 查看kvm模块信息
modinfo kvm
- 加载kvm模块并查看结果
modprobe kvm
lsmod | grep kvm
kvm_intel 170181 0
kvm 554609 1 kvm_intel
irqbypass 13503 1 kvm
- 查看kvm字符设备是否存在
ls -l /dev/kvm
crw-------. 1 root root 10, 232 Jul 27 03:58 /dev/kvm
KVM 的三个组件
kvm.ko :模块
qemu-kvm :用于实现虚拟化的辅助管理用户空间的工具程序,能够模拟 I/O 设备
libvirt :虚拟化工具包
使用 libvirt 工具栈
- 安装程序包,启动服务并查看UDP端口
yum install -y libvirt libvirt-daemon-kvm virt-manager
rpm -ql libvirt-daemon
systemctl start libvirtd.service
ss -unlp
UNCONN 0 0 *%virbr0:67 *:* users:(("dnsmasq",pid=1808,fd=3))
- 查看自动创建的网桥设备
ifconfig -a
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:8f:27:65 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0-nic: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether 52:54:00:8f:27:65 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- 查看自动生成的 nat 表的POSTROUTING 链上的 MASQUERADE 规则
iptables -t nat -vnL
Chain POSTROUTING (policy ACCEPT 6 packets, 426 bytes)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 192.168.122.0/24 224.0.0.0/24
0 0 RETURN all -- * * 192.168.122.0/24 255.255.255.255
0 0 MASQUERADE tcp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
0 0 MASQUERADE udp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
0 0 MASQUERADE all -- * * 192.168.122.0/24 !192.168.122.0/24
- 查看虚拟机管理命令 virsh
[root@localhost ~]# which virsh
/usr/bin/virsh
[root@localhost ~]# rpm -qf /usr/bin/virsh
libvirt-client-2.0.0-10.el7_3.9.x86_64
创建网桥
- 使用 virsh 的 iface-bridge 子命令创建一个名为 “br0” 的网卡接口,物理网卡 ens33 从此会成为虚拟交换机
virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33
注意:ens33 物理接口会成为虚拟交换机,br0 虚拟接口会代替 ens33 成为新的宿主机的网卡接口
上面一条命令执行完成后,两个接口发生角色转换,需要重启network服务,重启服务会报错,再一次重启network服务即可
ifconfig
#结果
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.50.18 netmask 255.255.0.0 broadcast 172.16.255.255
inet6 fe80::20c:29ff:fe99:ea72 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:99:ea:72 txqueuelen 1000 (Ethernet)
RX packets 6866 bytes 936170 (914.2 KiB)
RX errors 0 dropped 2 overruns 0 frame 0
TX packets 68 bytes 9383 (9.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:99:ea:72 txqueuelen 1000 (Ethernet)
RX packets 173822 bytes 158449094 (151.1 MiB)
RX errors 0 dropped 169 overruns 0 frame 0
TX packets 57053 bytes 4357222 (4.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
启动virt-manager图形界面并安装配置虚拟机
- 启动virt-manager图形界面,在图形界面中操作安装配置虚拟机
virt-manager &
- 如果使用CentOS的minimal(最小化)系统,需要安装以下程序包,也可以安装图形界面的几个包组
yum install -y xorg-x11-font-utils.x86_64 xorg-x11-server-utils.x86_64 xorg-x11-utils.x86_64 xorg-x11-xauth.x86_64 xorg-x11-xinit.x86_64 xorg-x11-font-utils.x86_64 xorg-x11-drv-ati.x86_64 dejavu-lgc-sans-fonts
在虚拟机硬件配置选项中,将 “Display VNC” 一项中的 “VNC Server” 中的 “Type” 修改为 “VNC Server” 。