KVM虚拟化:(六)其他管理工具简介

admin 2022年09月13日 1,111次浏览

1、virt-manager

1.1、简介

virt-manager 是用于管理虚拟机的图形化的桌面用户接口,目前仅支持在 Linux 或其他类 UNIX 系统中运行。virt-manager 依赖的一些程序库主要包括 Python(用于应用程序逻辑部分的实现)、 GTK+PyGTK(用于UI界面)和 libvirt(用于底层的API)

virt-manager 工具在图形界面中实现了一些易用且丰富的虚拟化管理功能,其功能如下:

  • 对虚拟机生命周期的管理,如创建、修改、启动、暂停、恢复和停止虚拟机,还包括虚拟快照、动态迁移等功能

  • 对运行中客户机实时性能、资源利用率等监控,统计结果的图形化展示

  • 对创建客户机的图形化的引导,对客户机的资源分配和虚拟硬件的配置和调整等功能也提供了图形化的支持

  • 内置了一个 VNC 和 SPICE 客户端,可以用于连接到客户机的图形界面进行交互

  • 支持本地或远程管理 KVM、Xen、QEMU、LXC、ESX 等 Hypervisor上的客户机

1.2、安装与使用

  • 安装virt-manager

    [root@kvm user]# yum install virt-manager -y
    
  • 使用virt-manager

    直接在终端中执行 virt-manager 即可

1.3、动态迁移

1.3.1、迁移条件

在 KVM 虚拟环境中,如果遇到宿主机负载过高或需要升级宿主机硬件等需求时,可以选择将部分或全部客户机动态迁移到其他的宿主机上继续运行。在做动态迁移之前,需要满足以下前提条件才能使动态迁移成功实施

  • 源宿主机和目的宿主机使用共享存储,如 NFS、iSCSI、基于光纤通道的 LUN、GFS2 等,而且它们挂载共享存储到本地的挂载路径需要完全一致,被迁移的客户机就是使用该共享存储上的镜像文件

  • 硬件平台和 libvirt 软件的版本要尽可能的一致,如果软硬件平台差异较大,可能会增加动态迁移失败的概率

  • 源宿主机和目的宿主机的网络通畅并且打开了对应的端口

  • 源宿主机和目的宿主机必须有相同的网络配置,否则可能出现动态迁移之后客户机的网络不能正常工作的情况

  • 如果客户机使用了和源宿主机建立桥接的方式获得网络,那么只能在同一个局域网中进行迁移,否则客户机在迁移后,其网络将无法正常工作

1.3.2、迁移过程

  • 在需要迁移的客户机上点击右键,选择【迁移】或【Migrate】
  • 填写目的宿主机的 IP 或主机名、端口等信息,其余选项可以不填写,一般使用默认值即可
  • 填写好动态迁移的设置信息后,单击【迁移】或【Migrate】按钮即进入正式的动态迁移过程

2、virt-viewer

2.1、简介

virt-viewer 是一个显示虚拟化客户机的图形界面的工具。virt-viewer 使用 GTK-VNC 或 SPICE-GTK 作为它的显示能力,使用 libvirt API 去查询客户机的 VNC 或 SPICE 服务器端的信息。virt-viewer 经常用于替换传统的 VNC 客户端查看器,因为 VNC 不支持 x509 认证授权的 SSL / TLS 加密,而 virt-viewer 是支持的

2.2、安装与使用

virt-viewer 连接到的客户机可以通过客户机的名称、域 ID、UUID 等表示来唯一指定。virt-viewer 还支持 “-c URI”“–connection URI” 参数来指定连接到远程宿主机上的一个客户机,当然远程连接时一些必要的认证还是必需的

  • 安装virt-viewer

    [root@kvm user]# yum install virt-viewer -y
    
  • 使用语法

    virt-viewer [OPTION...] --DOMAIN-NAME|ID|UUID
    
  • 使用示例

    [root@kvm user]# virt-viewer --domain-name centos7
    

3、virt-top

3.1、简介

virt-top 是一个用于展示虚拟化客户机运行状态和资源使用率的工具,它与Linux系统上常用的 “top” 工具类似,而且它的许多快捷键和命令行参数的设置都与 “top” 工具相同。virt-top 也是使用 libvirt API 来获取客户机的运行状态和资源使用情况的,所以只要是 libvirt 支持的 Hypervisor,就可以用 virt-top 监控该 Hypervisor 上的客户机状态

