• OpenStack qemu-guest-agent 使用


    What is qemu-ga

    我个人认为qemu-ga是在虚拟机中安装的一个agent,宿主机host通过通道(unix socket)与虚拟机vm内部的agent进行通信,这样宿主机就有了一种从外部控制/获取虚拟机的手段。比如:host可以向vm下发执行修改 hostname的指令,或者获取vm内所有进程信息的指令。

    qemu-ga时刻监听这个unix socket,一旦发现有指令发送来,分析该指令,并执行,通过unix socket返回执行结果。

    通过在虚拟机内部预装qemu-ga,云平台对虚拟机的控制能力显著加强,举个例子:阿里云中有个产品叫“云盾 安骑士”,该产品能够自动修复软件安全漏洞、查杀木马、实时告警等等。其本质上来说,也是在vm中安装了某种agent。

    Why use qemu-ga

    目前市面上的开源agent产品也有不少,最有名的是qemu-ga和ovirt-guest-agent,通过比较发现

      qemu-ga ovirt-ga
    开发语言 C语言 python
    通道协议 qmp协议(QEMU Machine Protocol) 自定义
    提供商 QEMU官方 Red Hat
    操作系统支持 windows/linux
    对于linux直接提供rpm包
    windows/linux
    对于linux直接提供rpm包
    支持功能 guest-set-vcpus
    guest-get-vcpus
    guest-network-get-interfaces
    guest-suspend-hybrid
    guest-suspend-ram
    guest-suspend-disk
    guest-fstrim
    guest-fsfreeze-thaw
    guest-fsfreeze-freeze
    guest-fsfreeze-status
    guest-file-flush
    guest-file-seek
    guest-file-seek
    guest-file-read
    guest-file-close
    guest-file-open
    guest-shutdown
    guest-info
    guest-set-time
    guest-get-time
    guest-ping
    guest-sync
    guest-sync-delimited
    1. information(吐出的信息,定期吐出可配置)
    主机名
    操作系统及版本
    IP地址
    已安装的软件
    可用的内存
    已登录的用户
    活动用户(不详)2. 被触发的消息,即vm内部出现某种情况后,ovirt-ga将发送消息给host
    开机
    心跳(定期发送)
    活动用户切换
    windows锁屏
    windows log off
    windows log on
    ovirt-ga被卸载

    3.执行的命令
    锁屏
    自动登录
    自动log off
    关机

    可扩展性 提供专门的方式,每一个功能需要增加一个对应的文件 直接修改ovirt-ga源码,通常修改
    GuestAgentLinux2.py
    OVirtAgentLogic.py
    openstack兼容性 openstack支持
    相关bp:https://blueprints.launchpad.net/nova/+spec/qemu-guest-agent-support
    https://blueprints.launchpad.net/nova/+spec/quiesced-image-snapshots-with-qemu-guest-agent
    openstack不支持,需要手动修改openstack代码

    通过对比,qemu-ga的优势是qemu官方出品,与openstack深度结合,而且协议规范,代码规范,添加新的功能时,也相对独立,同时原生的qemu-ga就支持freezefs功能,这些优势都是ovirt-guest-agent无法比拟的。

    how to use qemu-ga

    1. 在虚拟机中安装qemu-ga,针对centos 6.X
      1
      
      yum install qemu-guest-agent
    2. 修改安装后的qemu-ga配置文件
      1
      2
      3
      4
      5
      6
      7
      
      #修改/etc/sysconfig/qemu-ga文件
      将 
      # Enable fsfreeze hook. See the --fsfreeze-hook option in "qemu-ga --help".
      FSFREEZE_HOOK_ENABLE=0
      改为
      # Enable fsfreeze hook. See the --fsfreeze-hook option in "qemu-ga --help".
      FSFREEZE_HOOK_ENABLE=1
      1
      2
      3
      4
      5
      
      #修改/etc/sysconfig/qemu-ga,注释掉BLACKLIST_RPC这一行,将所有功能开放
      将
      BLACKLIST_RPC="guest-file-open,guest-file-close,guest-file-read,guest-file-write,guest-file-seek,guest-file-flush"
      改为
      #BLACKLIST_RPC="guest-file-open,guest-file-close,guest-file-read,guest-file-write,guest-file-seek,guest-file-flush"
    3. 将虚拟机关机,在虚拟机配置文件libvirt.xml中的<devices>下面添加下述配置,并重新启动虚拟机
      1
      2
      3
      4
      
      [xml] view plain copy
       
      1. <channel type='unix'>  
      2.    <source mode='bind' path='/var/lib/libvirt/qemu/f16x86_64.agent'/>  
      3.    <target type='virtio' name='org.qemu.guest_agent.0'/>  
      4. </channel>  
    4. 测试是否正常:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      #得到虚拟机对应的domain id
      [root@node-12 ~]# virsh list
       Id    名称                         状态
      ----------------------------------------------------
       90    instance-0000209f              running
       
      #使用命令进行测试
      [root@node-12 ~]# virsh qemu-agent-command 90 '{"execute":"guest-info"}'
      {"return":{"version":"0.12.1","supported_commands":[{"enabled":true,"name":"guest-set-vcpus"},{"enabled":true,"name":"guest-get-vcpus"},{"enabled":true,"name":"guest-network-get-interfaces"},{"enabled":true,"name":"guest-suspend-hybrid"},{"enabled":true,"name":"guest-suspend-ram"},{"enabled":true,"name":"guest-suspend-disk"},{"enabled":true,"name":"guest-fstrim"},{"enabled":true,"name":"guest-fsfreeze-thaw"},{"enabled":true,"name":"guest-fsfreeze-freeze"},{"enabled":true,"name":"guest-fsfreeze-status"},{"enabled":true,"name":"guest-file-flush"},{"enabled":true,"name":"guest-file-seek"},{"enabled":true,"name":"guest-file-write"},{"enabled":true,"name":"guest-file-read"},{"enabled":true,"name":"guest-file-close"},{"enabled":true,"name":"guest-file-open"},{"enabled":true,"name":"guest-shutdown"},{"enabled":true,"name":"guest-info"},{"enabled":true,"name":"guest-set-time"},{"enabled":true,"name":"guest-get-time"},{"enabled":true,"name":"guest-ping"},{"enabled":true,"name":"guest-sync"},{"enabled":true,"name":"guest-sync-delimited"}]}}
    5. freeze文件系统的方法:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    #直接用virsh命令,freeze文件系统
    [root@node-12 ~]# virsh qemu-agent-command 90 '{"execute":"guest-fsfreeze-freeze"}'
    {"return":1}
     
    #freeze后,可以查询当前虚拟机文件系统的状态,表明是frozen
    [root@node-12 ~]# virsh qemu-agent-command 90 '{"execute":"guest-fsfreeze-status"}'
    {"return":"frozen"}
     
    #thaw(解封)文件系统
    [root@node-12 ~]# virsh qemu-agent-command 90 '{"execute":"guest-fsfreeze-thaw"}'
    {"return":1}
     
    #thaw后,文件系统为解封状态
    [root@node-12 ~]# virsh qemu-agent-command 90 '{"execute":"guest-fsfreeze-status"}'
    {"return":"thawed"}

     

  • 相关阅读:
    js 解析 url参数中文的情况
    ++i i++ 的理解
    Linux 下升级python和安装pip
    sipp中的action使用方法
    Linux shell实现阳历转农历
    Linux 终端命令行提示符的艺术PS1进阶
    SQL系列学习(三) 获取Oracle、SqlServer、Access中表名、字段和主键
    SQL系列学习(一) 分页
    自定义服务器控件属性的特性
    JQuery使用$.ajax跨域调用winform托管的WCF服务(原创)
  • 原文地址:https://www.cnblogs.com/wangjq19920210/p/9597610.html
Copyright © 2020-2023  润新知