安装部署KVM虚拟机(一)

最近有以特定网络模式,管理KVM虚拟机的需求,先尝试了安装和部署虚拟机。安装KVM虚拟机有四种方式,最近完成读书报告汇报,正逢周末,抽空把这些探索过程分享出来。

安装KVM虚拟机有四种方式:

  • 使用 virt-manager GUI工具
  • 使用 qemu-img 和 qemu-system-x86_64 命令行方式安装
  • 使用 virt-install 命令
  • 使用 libvirt工具集管理虚拟机的生命周期

在安装KVM虚拟机并用libvirt进行管理的时候,有本书对我很有帮助。《KVM Virtualization Cookbook (2017)》,也看见有人称它为KVM虚拟化实践的圣经,但中肯的评价是实践帮助确实很大。


安装环境说明:

软件 版本
Deepin 15.9
virt-top 1.0.8-1+b1 amd64
virt-manager 1.4.3
qemu-system-x86_64 2.12.0
virt-viewer 6.0
libvirtd(libvirt) 4.3.0
virt-install 1.4.3
bridge-utils 1.5-16 amd64

宿主机为Intel CPU,支持Intel虚拟化,确保BIOS里开启VT

cat /proc/cpuinfo |grep vmx| uniq  #intel cpu
# 有输出

KVM是Linux的一个模块

jahentao:~$ lsmod | grep kvm
kvm_intel             204800  0
kvm                   593920  1 kvm_intel
irqbypass              16384  1 kvm

使用 virt-manager GUI工具

命令行输入 virt-manager,打开Virtual Machine Manager窗口页面;

virt-manager GUI

使用 VMM GUI 创建的虚机的xml 定义文件在 /etc/libvirt/qemu/ 目录中。

在操作创建虚拟机过程中遇到了问题:ISO文件所在路径没有搜索权限。

方法一:复制iso镜像到用户目录下。

virt-manager doesn't have permission to access other users' directories and devices. Even when run as root. (you can change this is SElinux, but it's less hassle to just copy the .iso over) 

https://unix.stackexchange.com/questions/409860/virt-manager-the-emulator-may-not-have-search-permissions-for-the-path

方法二:将iso文件所在上层目录改为当前用户和用户组所有。 https://www.reddit.com/r/VFIO/comments/5ti9h2/virtmanager_the_emulator_may_not_have_search/

改为当前用户和用户组所有

继续

Step 1

据说Ubuntu 16.04的iso官方镜像中文安装有问题,换成14.04

Step 2
Step 3
Step 4
Step 4.1
Step 5
开始安装

以下可视化界面安装。

安装中

这样安装好了。

网络使用的default模式,一开始是inactive状态,但安装系统的时候正常。之后重启了,尝试开启,又会遇到default(NAT)模式inactive的问题。

Requested operation is not valid: network 'default' is not active.

管理界面

Virt-manager使用的是Python调用libvirt的API进行GUI管理。

default network未启用
虚拟网络配置

解决方法:

  • 点击左下角启动网络
  • 勾选开机时自动启动
  • 点击应用

这几步图形界面操作,对应的管理命令应该是

# virsh net-autostart default
# virsh net-start default

default虚拟网络,用的virbr0网卡。

jahentao:~$ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:66:de:00:34  txqueuelen 0  (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
enp8s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 40:61:86:b9:34:a3  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
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 9059  bytes 2463836 (2.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9059  bytes 2463836 (2.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
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:06:73:0e  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
wlp6s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.103  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::9733:2f30:b3e:2e39  prefixlen 64  scopeid 0x20<link>
        ether 00:26:c7:a4:10:a6  txqueuelen 1000  (Ethernet)
        RX packets 9148  bytes 4179684 (3.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12135  bytes 8761784 (8.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

By the way, Kubernetes已经有项目将KVM libvirt集成了,名为kubevirt。有个录屏效果。

在请求virt-manager、virsh等系统管理时,每台虚拟机都会由libvirtd启动一个独立的qemu-kvm进程。

虚拟机的属性如CPU,内存,I/O设备配置都在/etc/libvirt/qemu/下、libvirtd通过读取XML配置文件,获取传给qemu-kvm的参数列表。

jahentao:pan$ tree /etc/libvirt/qemu/
/etc/libvirt/qemu/
|-- networks
|   |-- autostart
|   |   `-- default.xml -> /etc/libvirt/qemu/networks/default.xml
|   `-- default.xml
`-- ubuntu14.04.xml

以ubuntu14.04.xml为例

default网络XML

发布者

jahentao

挖掘概念,创造工具