3.2、安装与使用

  • 安装virt-top

    [root@kvm user]# yum install virt-top -y
    
  • 使用virt-top

    直接运行 virt-top 命令后,将会显示出当前宿主机上各个客户机的运行情况,其中包括宿主机的 CPU、内存的总数,也包括各个客户机的运行状态、CPU、内存的使用率

    [root@kvm user]# virt-top
    virt-top 23:23:04 - x86_64 28/28CPU 1200MHz 31946MB
    2 domains, 2 active, 2 running, 0 sleeping, 0 paused, 0 inactive D:0 O:0 X:0
    CPU: 0.0%  Mem: 4096 MB (4096 MB by guests)
    
       ID S RDRQ WRRQ RXBY TXBY %CPU %MEM    TIME   NAME
        1 R                      0.0  0.0   1:03.80 centos7
       15 R                      0.0  0.0   0:39.87 centos7_2
    

4、libguestfs

4.1、简介

libguestfs 是用于访问和修改虚拟机的磁盘镜像的一组工具集合。libguestfs 提供了访问和编辑客户机中的文件、脚本化修改客户机中的信息、监控磁盘使用和空闲的统计信息、P2V、V2V、创建客户机、克隆客户机、备份磁盘内容、格式化磁盘、调整磁盘大小等非常丰富的功能。libguestfs 支持大部分的主流客户机操作系统,如:CentOS、Fedora、Ubuntu、Windows 等操作系统;libguestfs 除了支持 KVM 虚拟机,它甚至支持 VMware、Hyper-V 等非开源的虚拟机

4.2、安装与使用

4.2.1、安装libguestfs工具

[root@kvm user]# yum install libguestfs-tools libguestfs-tools-c -y

4.2.2、使用libguestfs工具

libguestfs-tools 提供了很多工具,可以分别对应不同的功能和使用场景下表中提供了部分功能对照说明

命令 功能描述
virt-alignment-scan 检查虚拟机分区的对齐
virt-builder 快速构建虚拟机映像
virt-builder-repository 为 virt-builder 创建存储库
virt-cat 显示虚拟机中一个文件的内容
virt-copy-in 往虚拟机中复制文件或目录
virt-copy-out 虚拟机往外复制文件或目录
virt-customize 自定义虚拟机
virt-df 查看虚拟机中文件系统空间使用情况
virt-diff 对比虚拟机之间的差异
virt-edit 在虚拟机中编辑文件
virt-filesystems 显示虚拟机中的文件系统、分区、块设备和LVM
virt-format 格式化分区
virt-get-kernel 从客户机中提取 kernel 和 ramdisk
virt-index-validate 验证 virt-builder 索引文件
virt-inspector 显示有关虚拟机的信息
virt-log 显示虚拟机中的日志文件
virtlogd libvirt 日志管理守护进程
virt-ls 列出虚拟机中的文件
virt-make-fs 使用 tar 文件创建一个文件系统
virt-rescue 在虚拟机上运行 rescue shell
virt-resize 调整虚拟机磁盘的大小
virt-sparsify 稀疏化虚拟机磁盘(不一次性把空间全部分配)
virt-sysprep 重置或取消配置虚拟机,以便可以进行克隆
virt-tail 使用 tail 命令查看虚拟机中的文件内容
virt-tar-in 将 tar 文件解压到虚拟机磁盘映像中
virt-tar-out 将虚拟机磁盘映像目录打包成一个 tar 文件
  • 查看虚拟机中的文件的内容

    [root@kvm user]# virt-cat --domain centos7 /etc/fstab
    
    /dev/mapper/centos-root /                       xfs     defaults        0 0
    UUID=46c5de2d-c32f-4fbd-8c52-ed7d04f479ff /boot                   xfs     defaults        0 0
    /dev/mapper/centos-swap swap                    swap    defaults        0 0
    
  • 查看虚拟机中文件系统空间使用情况

    [root@kvm user]# virt-df -h --domain centos7
    文件系统                            大小 已用空间 可用空间 使用百分比%
    centos7:/dev/sda1                        1014M       118M       896M   12%
    centos7:/dev/centos/root                   47G       1.2G        46G    3%
    

5、cockpit

在 RHEL 中,提供了 cockpit 工具,通过该工具,可以通过 web 界面来创建与管理虚拟机

  • 安装cockpit工具

    # 安装cockpit管理工具
    [root@kvm-rocky9 ~]# yum install cockpit cockpit-machines cockpit-storaged -y
    [root@kvm-rocky9 ~]# systemctl enable --now cockpit
    
    • cockpit:服务端程序
    • cockpit-machines:虚拟机管理插件
    • cockpit-storaged:存储管理插件

