zoukankan      html  css  js  c++  java
  • virsh命令和调用libvirt api的区别

    答曰:virsh是libvirt API的封装

    libvirt是什么

    libvirt是用来管理虚拟机或虚拟化功能的软件集合,主要包括:

       1. libvirt API

       2. libvirtd进程

       3. virsh工具集 这三部分。   最初的目的是为不同的hypervisor提供统一的管理接口。

    详解如下:

    1. Libvirt API

    不同版本的API具体参见:http://libvirt.org/hvsupport.htmllibvirt api主要为不同的虚拟化技术方案对外提供统一的接口,其设计思想为:
    (1)isolation from HV API changes - 隔离底层硬件虚拟化接口对上层的影响
    (2)portable across HV - 支持多种os,如linux,windows,solairs等
    (3)rapid application development - 提供封装的API,加快软件开发的过程
    (4)TLS, SASL, SSH, PolicyKit - 提供各种加密协议,保证了上层应用对下层资源的安全访问
    通过封装最原始的C库,实现了多种编程语言的接口:Perl, Python, OCaml, Java, Ruby,C#, Php,并对目前在应用层编程中常用的协议进行封装,形成不同的协议库,方便在应用层编程中调用,目前主要支持:

    1. Mapping to CIM/DMTF: libvirt-cim
      公共信息模型CIM,是一个与具体实现无关的、用于描述管理信息的概念性模型。
    2. Mapping to AMQP/QMF: libvirt-qmf
      AMQP是一个提供统一消息服务的应用层标准协议,是一种二进制协议,提供客户端应用与消息中间件之间异步、安全、高效地交互。
      基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。
    3. Mapping to SNMP: libvirt-snmp
      该库使得libvirt具备SNMP的功能,开发人员能够通过SNMP来监控和设置每个node上不同domain的信息
    4.Mapping to GObject: libvirt-glib

    2. daemon进程(libvirtd )

    该后台进程主要实现以下功能:

    (1)远程代理
      所有remote client发送来的命令,由该进程监测执行
    (2)本地环境初始化
      libvirt服务的启停,用户connection的响应等
    (3)根据环境注册各种Driver(qemu, xen, storage…)的实现
      不同虚拟化技术以Driver的形式实现,由于libvirt对外提供的e799bee5baa6e59b9ee7ad9431333337376364是统一的接口,所以各个Driver就是实现这些接口, 即将Driver注册到libvirt中

    3. virsh 工具集  

      是libvirt API的封装,以Command Line Interface提供的对外接口。

    4. 通过virsh命令或接口创建虚拟机实例的代码执行路径:

    1)virsh命令或API接口c创建虚拟机 -- 接口层
         virsh create vm.xml 或者 virDomainPtr virDomainCreateXML (virConnectPtr conn, const char * xmlDesc, unsigned int flags)
    (2)调用libvirt提供的统一接口 -- 抽象驱动层
      conn->driver->domainCreateXML(conn, xmlDesc, flags); //此处的domainCreateXML即抽象的统一接口,这里并不需要关心底层的driver是kvm,还是xen
    (3)调用底层的相应虚拟化技术的接口 -- 具体驱动层
      domainCreateXML = qemuDomainCreateXML; //如果driver=qemu,那么此处即调用的qemu注册到抽象驱动层上的函数qemuDomainCreateXML
    (4)拼装shell命令,并执行
      以qemu为例,qemuDomainCreateXML首先会拼装一条创建虚拟机的命令,比如qemu -hda disk.img,然后创建一个新的线程来执行
      回过头来思考,libvirt通过4步,将最底层的直接在shell中输入命令来完成的操作进行了抽象封装,给应用程序开发人员提供了统一的,易用的接口。

    5. 抽象驱动层

        目前,libvirt以下几种类型的抽象驱动,每一种类型的驱动代表某以功能模块的抽象封装:

    (1)虚拟化驱动(virDriverPtr)
    (2)虚拟网络驱动(virNetworkDriverPtr)
    (3)物理网卡驱(virInterfaceDriverPtr)
    (4)存储驱动(virStorageDriverPtr)
    (5)监控驱动(virDeviceMonitorPtr)
    (6)安全驱动(virSecretDriverPtr)
    (7)过滤驱动(virNWFilterDriverPtr)
    (8)状态驱动(virStateDriverPtr)

  • 相关阅读:
    CodeForces Gym 100935G Board Game DFS
    CodeForces 493D Vasya and Chess 简单博弈
    CodeForces Gym 100935D Enormous Carpet 快速幂取模
    CodeForces Gym 100935E Pairs
    CodeForces Gym 100935C OCR (水
    CodeForces Gym 100935B Weird Cryptography
    HDU-敌兵布阵
    HDU-Minimum Inversion Number(最小逆序数)
    七月馒头
    非常可乐
  • 原文地址:https://www.cnblogs.com/dingyunfeng/p/12735554.html
Copyright © 2011-2022 走看看