博文KVM 介绍(1):简介及安装对 KVM 已经有一个较为详细的介绍,本文就不重复这些,而主要阐述建立第一个 KVM 虚拟机的详细步骤。另外,如果如 KVM/QEMU/Libvirt 这三者关系不清楚的,可以参考博文KVM-Qemu-Libvirt 三者之间的关系。
本文所用测试环境(CentOS 7.2):
1 | $ uname -a |
VNC 使用
VNC 工作需要一个服务端和一个客户端,在本文中,服务端采用 TigerVNC,客户端采用 TightVNC。这两款工具都是免费的,用起来也比较方便。
VNC 服务端直接用 yum 命令就可以安装:
1 | sudo yum install tigervnc-server -y |
客户端可从官网直接下载 Windows 安装包。
注意,如果客户端连接服务端被拒绝,很有可能是防火墙
禁止了。这时只要开启相应的端口即可。
启动虚拟机
设置 VNC 服务端监听所有请求
打开文件/etc/libvirt/qemu.conf
,设置vnc_listen
字段如下:
1 | # VNC is configured to listen on 127.0.0.1 by default. |
这样,我们在启动虚拟机的时候也可以不用指定vnclisten
参数(针对 virt-install 而言)。
宿主机网络设置
这次试验所用的宿主机有两个网卡,将其中一个 IP 腾空不用,用于桥接(Bridge)
(/etc/sysconfig/network-scripts/ifcfg-enp1s0):
重启网络:
1 | sudo /etc/init.d/network restart |
创建网桥 br0
,用于桥接虚拟机和宿主机:
将宿主机网卡添加到网桥,并为网桥配置 IP:
将网桥加入白名单:
如果不加入白名单,则在启动虚拟机的时候会提示如下错误:
准备镜像和磁盘
启动虚拟机必备的两个东西是镜像和磁盘。镜像我们只要从网上下载即可。磁盘的话也比较方便,可以用qemu-img
工具来制作,或者直接用dd
命令即可:
1 | qemu-img create -f qcow2 CentOS7-master.qcow2 10G |
使用 qemu-kvm
注:用这种方法新建虚拟机,Libvirt 并不能够管理得到。
安装系统
启动虚拟机:
1 | qemu-kvm -hda CentOS7-master.qcow2 -vnc :5 -m 2048 -boot order=dc -cdrom ../images/CentOS-7-x86_64-Minimal-1511.iso |
用 TightVNC 客户端连接:
首次启动会进入系统安装界面:
网络配置
注:这一步其实可以合并到上一节“安装系统”,不过当时做实验时候没注意,分成了两步。
这部分详细参数解释可参考博文(KVM连载)4.4.2 使用网桥模式(BRIDGE NETWORKING MODE)。
创建虚拟网卡脚本
添加创建虚拟网卡 tap0
的脚本 /etc/qemu-ifup
(尽量不要手动创建,减少错误):
1 | #!/bin/bash |
启动虚拟机
因为系统已安装,可以直接从硬盘启动虚拟机(root
权限):
1 | qemu-kvm -hda CentOS7-master.qcow2 -net nic -net tap,ifname=tap0,script=/etc/qemu-ifup,downscript=no -vnc :5 -m 2048 -boot order=c |
检查
接下来的操作和检查跟本文“使用 virsh -> 网络配置”部分是一样的,请参考之。
使用 virt-install
virt-install 其实是封装了 qemu-kvm 的操作(一个 Python 脚本),使得虚拟机创建更加方便。详细可参考博文KVM 虚拟化之 virt-install。
使用 virsh
配置文件
Libvirt 使用 XML 配置文件对虚拟机进行描述。对该配置文件,Libvirt 官网有一个非常详细的说明。在这里,我们所用的虚拟机配置文件如下:
1 | <domain type='kvm'> |
然后按如下步骤即可启动虚拟机、通过 VNC 连接到虚拟机:
实际上,针对我们的配置文件,Libvirt 会帮我们补充一些默认参数
。下边的配置文件是从 virsh 中 dump 出来的(virsh domdump CentOS7
),大家可以对比一下:
1 | <domain type='kvm' id='2'> |
网络配置
这部分操作可参考 Libvirt 官方文档 Networking。
查看网络设备
可以看到宿主机中生成了两个虚拟机网络设备(一个是回环设备 lo):
查看网桥:
通过 VNC 进入虚拟机也可以看到其网络设备:
配置虚拟机网络
在虚拟机中配置网络(当然也可以自己指定 IP):
当虚拟机关机后,虚拟网卡 tap0
会自动消失:
其他
另外,虚拟机的启动参数也可以通过命令ps
获取得到:
最后,用 virsh shutdown 主机名
可以关机、virsh destroy 主机名
可关闭虚拟机电源,virsh undefine 主机名
可删除虚拟机(其实是取消对虚拟机的管理,原配置文件和已写入数据的磁盘都不会被删除,可继续使用)。更多命令可参考博文KVM 虚拟机日常管理与配置。
使用 virt-manager
virt-manager 是图形化界面(源码链接),这里就不介绍了。
另外,virt-manager 还提供了 virt-install、virt-clone、virt-viewer 三个命令行脚本。