6、QEMU Guest Agent

6.1、概述

为了更好的管理虚拟机,包括 KVM 在内的虚拟化都需要通过某种机制与虚拟机通信,这样既可以获得虚拟机操作系统的详细信息,也可以向虚拟机操作系统发出指令。在 VMware 虚拟平台中是通过在虚拟机中安装 VMware Tools 实现的,而在 KVM 中则需要安装 QEMU Guest Agent 及 VirtIO 串行控制器来实现该功能

QEMU Guest Agent 是虚拟机上的一个守护程序或服务,需要与 Channel qemu-ga 设备协同工作。宿主机上的 virsh、virt-manager 等基于 libvirt 的应用程序与虚拟机上的 QEMU Guest Agent 的通信是通过虚拟机上的 VirtIO 串行控制器设备使用字符设备驱动程序连接到宿主机上,而虚拟机中的 QEMU Guest Agent 负责侦听此串行通道上的信号

6.2、Linux下使用QEMU Guest Agent

在创建 Linux 虚拟机时,默认都会配置 VirtIO 串口控制器和 qemu-ga 通道设备,在安装系统时,如果安装程序检测到这两个设备,就会自动安装 QEMU Guest Agent,此时就可以更方便的管理虚拟机了

6.2.1、安装qemu-guest-agent

  • 查看系统是否安装qemu-guest-agent

    [root@kvm ~]# systemctl list-unit-files | grep qemu-guest-agent
    qemu-guest-agent.service                                                  enabled         enabled
    
  • 安装qemu-guest-agent

    root@kvm-debian12:~# apt install qemu-guest-agent -y
    

6.2.2、使用qemu-guest-agent命令

  • 查看支持的命令

    QEMU Guest Agent 对每种系统支持的命令不尽相同,可以使用 virsh qemu-agent-command VM-GUEST '{"execute":"guest-info"}' 查看该系统支持的相关命令

    [root@kvm ~]# virsh qemu-agent-command --domain debian12 '{"execute":"guest-info"}'
    {"return":{"version":"7.2.5","supported_commands":[
    {"enabled":true,"name":"guest-get-cpustats","success-response":true},
    {"enabled":true,"name":"guest-get-diskstats","success-response":true},
    {"enabled":true,"name":"guest-ssh-remove-authorized-keys","success-response":true},
    {"enabled":true,"name":"guest-ssh-add-authorized-keys","success-response":true},
    {"enabled":true,"name":"guest-ssh-get-authorized-keys","success-response":true},
    {"enabled":false,"name":"guest-get-devices","success-response":true},
    {"enabled":true,"name":"guest-get-osinfo","success-response":true},
    {"enabled":true,"name":"guest-get-timezone","success-response":true},
    {"enabled":true,"name":"guest-get-users","success-response":true},
    {"enabled":true,"name":"guest-get-host-name","success-response":true},
    {"enabled":true,"name":"guest-exec","success-response":true},
    {"enabled":true,"name":"guest-exec-status","success-response":true},
    {"enabled":true,"name":"guest-get-memory-block-info","success-response":true},
    {"enabled":true,"name":"guest-set-memory-blocks","success-response":true},
    {"enabled":true,"name":"guest-get-memory-blocks","success-response":true},
    {"enabled":true,"name":"guest-set-user-password","success-response":true},
    {"enabled":true,"name":"guest-get-fsinfo","success-response":true},
    {"enabled":true,"name":"guest-get-disks","success-response":true},
    {"enabled":true,"name":"guest-set-vcpus","success-response":true},
    {"enabled":true,"name":"guest-get-vcpus","success-response":true},
    {"enabled":true,"name":"guest-network-get-interfaces","success-response":true},
    {"enabled":true,"name":"guest-suspend-hybrid","success-response":false},
    {"enabled":true,"name":"guest-suspend-ram","success-response":false},
    {"enabled":true,"name":"guest-suspend-disk","success-response":false},
    {"enabled":true,"name":"guest-fstrim","success-response":true},
    {"enabled":true,"name":"guest-fsfreeze-thaw","success-response":true},
    {"enabled":true,"name":"guest-fsfreeze-freeze-list","success-response":true},
    {"enabled":true,"name":"guest-fsfreeze-freeze","success-response":true},
    {"enabled":true,"name":"guest-fsfreeze-status","success-response":true},
    {"enabled":true,"name":"guest-file-flush","success-response":true},
    {"enabled":true,"name":"guest-file-seek","success-response":true},
    {"enabled":true,"name":"guest-file-write","success-response":true},
    {"enabled":true,"name":"guest-file-read","success-response":true},
    {"enabled":true,"name":"guest-file-close","success-response":true},
    {"enabled":true,"name":"guest-file-open","success-response":true},
    {"enabled":true,"name":"guest-shutdown","success-response":false},
    {"enabled":true,"name":"guest-info","success-response":true},
    {"enabled":true,"name":"guest-set-time","success-response":true},
    {"enabled":true,"name":"guest-get-time","success-response":true},
    {"enabled":true,"name":"guest-ping","success-response":true},
    {"enabled":true,"name":"guest-sync","success-response":true},
    {"enabled":true,"name":"guest-sync-delimited","success-response":true}
    ]}}
    
  • 使用qemu-guest-agent命令

    name 后面就是支持命令的名称,使用 virsh qemu-agent-command VM-GUEST '{"execute":"COMMAND"}' 就可以执行相关命令了

