libvirt是一个虚拟化开发的工具库,提供了底层的kvm,xen,vmware esx等虚拟化的统一封装。可以通过libvirt提供的api对不同的底层实现进行同一的管理。除了原生的c api,还有c#, go, java, ocaml. perl, python, php, ruby的api,用户可自主选择自己熟悉的语言。

要使用libvirt首先要安装libvirtd,这是一个后台守护进程,负责管理虚拟机系统以及和客户端交互。libvirt还包含了virsh命令行工具,供用户通过shell手动管理。另外,还可以通过图形界面方式进行管理,该工具是virt-manager,如果您想要通过python的api进行开发,需要安装python3-libvirt或python-libvirt。在debian下,可通过下列指令安装这些包:

apt-get install libvirt-daemon libvirt-daemon-system libvirt-clients python3-libvirt virt-manager

启动libvirtd:

systemctl start libvirtd

接下来我们就可以通过virt-manager创建一个虚拟机。熟悉vmware或者virtualbox的同学,可以看到virt-manager和这些软件很类似,安装系统就不再介绍了。

系统安装完成之后,我们就可以通过virsh工具进行基本的操作了。运行virsh,回车,进入virsh的命令行,可通过help查看virsh支持的操作。

virsh # help

Grouped commands:

Domain Management (help keyword 'domain'):

attach-device attach device from an XML file

attach-disk attach disk device

attach-interface attach network interface

autostart autostart a domain

blkdeviotune Set or query a block device I/O tuning parameters.

blkiotune Get or set blkio parameters

blockcommit Start a block commit operation.

......

通过查看这些命令,我们了解到libvirt提供了客户机的管理,客户机监控,主机监控,设备管理,网络管理,快照管理和存储管理等功能。由于有virt-manager工具,很多功能我们都可以通过图形化界面方式完成,但是我们可以通过virsh快速获取某个主机某项信息,方便开发时对比测试我们的代码是否正确。

libvirt中的一些基本概念:

主机连接 主机连接是客户端和libvirtd之间的通道,该连接既可以访问运行在本地的libvirtd程序,也可以访问运行在网络上其他主机上的libvirtd。

客户域 是一个运行着的虚拟机或者是可以生成一个虚拟机的配置文件。每个客户域都有一个唯一的ID,name和UUID

虚拟网络 为客户机提供网络访问

存储池 存储池用来组织和管理存储卷

存储卷 用来为客户机提供存储设备(磁盘)

主机设备 可以给虚拟机分配客户机上设备

libvirt-common:通用的宏和枚举定义

libvirt-domain-snapshot:客户机快照管理

libvirt-domain:客户域管理

libvirt-event:事件管理

libvirt-host:宿主机信息查看

libvirt-interface:网络接口管理(网卡)

libvirt-network:网络管理

libvirt-nodedev:设备管理

libvirt-nwfilter:网络过滤

libvirt-secret:密钥管理

libvirt-storage:存储管理

libvirt-stream:数据流

virterror:错误处理

python api简要功能示例:

获取所有的客户机列表,详细参考:

from __future__ import print_function

import sys

import libvirt

conn = libvirt.open('qemu:///system')

if conn == None:

print('Failed to open connection to qemu:///system', file=sys.stderr)

exit(1)

domainIDs = conn.listDomainsID()

if domainIDs == None:

print('Failed to get a list of domain IDs', file=sys.stderr)

print("Active domain IDs:")

if len(domainIDs) == 0:

print(' None')

else:

for domainID in domainIDs:

print(' '+str(domainID))

conn.close()

exit(0)

客户机内存信息统计,详细参考:

from __future__ import print_function

import sys

import libvirt

domName = 'Fedora22-x86_64-1'

conn = libvirt.open('qemu:///system')

if conn == None:

print('Failed to open connection to qemu:///system', file=sys.stderr)

exit(1)

dom = conn.lookupByID(5)

if dom == None:

print('Failed to find the domain '+domName, file=sys.stderr)

exit(1)

stats = dom.memoryStats()

print('memory used:')

for name in stats:

print(' '+str(stats[name])+' ('+name+')')

conn.close()

exit(0)

官方有更多参考示例,这里不再过多介绍。我个人接触libvirt是因为要监控虚拟机的运行状态,性能统计,网络信息等的监控,所以对于快照,网络管理,存储管理等没有通过python接口进行过实践,对其了解的也不适特别多。下面是我认为一些有用的链接,可供参考:

virsh命令参考 详细讲解virsh的使用,如果对于xml的定义描述不确定时,可参考virsh的代码

XML格式 libvirt api使用的交互方式

API参考 libvirt提供的C接口,如果你需要的功能在这里找不到,那就是没有了

希望通过本片文章能让你对libvirt的开发有一个简单的认识。

