qga 使用介绍
qemu guest agent 使用介绍。
功能介绍
使用 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 设置密码
cloudpods 封装了 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 执行失败,需要逐步排查