基于openEuler平台的虚拟机操作

管理虚拟机

虚拟机生命周期

虚拟机状态

未定义(undefined):虚拟机未定义或未创建,即libvirt认为该虚拟机不存在。 关闭状态(shut off):虚拟机已经被定义但未运行,或者虚拟机被终止。 运行中(running):虚拟机处于运行状态。 暂停(paused):虚拟机运行被挂起,其运行状态被临时保存在内存中,可以恢复到运行状态。 保存(saved):与暂停(paused)状态类似,其运行状态被保存在持久性存储介质中,可以恢复到运行状态。 崩溃(crashed):通常是由于内部错误导致虚拟机崩溃,不可恢复到运行状态。

状态转换

虚拟机标识

在libvirt中,每一个虚拟机实例都称作一个“domain”,每一个domain都有唯一标识,通过Name(名称)、UUID(通用唯一识别码)、Id(运行标识)表示。

管理命令

使用virsh命令工具管理虚拟机生命周期

virsh <operate> <obj> <options>

各参数含义如下:

operate:管理虚拟机生命周期对应操作,例如创建、销毁、启动等。 obj:命令操作对象,如指定需要操作的虚拟机。 options:命令选项,该参数可选。

在线修改虚拟机配置

虚拟机创建之后用户可以修改虚拟机的配置信息,称为在线修改虚拟机配置。在线修改配置以后,新的虚拟机配置文件会被持久化,并在虚拟机关闭、重新启动后生效。

使用virsh edit打开虚拟机名称为openEulerVM对应的XML配置文件。

# virsh edit openEulerVM

修改虚拟机配置文件。

保存虚拟机配置文件并退出。

关闭虚拟机。

# virsh shutdown openEulerVM

启动虚拟机使配置修改生效。

# virsh start openEulerVM

查询虚拟机信息

libvirt提供了一套命令行工具用于查询虚拟机的相关信息。

查询主机上的虚拟机信息

查询主机上处于运行和暂停状态的虚拟机列表。

# virsh list

查询主机上已经定义的所有虚拟机信息列表。

# virsh list --all

查询虚拟机基本信息

Libvirt组件提供了一组查询虚拟机状态信息的命令,包括虚拟机运行状态、设备信息或者调度属性等。

登录虚拟机

使用VNC密码登录

查询虚拟机使用的VNC端口号。例如名称为openEulerVM的虚拟机

# virsh vncdisplay openEulerVM

:3

打开VncViewer软件,输入主机IP和端口号。格式为“主机IP:端口号”,例如:“10.133.205.53:3”

单击“确定”输入VNC密码(可选),登录到虚拟机VNC进行操作

#####配置VNC-TLS登录 略

虚拟机安全启动

安全启动(Secure Boot)就是利用公私钥对启动部件进行签名和验证。安全启动的作用是检测设备启动阶段固件(Fireware)以及软件是否被篡改,防止恶意软件侵入和修改。安全启动验签顺序:UEFI BIOS->shim->grub->vmlinuz(依次验签通过并加载)。

安全启动流程

热迁移虚拟机

介绍

当虚拟机在物理机上运行时,物理机可能存在资源分配不均,造成负载过重或过轻的情况。另外,物理机存在硬件更换、软件升级、组网调整、故障处理等操作。虚拟机热迁移技术可以在业务连续前提下,完成负载均衡或上述操作,提升用户体验和工作效率。 虚拟机热迁移通常是将整个虚拟机的运行状态完整保存下来,同时可以快速恢复到原有的甚至不同的硬件平台上。openEuler支持共享存储热迁移和非共享存储热迁移两种方式。

热迁移操作

前提条件

进行热迁移之前要确保源端和目的端主机之间的网络是互通的,并且源端和目的获得资源权限是对等的,即两端同时能够访问到相同的存储资源和网络资源。 在执行虚拟机热迁移前应当对虚拟机进行健康检查,并确保目的端主机有足够的CPU、内存和存储资源。

热迁移操作(共享存储)

确定是否为共享存储。

# virsh domblklist <VMInstanse>

Target  Source

--------------------------------------------

sda      /dev/mapper/open_euleros_disk

sdb      /mnt/nfs/images/openeuler-test.qcow2

如果虚拟机的所有存储设备都在远端共享存储之上,则说明该虚拟机为共享存储虚拟机,否则为非共享存储虚拟机。 2. 执行如下命令,进行虚拟机热迁移。

# virsh migrate --live --unsafe openEulerVM qemu+ssh://<destination-host-ip>/system

热迁移完成后命令返回,虚拟机在目的端主机正常运行。

热迁移操作(非共享存储)

首先,先查询虚拟机存储设备列表,确保虚拟机使用的是非共享存储。

# virsh domblklist <VMInstanse>

执行热迁移之前需要在目的端主机相同磁盘目录下创建一个虚拟磁盘文件,注意磁盘的格式和大小必须保持一致。

