安装虚拟化核心组件
安装方法
前提条件
- 已经配置yum源。配置方式请参见
- 安装操作需要root用户权限。
安装步骤
-
安装QEMU组件。
# yum install -y qemu
-
安装libvirt组件。
# yum install -y libvirt
-
启动libvirtd服务。
# systemctl start libvirtd
说明:
KVM模块已经集成在openEuler内核中,因此不需要单独安装。
验证安装是否成功
-
查看内核是否支持KVM虚拟化,即查看/dev/kvm和/sys/module/kvm文件是否存在,命令和回显如下:
$ ls /dev/kvm /dev/kvm
$ ls /sys/module/kvm parameters uevent
若上述文件存在,说明内核支持KVM虚拟化。若上述文件不存在,则说明系统内核编译时未开启KVM虚拟化,需要更换支持KVM虚拟化的Linux内核。
-
确认QEMU是否安装成功。若安装成功则可以看到QEMU软件包信息,命令和回显如下:
$ rpm -qi qemu Name : qemu Epoch : 2 Version : 4.0.1 Release : 10 Architecture: aarch64 Install Date: Wed 24 Jul 2019 04:04:47 PM CST Group : Unspecified Size : 16869484 License : GPLv2 and BSD and MIT and CC-BY Signature : (none) Source RPM : qemu-4.0.0-1.src.rpm Build Date : Wed 24 Jul 2019 04:03:52 PM CST Build Host : localhost Relocations : (not relocatable) URL : http://www.qemu.org Summary : QEMU is a generic and open source machine emulator and virtualizer Description : QEMU is a generic and open source processor emulator which achieves a good emulation speed by using dynamic translation. QEMU has two operating modes: * Full system emulation. In this mode, QEMU emulates a full system (for example a PC), including a processor and various peripherials. It can be used to launch different Operating Systems without rebooting the PC or to debug system code. * User mode emulation. In this mode, QEMU can launch Linux processes compiled for one CPU on another CPU. As QEMU requires no host kernel patches to run, it is safe and easy to use.
-
确认libvirt是否安装成功。若安装成功则可以看到libvirt软件包信息,命令和回显如下:
$ rpm -qi libvirt Name : libvirt Version : 5.5.0 Release : 1 Architecture: aarch64 Install Date: Tue 30 Jul 2019 04:56:21 PM CST Group : Unspecified Size : 0 License : LGPLv2+ Signature : (none) Source RPM : libvirt-5.5.0-1.src.rpm Build Date : Mon 29 Jul 2019 08:14:57 PM CST Build Host : 71e8c1ce149f Relocations : (not relocatable) URL : https://libvirt.org/ Summary : Library providing a simple virtualization API Description : Libvirt is a C toolkit to interact with the virtualization capabilities of recent versions of Linux (and other OSes). The main package includes the libvirtd server exporting the virtualization support.
-
查看libvirt服务是否启动成功。若服务处于“Active”状态,说明服务启动成功,可以正常使用libvirt提供的virsh命令行工具,命令和回显如下:
$ systemctl status libvirtd ● libvirtd.service - Virtualization daemon Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2019-08-06 09:36:01 CST; 5h 12min ago Docs: man:libvirtd(8) https://libvirt.org Main PID: 40754 (libvirtd) Tasks: 20 (limit: 32768) Memory: 198.6M CGroup: /system.slice/libvirtd.service ─40754 /usr/sbin/libvirtd
制作镜像
制作qcow2格式镜像文件的操作步骤如下:
-
使用root用户安装qemu-img软件包。
# yum install -y qemu-img
-
使用qemu-img工具的create命令,创建镜像文件,命令格式为:
$ qemu-img create -f <imgFormat> -o <fileOption> <fileName> <diskSize>
其中,各参数含义如下:
- imgFormat:镜像格式,取值为raw, qcow2等。
- fileOption:文件选项,用于设置镜像文件的特性,如指定后端镜像文件,压缩,加密等特性。
- fileName:文件名称。
- diskSize:磁盘大小,用于指定块磁盘设备的大小,支持的单位有K、M、G、T,分别代表KiB、MiB、GiB、TiB。
例如,创建一个磁盘设备大小为40GB、格式为qcow2的镜像文件openEuler-imge.qcow2,命令和回显如下:
$ qemu-img create -f qcow2 openEuler-image.qcow2 40G Formatting 'openEuler-image.qcow2', fmt=qcow2 size=4294967296 cluster_size=65536 lazy_refcounts=off refcount_bits=16
搭建Linux网桥
以物理网卡eth0绑定到Linux网桥br0的操作为例,使用root用户执行如下命令搭建Linux网桥:
-
安装bridge-utils软件包。
Linux网桥通常通过brctl工具管理,其对应的安装包为bridge-utils,安装命令如下:
# yum install -y bridge-utils
-
创建网桥br0。
# brctl addbr br0
-
将物理网卡eth0绑定到Linux网桥。
# brctl addif br0 eth0 #这里的eth0 更换成自己电脑上的,ifconfig查询
-
eth0与网桥连接后,不再需要IP地址,将eth0的IP设置为0.0.0.0。
# ifconfig eth0 0.0.0.0
-
设置br0的IP地址。
-
如果有DHCP服务器,可以通过dhclient设置动态IP地址。
# dhclient br0 #公司里面大部分都是dhcp分配,优先使用这个,br0的IP就是自己
-
如果没有DHCP服务器,给br0配置静态IP,例如设置静态IP为192.168.1.2,子网掩码为255.255.255.0。
# ifconfig br0 192.168.1.2 netmask 255.255.255.0
-
准备引导固件
概述
针对不同的架构,引导的方式有所差异。x86支持UEFI(Unified Extensible Firmware Interface)和BIOS方式启动,AArch64仅支持UEFI方式启动。openEuler默认已安装BIOS启动对应的引导文件,不需要用户额外操作。所以这里仅介绍UEFI启动方式的安装方法。
统一的可扩展固件接口UEFI是一种全新类型的接口标准,用于开机自检、引导操作系统的启动,是传统BIOS的一种替代方案。EDK II是一套实现了UEFI标准的开源代码,在虚拟化场景中,通常利用EDK II工具集,通过UEFI的方式启动虚拟机。使用EDK II工具需要在虚拟机启动之前安装对应的软件包 ,本节介绍EDK II的安装方法。
安装方法
如果使用UEFI方式引导,需要安装工具集EDK II,AArch64架构对应的安装包为edk2-aarch64,x86架构对应的安装包为edk2-ovmf。这里以AArch64架构为例,给出具体的安装方法,x86架构仅需将edk2-aarch64替换为edk2-ovmf。
-
安装edk软件包,使用root用户执行如下命令:
在AArch64架构下edk2的包名为edk2-aarch64
# yum install -y edk2-aarch64
在x86_64架构下edk2的包名为edk2-ovmf
# yum install -y edk2-ovmf
-
查询edk软件是否安装成功,命令如下:
在AArch64架构下查询如下
$ rpm -qi edk2-aarch64
若edk软件安装成功,回显类似如下:
Name : edk2-aarch64 Version : 20180815gitcb5f4f45ce Release : 1.oe3 Architecture: noarch Install Date: Mon 22 Jul 2019 04:52:33 PM CST Group : Applications/Emulators
在x86_64架构下查询如下
$ rpm -qi edk2-ovmf
若edk软件安装成功,回显类似如下:
Name : edk2-ovmf Version : 201908 Release : 6.oe1 Architecture: noarch Install Date: Thu 19 Mar 2020 09:09:06 AM CST
Libvirt工具采用XML格式的文件描述一个虚拟机特征,包括虚拟机名称、CPU、内存、磁盘、网卡、鼠标、键盘等信息。用户可以通过修改配置文件,对虚拟机进行管理。本章介绍XML配置文件各个元素的含义,指导用户完成虚拟机配置。
openEulerVM.xml
<domain type='kvm'> <name>openEulerVM</name> <memory unit='GiB'>4</memory> 修改自己的内存 <vcpu>4</vcpu> 修改自己的cpu个数 <os> <type arch='aarch64' machine='virt'>hvm</type> <loader readonly='yes' type='pflash'>/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw</loader> <nvram>/var/lib/libvirt/qemu/nvram/openEulerVM.fd</nvram> </os> <features> <acpi/> <gic version='3'/> </features> <cpu mode='host-passthrough'> <topology sockets='2' cores='2' threads='1'/> </cpu> <iothreads>1</iothreads> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' iothread="1"/> <source file='/mnt/openEuler-image.qcow2'/> <target dev='vda' bus='virtio'/> <boot order='1'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/mnt/XXXXX.iso'/> 修改自己的iso位置 ,不要放到/root目录下面,因为权限问题尽量放到/mnt下面 这个xml文件也放到/mnt下面
<readonly/> <target dev='sdb' bus='scsi'/> <boot order='2'/> </disk> <interface type='bridge'> <source bridge='br0'/> <model type='virtio'/> </interface> <console type='pty'/> <video> <model type='virtio'/> </video> <controller type='scsi' index='0' model='virtio-scsi'/> <controller type='usb' model='ehci'/> <input type='tablet' bus='usb'/> <input type='keyboard' bus='usb'/> <graphics type='vnc' listen='0.0.0.0' passwd='n8VfjbFK'/> 这里很重要 密码自己记住 一会使用vnc连接的时候需要用 </devices> <seclabel type='dynamic' model='dac' relabel='yes'/> </domain>
创建好了xml文件我们就可以创建虚拟机了:
本节给出虚拟机生命周期管理相关命令的示例。
-
创建虚拟机
虚拟机XML配置文件为openEulerVM.xml,命令和回显如下:
# virsh define openEulerVM.xml Domain openEulerVM defined from openEulerVM.xml
-
启动虚拟机
启动名称为openEulerVM的虚拟机,命令和回显如下:
# virsh start openEulerVM Domain openEulerVM started
-
重启虚拟机
重启名称为openEulerVM的虚拟机,命令和回显如下:
# virsh reboot openEulerVM Domain openEulerVM is being rebooted
-
关闭虚拟机
关闭名称为openEulerVM的虚拟机,命令和回显如下:
# virsh shutdown openEulerVM Domain openEulerVM is being shutdown
-
销毁虚拟机
-
若虚拟机启动时未使用nvram文件,销毁虚拟机命令如下:
# virsh undefine <VMInstanse>
-
若虚拟机启动时使用了nvram文件,销毁该虚拟机需要指定nvram的处理策略,命令如下:
# virsh undefine <VMInstanse> <strategy>
其中<strategy>为销毁虚拟机的策略,可取值:
nvram:销毁虚拟机的同时删除其对应的nvram文件。
keep-nvram:销毁虚拟机,但保留其对应的nvram文件。
例如,删除虚拟机openEulerVM及其nvram文件,命令和回显如下:
# virsh undefine openEulerVM --nvram Domain openEulerVM has been undefined
登录虚拟机
本章介绍使用VNC登录虚拟机的方法。
使用VNC密码登录
概述
当虚拟机操作系统安装部署完成之后,用户可以通过VNC协议远程登录虚拟机,从而对虚拟机进行管理操作。
前提条件
使用RealVNC、TightVNC等客户端登录虚拟机,在登录虚拟机之前需要获取如下信息:
这里有一个重要的前提条件就是你的宿主机器上需要安装vnc-server 安装包地址 也可以通过命令直接安装:yum install tigervnc tigervnc-server
启动vnc: vncserver
关于VNC-server的使用请看这个文章:https://codeantenna.com/a/WpukCVvwVv
-
虚拟机所在主机的IP地址。
-
确保客户端所在的环境可以访问到主机的网络。
-
虚拟机的VNC侦听端口,该端口一般在客户机启动时自动分配,一般为5900 + x(x为正整数,按照虚拟机启动的顺序递增,且5900对用户不可见)。
-
如果VNC设置了密码,还需要获取虚拟机的VNC密码。
说明:
为虚拟机VNC配置密码,需要编辑虚拟机XML配置文件,即为graphics元素新增一个passwd属性,属性的值为要配置的密码。例如,将虚拟机的VNC密码配置为n8VfjbFK的XML配置参考如下:<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us' passwd='n8VfjbFK'> 这个密码就是vnc连接时输入的密码 <listen type='address' address='0.0.0.0'/> </graphics>
操作步骤
-
查询虚拟机使用的VNC端口号。例如名称为openEulerVM的虚拟机,命令如下:
# virsh vncdisplay openEulerVM :3
说明:
登录 VNC 需要配置防火墙规则,允许 VNC 端口的连接。参考命令如下,其中X为数值“5900 + 端口号” ,例如本例中为5903。 这里建议直接关闭防火墙firewall-cmd --zone=public --add-port=X/tcp
-
打开VncViewer软件,输入主机IP和端口号。格式为“主机IP:端口号”,例如:“10.133.205.53:3”。 关于欧拉服务器下载vnc-viewer地址下载双击运行无需安装 https://www.realvnc.com/en/connect/download/vnc/
-
单击“确定”输入VNC密码(可选),登录到虚拟机VNC进行操作。
- 一般都是连接不上,或者是黑屏的。我们需要修改一个地方: