对于任何一个虚拟化平台,总有一个客户机软件和宿主机通信,例如vmware的vmtools。KVM下的就是qemu-guest-agent
因为PVE是基于KVM的,所以客户端依旧是 qemu-guest-agent 。
目录:
[TOC]
客户端安装(不安装会提示Guest Agent未运行) Linux 1 2 3 4 yum install qemu-guest-agent -y apt install qemu-guest-agent -y
WINDOWS 安装 QEMU GUEST AGENT 标签: qemu windows
说明 1 2 3 记录 windows 版本下进行 qemu guest agent 软件安装 当前使用版本为 windows 2012, 其他版本同理 (已验证 2008 与 win7 版本) 解决 qemu guest agent 启动 1053 报错123
作用 1 2 1. 安装 qemu guest agent 可以用于对 libvirtd 下的 instance 进行管理 2. 可以用于收集 windows 的内存信息 (需要添加 balloon 驱动)12
参考安装 qemu guest agent + balloon 驱动前的 windows 数据返回与 linux 下的数据返回差异 默认状态下, windows 只返回当前系统分配的内存 actual 与当前进程 (kvm) 使用中的内存值
1 2 3 4 5 6 7 8 9 10 11 12 13 [root@hh-yun-compute-131230 ~]# virsh dommemstat instance-00023f5f (windows 2012) actual 8388608 rss 8245820 [root@hh-yun-compute-131230 ~]# virsh dommemstat instance-000242c3 (centos6.8) actual 4194304 swap_in 0 swap_out 0 major_fault 397 minor_fault 1544402 unused 3769676 available 3924492 rss 53229212345678910111213
GLANCE IMAGE 配置 1 2 3 4 glance image-update --property dhw_qemu_guest_agent=yes xxxx-image-i-xxxx ex: glance image-update --property hw_qemu_guest_agent=yes c0a3df0f-deaa-49e1-9dc6-f5a6034a12b61234
需要重启对应 openstack instance 才生效 参考配置正确并重启后的 instance 中的 libvirt.xml 配置
1 2 3 4 5 6 /var/lib/nova/instances/f4423241-9ad2-48b5-b217-0f707f3ec921/libvirt.xml <channel type="unix"> <source mode="bind" path="/var/lib/libvirt/qemu/org.qemu.guest_agent.0.instance-00023f5f.sock"/> <target type="virtio" name="org.qemu.guest_agent.0"/> </channel>123456
安装顺序参考 1 2 3 4 5 6 1. 获取软件 2. 安装驱动 virto serial driver 3. 更新 balloon 驱动 (需要区分 2012, win7 版本的使用方法) 4. 安装 qemu-ga 5. 注册并重启 balloon 服务 6. 测试可用性123456
注意:
1 2 3 4 1 balloon 服务只能够运行在 administrator 用户下 2 假如你只属于 administrators 组, 那么请你切换成 administrator 用户 3 假如 administrator 用户被隐藏, 那么需要管理员身份运行 cmd , 输入下面命令, 再切换用户 net user administrator /active:yes1234
以管理员身份运行终端
参考下面方法
软件获取
方法一
1 2 3 4 5 wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo -O /etc/yum.repos.d/virtio-win.repo yum install -y virtio-win.noarch iso 软件存放在 /usr/share/virtio-win/virtio-win.iso12345
方法二
1 wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso1
更新 VIRTO SERAIL DRIVER 1 2 3 4 5 6 1. windows 系统获得 virtio-win.iso (略) 2. windows2012 双击可直接作虚拟光盘使用 3. 打开光盘后, 看到下面三个重要目录 guest-agent (包含安装的二进制文件 (qemu-ga-x64.msi, qemu-ga-x86.msi) vioserial ( virto-serail driver ) balloon (用于注册 balloon 服务)123456
解决 QEMU-GA 启动 1053 错误 1 2 3 假如直接安装 qemu-ga 软件 启动 qemu-guest-agent 服务时候, 将会报错 1053 要解决这个问题, 你必须自行手动更新 virto serail 驱动123
驱动安装方法
先更新 VIRTO-SERAIL DRIVER
更新 pci 简单通讯控制器 (使用 vioserail 目录中的驱动)
点击确认安装
确认安装完成
安装BALLOON PCI 驱动 (WINDOWS2012)
点击完成
确认BALLOON PCI 驱动 (WINDOWS2012)
手动更新该驱动(WIN7/WIN2008)
完成
安装QEMU GUEST AGENT 1 2 3 根据系统版本(x64,x86) 双击光盘 guest-agent 目录下的 qemu-ga-x86.msi 或 qemu-ga-x64.msi 安装过程(略)123
启动 QEMU GUEST AGENT 服务 1 2 利用 cmd ( services.msc) 启动 qemu guest agent 服务 qemu-ga 只用于 instance 管理, 对于本文中的内存信息获取是需要 balloonservice 获取的12
启动 qemu guest agent vss provider ( windows 2012 )
验证服务
启动 BALLOON 服务 (WIN2012) 1 2 3 1. 复制光盘中 balloon 目录到 c:\Program Files 2. 注册 balloon 服务 3. 重启 balloon服务123
参考命令行
1 2 3 4 5 6 7 c:\ mkdir "c:\Program Files\balloon\2k12\amd64" copy d:\balloon\2k12\amd64\* "c:\Program Files\balloon\2k12\amd64\." cd c:\Program Files\balloon\2k12\amd64 blnsvr.exe -i net stop balloonservice net start balloonservice1234567
启动 BALLOON 服务 (WIN7/WIN2008) 利用管理员身份运行终端 运行下面命令即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 1. 利用 winrar 解压 virtio-win.iso 到桌面 如: c:\Users\administrator\Desktop\virtio-win 2. 完成设备管理器中 PCI 建议通讯控制器驱动安装 3. 安装 virtio-win 解压下的 guest-agent 目录, 安装 qemu-ga.x64.msi 软件 win7 版本 4. 复制 devcon64.exe 至 c:\Users\administrator\Desktop\virtio-win\Balloon\w7\amd64 目录中 5. 复制下面命令 cd c:\Users\administrator\Desktop\virtio-win\Balloon\w7\amd64 devcon64 install BALLOON.inf "PCI\VEN_1AF4&DEV_1002&SUBSYS_00051AF4&REV_00" BLNSVR.exe -i net stop balloonservice net start balloonservice windows 2008 版本 4. 复制 devcon64.exe 至 c:\Users\administrator\Desktop\virtio-win\Balloon\2k8\amd64 目录中 5. 复制下面命令 cd c:\Users\administrator\Desktop\virtio-win\Balloon\2k8\amd64 devcon64 install BALLOON.inf "PCI\VEN_1AF4&DEV_1002&SUBSYS_00051AF4&REV_00" BLNSVR.exe -i net stop balloonservice net start balloonservice 6. 以管理员身份打开终端, 并执行上面命令12345678910111213141516171819202122232425262728
参考
验证 重启后, 参考一下监控信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [root@hh-yun-compute-131230 test]# virsh dommemstat instance-00023f5f (win2012) actual 8388608 rss 8263016 [root@hh-yun-compute-131230 test]# virsh dommemstat instance-00023f5f actual 8388608 swap_in 882920 swap_out 0 major_fault 31190 minor_fault 1717511 unused 7280252 available 8388180 rss 8263048 [root@hh-yun-compute-131230 test]# virsh dommemstat instance-000242c1 (win7) actual 4194304 rss 4160316 [root@hh-yun-compute-131230 test]# virsh dommemstat instance-000242c1 actual 4194304 swap_in 862932 swap_out 0 major_fault 36592 minor_fault 9875462 unused 3239596 available 4193880 rss 4160284
安装完成之后,在虚拟机选项里,勾选 QEMU Guest Agent 服务器使用agent 对于安装好agent的vm,在其概况界面,会显示VM的网卡信息。
更加全面的用法如,需要用到qm agent命令 语法如下
这里vmid 就是vm的id啦。cmd就是命令。我这里列出来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 fsfreeze-freeze fsfreeze-status fsfreeze-thaw fstrim get-fsinfo get-host-name get-memory-block-info get-memory-blocks get-osinfo get-time get-timezone get-users get-vcpus info network-get-interfaces ping shutdown suspend-disk suspend-hybrid suspend-ram
以上命令均支持TAB键 自动补全。
举个例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 qm agent 101 network-get-interfaces [ { "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" : 6324, "rx-dropped" : 0, "rx-errs" : 0, "rx-packets" : 84, "tx-bytes" : 6324, "tx-dropped" : 0, "tx-errs" : 0, "tx-packets" : 84 } }, { "hardware-address" : "76:ee:94:38:3a:85" , "ip-addresses" : [ { "ip-address" : "10.13.14.100" , "ip-address-type" : "ipv4" , "prefix" : 24 }, { "ip-address" : "fe80::74ee:94ff:fe38:3a85" , "ip-address-type" : "ipv6" , "prefix" : 64 } ], "name" : "eth0" , "statistics" : { "rx-bytes" : 1324, "rx-dropped" : 0, "rx-errs" : 0, "rx-packets" : 9, "tx-bytes" : 1810, "tx-dropped" : 0, "tx-errs" : 0, "tx-packets" : 17 } } ] root@pve:~ { "host-name" : "nginx" }
qm guest 命令集合 qm agent就是qm guest。qm guest主要有下面四个
1 2 3 4 qm guest cmd qm guest exec qm guest exec-status qm guest passwd
1、qm guset cmd 此项等同于qm agent
2、qm guest exec(创建进程) 此项是传递给VM的命令
1 2 3 4 5 6 7 qm guest exec <vmid> <vmcmd> --<option> <vmid>=vmid <vmcmd>=vm里面的命令。例如ip link /docker ps等等。命令不能有“-”,因为加了“-”,就会设别成后面的<option> <option>=这个是特别操作,有3个 pass-stdin=<0/1> 这个似乎不能用 synchronous=<0/1> 如果是0,则返回pid。如果是1,则返回json格式的输出结果 timeout =<整数数字> 超时时间
举几个例子
1、查看usr目录
1 2 3 4 5 6 qm guest exec 108 ls /usr { "exitcode" : 0, "exited" : 1, "out-data" : "bin\ngames\ninclude\nlib\nlocal\nsbin\nshare\nsrc\n" }
如果加上一个 synchronous=0
1 2 3 4 root@pve:/ { "pid" : 2001 }
下载一个文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 root@pve:/ { "err-data" : "--2020-05-18 19:52:09-- https://www.baidu.com/\nResolving www.baidu.com (www.baidu.com)... 61.135.169.121, 61.135.169.125\nConnecting to www.baidu.com (www.baidu.com)|61.135.169.121|:443... connected.\nHTTP request sent, awaiting response... 200 OK\nLength: 2443 (2.4K) [text/html]\nSaving to: ‘index.html’\n\n 0K .. 100% 258M=0s\n\n2020-05-18 19:52:09 (258 MB/s) - ‘index.html’ saved [2443/2443]\n\n" , "exitcode" : 0, "exited" : 1 } root@pve:/ { "exitcode" : 0, "exited" : 1, "out-data" : "bin\nboot\ndev\netc\nhome\nindex.html\ninitrd.img\ninitrd.img.old\nlib\nlib64\nlost+found\nmedia\nmnt\nopt\nproc\nroot\nrun\nsbin\nsnap\nsrv\nsys\ntmp\nusr\nvar\nvmlinuz\nvmlinuz.old\n" }
查看nginx是否在运行
1 2 qm guest exec 108 ps aux|grep nginx 返回一堆代表在运行,没运行是没有返回的。
3、qm guest exec-status 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 用法如下 qm guest exec-status <vmid> <pid> 此项可以查看VM的进程PID状态。 比如,我创建一个ping 的进程 qm guest exec 108 ping www.baidu.com --synchronous=0 返回如下。 { "pid" : 2722 } 那么我再通过这个命令,看看这个pid是什么状态 qm guest exec-status 108 2722 返回 { "exited" : 0 } 证明这个进程还在存活。 如果先杀掉这个进程,再执行查看pid,第一次回返回一长串数据 { "exited" : 1, "out-data" : "PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.\n64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=55 time=37.9 ms\n64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=55 time=38.4 ms\n64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=55 time=38.3 ms\n64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=4 ttl=55 time=38.4 ms\n64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=5 ttl=55 time=38.3 ms\n64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=6 ttl=55 time=38.4 ms\n64 bytes from 61.135.1 ****** } 再次执行qm guest exec-status 108 2722 Agent error: Invalid parameter 'pid' 这是就提示错误了。
注意的是。qm guest exec-status这个命令是要和qm guest exec 配合使用。单独使用无效
4、qm guest passwd (重置密码) 此项非常有用
1 2 3 4 5 6 7 8 9 10 qm guest passwd <vmid> <username> [OPTIONS] 实例 qm guest passwd 108 root qm guest passwd 108 administrator
文件来源: https://foxi.buduanwang.vip/virtualization/pve/530.html/