# qemu-img create -f qcow2 /mnt/sdb/openeuler/openEulerVM.qcow2 20G

在源端使用virsh migrate命令来执行热迁移,迁移的时候会将存储也一并迁移到目的端。

# virsh migrate --live  --unsafe --copy-storage-all --migrate-disks sda

openEulerVM qemu+ssh://<dest-host-ip>/system

热迁移完成后命令返回,虚拟机在目的端主机行正常运行,存储设备也被迁移到目的主机上。

热迁移操作(加密传输)

管理系统资源

openEuler 虚拟化使用libvirt命令来管理虚拟机的系统资源。

管理虚拟CPU

CPU份额

虚拟化环境下,同一主机上的多个虚拟机竞争使用物理CPU。CPU份额表示一个虚拟机竞争物理CPU计算资源的能力大小总和。通过调整CPU份额来保证虚拟机CPU计算资源服务质量。

查看虚拟机的当前CPU份额

$ virsh schedinfo <VMInstance>

在线修改:修改处于running状态的虚拟机的当前CPU份额

$ virsh schedinfo <VMInstance> --live cpu_shares=<number>

修改后立即生效,但重启后失效

持久化修改:在libvirt内部配置中修改虚拟机的CPU份额

$ virsh schedinfo <VMInstance> --config cpu_shares=<number>

不会立即生效,下次启动后一直生效

绑定QUMU进程至物理CPU

QEMU主进程绑定特性是将QEMU主进程绑定到特定的物理CPU范围内,从而保证了运行不同业务的虚拟机不会干扰到邻位虚拟机。 通过virsh emulatorpin命令可以绑定QEMU主进程到物理CPU。

查看QEMU进程当前绑定的物理CPU范围

$ virsh emulatorpin openEulerVM

在线绑定:修改处于running状态的虚拟机对应的QEMU进程的绑定关系

$ virsh emulatorpin openEulerVM --live 2-3

绑定到物理CPU2、3

持久化绑定:在libvirt内部配置中修改虚拟机对应的QEMU进程的绑定关系

$ virsh emulatorpin openEulerVM --config 0-3,^1

绑定到物理CPU0、2、3

调整虚拟CPU绑定关系

把虚拟机的vCPU绑定在物理CPU上,即vCPU只在绑定的物理CPU上调度,在特定场景下达到提升虚拟机性能的目的。 通过virsh vcpupin命令可以调整vCPU和物理CPU的绑定关系。

查看虚拟机的当前vCPU绑定信息

$ virsh vcpupin openEulerVM

在线调整:修改处于running状态的虚拟机的当前vCPU绑定关系

$ virsh vcpupin openEulerVM  --live 0 2-3

将vCPU0绑定在物理CPU2、3上

持久化调整:在libvirt内部配置中修改虚拟机的vCPU绑定关系

$ virsh vcpupin openEulerVM --config 0 0-3,^1

将vCPU0绑定在物理CPU0、2、3上

CPU热插

在线增加(热插)虚拟机CPU是指在虚拟机处于运行状态下,为虚拟机热插CPU而不影响虚拟机正常运行的方案。

如果热插CPU后需要自动上线热插的CPU,可以使用root权限在虚拟机内部创建udev rules文件/etc/udev/rules.d/99-hotplug-cpu.rules,并在其中定义udev规则,内容参考如下:

# automatically online hot-plugged cpu

ACTION=="add", SUBSYSTEM=="cpu", ATTR{


  online}="1"

利用virsh工具进行虚拟机CPU热插操作。例如给虚拟机openEulerVM热插CPU到6,且在线生效的参考命令如下:

virsh setvcpus openEulerVM 6 --live

管理虚拟内存

NUMA简介

传统的多核运算使用SMP(Symmetric Multi-Processor)模式:将多个处理器与一个集中的存储器和I/O总线相连。所有处理器只能访问同一个物理存储器。SMP的缺点是可伸缩性有限,因为在存储器和I/O接口达到饱和的时候,增加处理器并不能获得更高的性能。 NUMA(Non Uniform Memory Access Architecture) 模式是一种分布式存储器访问方式,处理器可以同时访问不同的存储器地址,大幅度提高并行性。 NUMA模式下,处理器被划分成多个“节点”(NODE), 每个节点分配一块本地存储器空间。所有节点中的处理器都可以访问全部的物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。

配置Host-NUMA

通过虚拟机XML配置文件为虚拟机指定主机的NUMA节点,使虚拟机内存分配在指定的NUMA节点上。本特性一般与vCPU绑定一起使用,从而避免vCPU远端访问内存,以提高性能。

查看host的NUMA拓扑结构

$ numactl -H

在虚拟机XML配置文件中添加numatune字段,创建并启动虚拟机 <numatune> <memory mode="strict" nodeset="0"/> </numatune>

配置Guest-NUMA

