专栏首页虚拟化云计算qemu-guest-agent原理及实践

qemu-guest-agent原理及实践

QEMU Guest Agent是运行在虚拟机内部的一个守护程序(qemu-guest-agent.service),用它来辅助Hypervisor实现对Guest的管理。QEMU为宿主机和虚拟机提供了一个数据通道(channel),这个通道的两端分别是在虚拟机内看到的串口和在宿主机上看到的unix socket文件。宿主机与虚拟机内的qga通讯就扩展了对虚拟机的控制能力,例如在宿主机上获取虚拟机的ip地址等。

libvrit提供了专门的 virDomainQemuAgentCommand API(对应virsh qemu-agent-command命令)来和qemu-guest-agent通讯,另外i有些libvirt内置api也可以支持qga,例如reboot、shutdown等。

下面的实践分为两种方式,虚拟机的channel的target的name使用org.qemu.guest_agent.0和不是用org.qemu.guest_agent.0。两种方式在libvirt和宿主机中的qemu-guest-agent中都有所不同。

使用org.qemu.guest_agent.0

宿主机上libvirt的虚拟机xml配置channel:

<channel type='unix'>
   <source mode='bind' path='/var/lib/libvirt/qemu/org.qemu.guest_agent.0'/>
   <target type='virtio' name='org.qemu.guest_agent.0'/>
</channel>

注意这里target的name要使用org.qemu.guest_agent.0

虚拟机内部:

# yum install qemu-guest-agent
# setenforce 0
# systemctl restart qemu-guest-agent.service

在宿主机上测试功能:

virsh # qemu-agent-command centos '{"execute":"guest-info"}'
virsh # qemu-agent-command centos '{"execute":"guest-network-get-interfaces"}'
virsh # reboot --mode agent centos

上面的命令直接读出了虚拟机中的ip地址信息。

不使用org.qemu.guest_agent.0

如果在宿主机上libvirt的xml配置channel中target的name不是org.qemu.guest_agent.0,例如下面的org.qemu.guest_agent.1。

那么在宿主机上的libvirt将不会建立与socket建立连接。在虚拟机上qemu-guest-agent服务也无法运行。

宿主机上的libvirt的xml:

<channel type='unix'>
   <source mode='bind' path='/var/lib/libvirt/qemu/org.qemu.guest_agent.1'/>
   <target type='virtio' name='org.qemu.guest_agent.1'/>
</channel>

虚拟机内:

那么不使用org.qemu.guest_agent.0的情况下怎么处理呢?

首先,在虚拟机内部通讯串口的名字变为了org.qemu.guest_agent.1,此时需要手动修改/lib/systemd/system/qemu-guest-agent.service文件,把所有的默认org.qemu.guest_agent.0改为用户配置的名字org.qemu.guest_agent.1。

其次,在宿主机上自己去连接socket文件:

[root@node2 ~]# socat unix-connect:/var/lib/libvirt/qemu/org.qemu.guest_agent.1 readline
{"execute": "guest-info"}

ovirt-guest-agent

ovirt-guest-agent是和qemu-guest-agent并列的一个概念。在使用oVirt作为虚拟化管理时,虚拟机内部安装下面三个工具,和ovirt配合能够提高虚拟机的用户体验和性能。

oVirt Guest Agent:原理与qemu-guest-agent类似,但是提供的功能有所区别。

Spice Agent:提高spice连接虚拟机的用户体验。

VirtIO Drivers:包含一些驱程序,VirtIO Serial、VirtIO SCS、VirtIO Network、Memory Ballooning

qemu:

https://wiki.qemu.org/Features/GuestAgent

libvirt:

https://wiki.libvirt.org/page/Qemu_guest_agent


关注本公众号,了解更多关于云计算虚拟化的知识。