6.3、Windows下使用qemu-guest-agent

Windows 主机默认只会配置 VirtIO 串口设备,而没有 qemu-ga 管道设备,因此需要手动添加该设备。安装完设备后,就需要在操作系统中安装 VirtIO 驱动和 qemu-ga 软件了,驱动和软件包含在 virtio-win.iso 文件中

  • 安装VirtIO驱动

  • 启动相关服务

  • 查看支持的命令

    [root@kvm ~]# virsh qemu-agent-command --domain windows10 '{"execute":"guest-info"}'
    {"return":{"version":"105.0.2","supported_commands":[
    {"enabled":true,"name":"guest-get-cpustats","success-response":true},
    {"enabled":true,"name":"guest-get-diskstats","success-response":true},
    {"enabled":true,"name":"guest-get-devices","success-response":true},
    {"enabled":true,"name":"guest-get-osinfo","success-response":true},
    {"enabled":true,"name":"guest-get-timezone","success-response":true},
    {"enabled":true,"name":"guest-get-users","success-response":true},
    {"enabled":true,"name":"guest-get-host-name","success-response":true},
    {"enabled":true,"name":"guest-exec","success-response":true},
    {"enabled":true,"name":"guest-exec-status","success-response":true},
    {"enabled":false,"name":"guest-get-memory-block-info","success-response":true},
    {"enabled":false,"name":"guest-set-memory-blocks","success-response":true},
    {"enabled":false,"name":"guest-get-memory-blocks","success-response":true},
    {"enabled":true,"name":"guest-set-user-password","success-response":true},
    {"enabled":true,"name":"guest-get-fsinfo","success-response":true},
    {"enabled":true,"name":"guest-get-disks","success-response":true},
    {"enabled":false,"name":"guest-set-vcpus","success-response":true},
    {"enabled":true,"name":"guest-get-vcpus","success-response":true},
    {"enabled":true,"name":"guest-network-get-interfaces","success-response":true},
    {"enabled":false,"name":"guest-suspend-hybrid","success-response":false},
    {"enabled":true,"name":"guest-suspend-ram","success-response":false},
    {"enabled":true,"name":"guest-suspend-disk","success-response":false},
    {"enabled":true,"name":"guest-fstrim","success-response":true},
    {"enabled":true,"name":"guest-fsfreeze-thaw","success-response":true},
    {"enabled":true,"name":"guest-fsfreeze-freeze-list","success-response":true},
    {"enabled":true,"name":"guest-fsfreeze-freeze","success-response":true},
    {"enabled":true,"name":"guest-fsfreeze-status","success-response":true},
    {"enabled":true,"name":"guest-file-flush","success-response":true},
    {"enabled":true,"name":"guest-file-seek","success-response":true},
    {"enabled":true,"name":"guest-file-write","success-response":true},
    {"enabled":true,"name":"guest-file-read","success-response":true},
    {"enabled":true,"name":"guest-file-close","success-response":true},
    {"enabled":true,"name":"guest-file-open","success-response":true},
    {"enabled":true,"name":"guest-shutdown","success-response":false},
    {"enabled":true,"name":"guest-info","success-response":true},
    {"enabled":true,"name":"guest-set-time","success-response":true},
    {"enabled":true,"name":"guest-get-time","success-response":true},
    {"enabled":true,"name":"guest-ping","success-response":true},
    {"enabled":true,"name":"guest-sync","success-response":true},
    {"enabled":true,"name":"guest-sync-delimited","success-response":true}
    ]}}