openEuler提供了Guest NUMA特性,在虚拟机内部呈现出NUMA拓扑结构。配置Guest NUMA时可以指定vNode的内存在HOST上的分配位置,实现内存的分块绑定,同时配合vCPU绑定,使vNode上的vCPU和内存在同一个物理NUMA node上。

内存热插

当前openEuler版本支持在线给虚拟机添加内存,当虚拟机出现物理内存不足又无法关闭虚拟机的时候,可以使用此特性增加虚拟机的物理内存资源。

如果热插内存后需要自动上线热插的内存,可以使用root权限在虚拟机内部创建udev rules文件/etc/udev/rules.d/99-hotplug-memory.rules,并在其中定义udev规则,内容参考如下:

# automatically online hot-plugged memory

ACTION=="add", SUBSYSTEM=="memory", ATTR{


  state}="online"

根据需要热插的内存大小和虚拟机Guest NUMA Node创建内存描述xml文件。

<memory model=dimm>

  <target>

  <size unit=MiB>1024</size>

  <node>0</node>

  </target>

</memory>

使用virsh attach-device命令为虚拟机热插内存。

# virsh attach-device openEulerVM memory.xml --live

管理设备

管理虚拟磁盘

虚拟磁盘类型主要包含virtio-blk、virtio-scsi、vhost-scsi等。virtio-blk模拟的是一种block设备,virtio-scsi和vhost-scsi模拟的是一种scsi设备。

挂载virtio-scsi磁盘(重启后失效)

$ virsh attach-device <VMInstance> <attach-device.xml>

卸载virtio-scsi磁盘

$ virsh detach-device <VMInstance> <detach-device.xml>

管理虚拟网卡

虚拟网卡类型主要包含virtio-net、vhost-net、vhost-user等。

挂载vhost-net网卡(重启后失效)

$ virsh attach-device <VMInstance> <attach-device.xml>

卸载vhost-net网卡

$ virsh detach-device <VMInstance> <detach-device.xml>

配置虚拟串口

Linux虚拟机串口控制台,即虚拟机串口连接到宿主机的一个伪终端设备。提供虚拟串口,来达到虚拟机与宿主机之间互相通信的目的。通过在虚拟机的XML配置文件中增加相应串口的配置项,可以实现虚拟机与宿主机之间的互相通信。

在虚拟机的XML配置文件中"devices"节点下添加如下所示的虚拟串口配置项

<serial type=pty>

    </serial>

    <console type=pty>

      <target type=serial/>

    </console>

使用virsh console命令连接到正在运行的虚拟机的pty串口。

$ virsh console <VMInstance>

如果要确保没有遗漏任何串口消息,请在启动虚拟机时使用–console选项连接到串口。

$ virsh start --console <VMInstance>

管理虚拟机可维护性

虚拟机NMI Watchdog

NMI Watchdog是一种用来检测Linux出现hardlockup(硬死锁)的机制。通过产生NMI不可屏蔽中断,从而在Linux内核关闭中断的代码区间也能打断代码的执行,进一步检测内核是否出现硬死锁。 针对ARM架构虚拟机配置NMI Watchdog的操作步骤如下:

在虚拟机的引导配置文件grub.cfg中添加如下参数:nmi_watchdog=1 pmu_nmi_enable hardlockup_cpu_freq=auto irqchip.gicv3_pseudo_nmi=1 disable_sdei_nmi_watchdog

检查虚拟机内部PMU Watchdog是否加载成功,如果加载成功,内核dmesg日志打印类似如下内容

[2.1173222] NMI watchdog: CPU0 freq probed as 2399999942 HZ.

工具使用指南

vmtop使用指南

vmtop 是运行在宿主机host上的用户态工具。使用vmtop可以实时动态地查看虚拟机资源的使用情况,例如CPU占用率、内存占用率、vCPU陷入陷出次数等。因此,可以使用vmtop作为虚拟化问题定位和性能调优的工具。 vmtop是一款命令行工具,直接以命令行的方式运行 vmtop 即可。 另外,vmtop还提供了不同可选选项,用于查询不同信息。

语法格式

vmtop [选项]

选项说明

d: 设置显示刷新的时间间隔,单位:秒 H: 显示虚拟机的线程信息 n: 设置显示刷新的次数,刷新完成后退出 b: Batch模式显示,可以用于重定向到文件 h: 显示帮助信息 v: 显示版本 p: 监控指定id的虚拟机

快捷键

在vmtop运行状态下使用的快捷键

H: 显示或关闭虚拟机线程信息,默认显示该信息 up/down: 向上/向下移动显示的虚拟机列表 left/right: 向左/向右移动显示的信息,从而显示因屏幕宽度被隐藏的列 f: 进入监控项编辑模式,选择要开启的监控项 q: 退出vmtop进程

文章来自:IT技术分享网

分享地址:http://www.5ityx.com/cate100/150795.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容