本文分享自微信公众号 - 虚拟化云计算(openstack_openstack),作者:kvm虚拟化

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 通过QEMU-GuestAgent实现从外部注入写文件到KVM虚拟机内部

    tag: qemu-ga, qemu guest agent, kvm, guest-file-write, inject

    小慢哥Linux运维
  • ovirt 上创建vm模板的创建与使用

    版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://b...

    shaonbean
  • 基于QMP实现对qemu虚拟机进行交互

    qemu对外提供了一个socket接口,称为qemu monitor,通过该接口,可以对虚拟机实例的整个生命周期进行管理,主要有如下功能

    小慢哥Linux运维
  • RHEL 6.5 中的KVM虚拟化新特性

    昨天看到redhat官网的资料,RHEL 6.5 中会增加许多KVM虚拟化新特性,有些特性在实际工作中可能非常有前景,比如windows虚拟机的agent,原生...

    力哥聊运维与云计算
  • oVirt之软件架构全剖析

    本文是从软件架构设计的角度剖析oVirt的vdsm,另外还有一篇是从功能架构设计的角度剖析oVirt。

    虚拟化云计算
  • 在Proxmox VE上制作Rocky Linux 8.3 RC1系统镜像模板

    在上一篇《在Proxmox VE上安装与配置Rocky Linux 8.3 RC1》博文中木子简单介绍了Rocky Linux 8.3 RC1的安装与配置,这篇...

    木子-Lee
  • 在Proxmox VE上制作Rocky Linux 8.3 RC1系统镜像模板

    问题关键字:在Proxmox VE上制作Rocky Linux 8.3 RC1系统镜像模板

    欧巴云
  • virtio+ovs转发原理和性能分析

    传统数据中心中硬件服务器上运行linux,linux用硬件网卡收发包,硬件网卡有broadcom的有mellanox的有intel的等各式各样的,硬件网卡连接到...

    惠伟
  • 基于Rust-vmm实现Kubernetes运行时

    周亮宇,腾讯云容器技术专家,负责腾讯云容器服务及EKS弹性容器服务,在云计算领域有着丰富的经验。

    腾讯云原生
  • 强隔离容器的那些事

    我们在生产环境中运行容器已久,第一次对强隔离容器诉求是java类应用引起的,如果不配置jvm参数,java虚拟机会根据系统资源信息进行内存gc线程数...

    sealyun
  • x86 kvm和qemu虚拟化介绍

    简单说一下自己对x86平台虚拟化的理解,intel有SDM手册,代码都是公开的,难度比较大,理解起来困难,网上有大量优秀博客讲解虚拟化,引用了大量手册和代码,还...

    惠伟
  • [linux][qemu]PVPanic的缺陷和完善

    前文《[linux][qemu]PVPanic的实现原理以及应用》中,介绍了pvpanic的原理和基本的使用方法,KVM虚拟化场景下,使用pvpanic驱动可以...

    皮振伟
  • 时钟也能虚拟化吗

    我们知道kvm有一个半虚拟化的时钟kvm-clock,但是现在只对Linux Guest支持,半虚拟化的时钟具有准确高效的有点,而使用TSC和RTC等时...

    虚拟化云计算
  • virtio 虚拟化系列之一:从 virtio 论文开始(文末有福利~)

    SmartX是中国领先的超融合产品与企业云解决方案提供商,拥有国内最顶尖的分布式存储和超融合架构研发团队,在分布式存储、虚拟化计算、微服务、容器、前端开发、自动...

    Linux阅码场
  • libvirt-Host与Guest之间共享文件夹

    本文实践在Host和Gues之间共享文件夹,方式是qemu实现的Plan 9 folder sharing over Virtio。

    虚拟化云计算
  • vhost-user 简介

    什么是 vhost-user 在 vhost 的方案中,由于 vhost 实现在内核中,guest 与 vhost 的通信,相较于原生的 virtio 方式性能...

    猿大白
  • virtio代码分析(一)-qemu部分

    virtio内容众多,代码分布于qemu,linux,dpdk等中,而且分为frontend和backend,可以运行于userspace也可以运行于kerne...

    惠伟
  • [virt][concept]虚拟化技术概论--KVM,QEMU,Libvirt

    前言: 以作者的经验来看,虚拟化的跨度比较大,很多概念比较难以理解,本来以为“硬件行为,就是这样的”好多概念,都变成虚拟的了。 作者对kernel略懂一二,结合...

    皮振伟
  • [linux][memory]mlock技术分析和使用以及问题

    前言: 使用了mlock,会把内存lock在内存中,不会被交换,在一定场景下,可以提高性能。 虚拟化场景下,qemu也可以选择lock住一部分内存,来提高Gue...

    皮振伟

扫码关注云+社区

领取腾讯云代金券