libvirt php,libvirt虚拟化开发简介相关推荐

  1. 虚拟化技术的演变过程和KVM虚拟化的简介

    主要介绍虚拟化技术的历史演进过程和KVM虚拟化的一些特点. 0.简介 虚拟化技术的演变过程可以分为软件模拟.虚拟化层翻译.容器虚拟化三个大的阶段.其中,虚拟化层翻译又可以分为:软件捕获翻译(软件全虚拟 ...

  2. 服务器虚拟网桥,KVM虚拟化(简介和安装,网桥)

    KVM 虚拟化架构分类 寄居虚拟化架构:指在宿主操作系统之上安装和运行虚拟化程序,依赖于宿主操作系统对设备的支持和物理资源的管理. 裸金属虚拟化架构:指直接在硬件上面安装虚拟化软件,再在其上安装操作系 ...

  3. 虚拟化技术简介--CPU/内存/IO/网络虚拟化介绍

    1. 概述 本文讨论的虚拟化,是指将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响. 2. ...

  4. 网络增强现实开发简介 Introduction to Web AR development

    搭配webXR.mindAR.three.js和tensorflow.js 你会学到: 获得构建不同类型的网络增强现实应用程序的实践经验,包括图像效果.人脸效果和世界效果 获得关于增强现实如何在网络浏 ...

  5. 【Flutter】Flutter 混合开发 ( 简介 | Flutter 混合开发集成步骤 | 创建 Flutter Module )

    文章目录 一.Flutter 混合开发简介 二.Flutter 混合开发集成步骤 三.创建 Flutter Module 1.使用命令行创建 Flutter Module 项目 ( 仅做参考 ) 2. ...

  6. 01-iOS蓝牙开发简介

    蓝牙开发简介 1.1-iOS蓝牙实现方案 iOS中提供了4个框架用于实现蓝牙连接 1.<GameKit.framework>:用法非常简单 只能用于iOS设备之间的连接,多用于蓝牙对战的游 ...

  7. OpenCV Java开发简介

    OpenCV Java开发简介 OpenCV Java开发简介 我们将在本指南中做什么 获得适当的OpenCV 下载 构建 Java示例与Ant Java和Scala的SBT项目 运行SBT样本 Op ...

  8. Ethereum 开发简介

    内容 Ethereum Web 开发 搭建开发者环境 EVM 与 Solidity 简介 Full Stack – 第一个 Dapp 传统的 Web 开发 简介 有一个后台服务,后台回去连接数据库,好 ...

  9. DotNetNuke模块开发简介

    本文为翻译内容,原文来自http://adefwebserver.com/DotNetNukeHELP/DNN4_ModuleDevelopersGuide/ 仅作参考,不是严格翻译(累了,脑袋不转了 ...

最新文章

  1. 35.页面置换算法有哪些?
  2. 详述JavaScript数组
  3. SQL 2008 外网访问说明
  4. Scala import导包用法
  5. Java中byte[]与十六进制之间的转化
  6. Linux 16.04 右上角输入法丢失的问题
  7. mqttfx连接emq_云服务器上MQTT:EMQ服务搭建使用教程
  8. 【java学习之路】(java SE篇)001.java初识
  9. python基础教程-Python基础教程,Python入门教程(非常详细)
  10. 【转】Apache+php+mysql在windows下的安装与配置图解(最新版)
  11. atitit.科技公司的超级武器--超级框架,到底要不要自己的框架??
  12. 【路由优化】基于能量均衡高效的LEACH协议改进算法附matlab代码
  13. 机械制图--零件图--过渡线
  14. leapftp,leapftp怎么上传文件
  15. Ubuntu系统下如何提交代码到GitHub
  16. python 化学_rdkit 化学反应分子式高级功能
  17. 手机从哈林子弹节省人力
  18. JAVA怎么对接第三方短信平台?短信验证码完整API文档
  19. USACO——Mixing Milk 混合牛奶
  20. 计算机的英语作文模板,高中英语作文模板 第243期:My Computer 我的电脑

热门文章

  1. [大话设计模式]UML类图基本图示法,以及PowerDesigner的工具板介绍
  2. 增强“四个意识”、坚定“四个自信”、做到“两个维护”
  3. Proxmox VE安装和在PVE上安装群晖DSM7.01
  4. Maven多模块版本统一管理
  5. Python学习笔记 (类与对象)
  6. win7通过注册表关闭自动睡眠和锁屏
  7. 用电梯服务器怎样解电梯显示E34,成为电梯高手之三菱-菱云系列电梯故障代码表...
  8. 日本首富——孙正义的传奇
  9. 电脑上怎么清空我的android手机,缓存数据可以清除吗?手机与电脑清除方法详解...
  10. 用JS实现歌词与播放音乐同步