QGA 使用介绍
功能介绍
使用 qemu guest agent 来操作或者查看运行中的虚拟机的信息。
安装部署
不同版本的操作系统安装方式不同,启动方式不同,以下列出一些操作系统安装方式。
linux 安装启动
# 安装:
Debian : apt-get install qemu-guest-agent
Ubuntu : apt-get install qemu-guest-agent
Alpine : apk add qemu-guest-agent
Arch Linux : pacman -S qemu-guest-agent
Kali Linux : apt-get install qemu-guest-agent
Fedora :dnf install qemu-guest-agent-2
Raspbian : apt-get install qemu-guest-agent
# systemd 启动或其他启动方式:
$ systemctl enable --now qemu-guest-agent
# 启动完成后可以在虚机内查看到 qemu-ga 的进程
# 例如 centos7 下,ps 可以看到 qemu-ga进程启动,并且禁用了一下命令:
$ /usr/bin/qemu-ga --method=virtio-serial --path=/dev/virtio-ports/org.qemu.guest_agent.0 --blacklist=guest-file-open,guest-file-close,guest-file-read,guest-file-write,guest-file-seek,guest-file-flush,guest-exec,guest-exec-status -F/etc/qemu-ga/fsfreeze-hook
# centos7 下 blacklist 配置是在 /etc/sysconfig/qemu-ga 下面
$ cat /etc/sysconfig/qemu-ga | grep BLACKLIST_RPC
BLACKLIST_RPC=guest-file-open,guest-file-close,guest-file-read,guest-file-write,guest-file-seek,guest-file-flush,guest-exec,guest-exec-status
# 也可以使用以下命令查看 blacklist 配置
$ ps -ef|grep qemu-ga|grep -E "blacklist=|b="
修改黑名单配置
# 修改黑名单,编辑 /etc/sysconfig/qemu-ga 配置文件,将需要的命令从BLACKLIST_RPC中删除
$ vi /etc/sysconfig/qemu-ga
# 编辑完成后保存,重新启动 qemu-ga 服务:
$ systemctl restart qemu-guest-agent
# 重新查看QGA的黑名单,确认是否配置成功
$ ps -ef|grep qemu-ga|grep -E "blacklist=|b="
windows 安装启动
windows 需要挂载 virtio-win 的 iso, 打开 iso 找到 guest-agent 目录 安装对应的 guest-agent.
使用介绍
执行 QGA 命令需要确保虚机为 running(运行中) 的状态。若虚机内 guest-agent 未安装,则执行的命令会超时失败。
执行任意 QGA 命令
$ climc server-qga-command --help
Usage: climc server-qga-command [--help] <ID> <COMMAND>
Qga-Command server
Positional arguments:
<ID>
ID or name of the server
<COMMAND>
qga command
Optional arguments:
[--help]
Print usage and this help message and exit.
# 例如执行 guest-info 命令来获取 QGA 的信息,包括 QGA 版本,QGA 支持的命令信息。
# 这是一个有用的命令来获取虚机内的 QGA 支持和禁用了哪些操作。
$ climc server-qga-command test-server '{"execute": "guest-info"}'
supported_commands:
- enabled: true
name: guest-sync-delimited
success-response: true
- enabled: true
name: guest-sync
success-response: true
- enabled: true
name: guest-suspend-ram
success-response: false
- enabled: true
name: guest-suspend-hybrid
success-response: false
- enabled: true
name: guest-suspend-disk
success-response: false
- enabled: true
name: guest-shutdown
success-response: false
- enabled: true
name: guest-set-vcpus
success-response: true
- enabled: true
name: guest-set-user-password
success-response: true
- enabled: true
name: guest-set-time
success-response: true
- enabled: true
name: guest-set-memory-blocks
success-response: true
- enabled: true
name: guest-ping
success-response: true
- enabled: true
name: guest-network-get-interfaces
success-response: true
- enabled: true
name: guest-info
success-response: true
- enabled: true
name: guest-get-vcpus
success-response: true
- enabled: true
name: guest-get-users
success-response: true
- enabled: true
name: guest-get-timezone
success-response: true
- enabled: true
name: guest-get-time
success-response: true
- enabled: true
name: guest-get-osinfo
success-response: true
- enabled: true
name: guest-get-memory-blocks
success-response: true
- enabled: true
name: guest-get-memory-block-info
success-response: true
- enabled: true
name: guest-get-host-name
success-response: true
- enabled: true
name: guest-get-fsinfo
success-response: true
- enabled: true
name: guest-fstrim
success-response: true
- enabled: true
name: guest-fsfreeze-thaw
success-response: true
- enabled: true
name: guest-fsfreeze-status
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-file-write
success-response: true
- enabled: true
name: guest-file-seek
success-response: true
- enabled: true
name: guest-file-read
success-response: true
- enabled: true
name: guest-file-open
success-response: true
- enabled: true
name: guest-file-flush
success-response: true
- enabled: true
name: guest-file-close
success-response: true
- enabled: true
name: guest-exec-status
success-response: true
- enabled: true
name: guest-exec
success-response: true
version: 2.11.1
QGA 设置密码
平台封装了 QGA 设置密码的操作。 平台会对密码的强度校验,并且会将设置完的密码加密后保存在元数据中以供后续查询。
$ climc server-qga-set-password --help
Usage: climc server-qga-set-password [--help] <ID> <USERNAME> <PASSWORD>
Qga-Set-Password server
Positional arguments:
<ID>
ID or name of the server
<USERNAME>
Which user to set password
<PASSWORD>
Password content
Optional arguments:
[--help]
Print usage and this help message and exit.
# eg:
climc server-qga-set-password test-server root testPassword@1234
QGA 获取虚拟机的网卡信息
$ climc server-qga-get-network --help
Usage: climc server-qga-get-network [--help] <ID>
Qga-Get-Network server
Positional arguments:
<ID>
ID or name of the server
Optional arguments:
[--help]
Print usage and this help message and exit.
# eg:
$ climc server-qga-get-network test-server
- hardware-address: "00:00:00:00:00:00"
ip-addresses:
- ip-address: 127.0.0.1
ip-address-type: ipv4
prefix: 8
- ip-address: ::1
ip-address-type: ipv6
prefix: 128
name: lo
statistics:
rx-bytes: 0
rx-dropped: 0
rx-errs: 0
rx-packets: 0
tx-bytes: 0
tx-dropped: 0
tx-errs: 0
tx-packets: 0
- hardware-address: 00:22:c8:10:5a:1c
ip-addresses:
- ip-address: 192.168.100.45
ip-address-type: ipv4
prefix: 24
- ip-address: fe80::222:c8ff:fe10:5a1c
ip-address-type: ipv6
prefix: 64
name: eth0
statistics:
rx-bytes: 6703
rx-dropped: 0
rx-errs: 0
rx-packets: 62
tx-bytes: 9460
tx-dropped: 0
tx-errs: 0
tx-packets: 65
QGA 修改运行虚拟机的网络地址
配置需求
- QGA 版本 ≥ 2.11.1
- 支持 guest-ping、guest-network-get-interfaces、guest-get-osinfo、guest-exec命令
版本号查看
QGA 的版本号可以通过 guest-info 命令查看
黑名单配置
手动安装的 QGA 默认的黑名单为空,即所有命令均可使用,不用进行额外配置,跳过该步骤。 centos7 版本之后系统自带 QGA ,默认在部署虚拟机时已经对黑名单已经进行了处理,如果没有处理成功,可按照修改黑名单配置修改黑名单。
使用方法
这里以 centos7 为例,介绍修改运行虚拟机的 IP 地址, 虚拟机之前的网络地址和路由如图所示:
在虚拟机管理页面选择网络——更多——更换IP 修改虚拟机的 IP 地址:
指定需要修改的 IP 地址,这里需要指定子网内的 IP 地址,因为要在运行状态下修改虚拟机的 IP ,需要勾选重启网卡按钮(默认勾选)
点击确定后,虚拟机进入配置阶段,等待虚拟机状态变为运行中,表示修改 IP 地址成功
虚拟机的 IP 地址和路由表都发生了修改
如果虚拟机使用 QGA 修改网络配置失败,会调用ansible 修改网络配置
注意事项
提示
- 使用 QGA 修改网络配置时第一次可能会失败,但其实 QGA 的状态是正常的,因此在第一次执行出错后会自动执行第二次,此时第二次的执行结果才是最终执行结果。
- 修改网络配置后的路由会变为静态路由
- windows 执行时间会相对长一点
- 使用 QGA 修改网络配置失败可能是因为没有安装 QGA、QGA 版本过低或 QGA 执行失败,需要逐步排查