前一篇介绍了qemu的基本使用,使用virsh或者virtual manager来管理虚拟机,但没有涉及到libvirt API,这里就使用libvirt的python API来演示一下虚拟机的创建。

看nova的源码,关于虚拟机管理的模块是virt,libvirt就是其中的一个包,这个包中包含了使用libvirt管理虚拟机的所有API,看一下下面的示意图:

libvirt.driver这个模块中有一个全局的变量libvirt,其指向的就是libvirt的库函数,连接的获得_conn、虚拟机的创建等都是通过这个变量来调用的libvirtAPI。

在对虚拟机进行管理之前,先要和虚拟机的管理程序,即Hypervisor建立连接,在这里创建连接有两种方式,一个是只读的,一个是可读写的,创建连接在_connect()方法中:

[python] view plaincopy
  1. @staticmethod
  2. def _connect(uri, read_only):
  3. auth = [[libvirt.VIR_CRED_AUTHNAME, libvirt.VIR_CRED_NOECHOPROMPT],
  4. 'root',
  5. None]
  6. if read_only:
  7. return libvirt.openReadOnly(uri)
  8. else:
  9. return libvirt.openAuth(uri, auth, 0)

创建虚拟机主要在_create_domain()方法中:

[python] view plaincopy
  1. def _create_domain(self, xml=None, domain=None, launch_flags=0):
  2. """Create a domain.
  3. Either domain or xml must be passed in. If both are passed, then
  4. the domain definition is overwritten from the xml.
  5. """
  6. if xml:
  7. domain = self._conn.defineXML(xml)
  8. domain.createWithFlags(launch_flags)
  9. return domain

虚拟机相关的参数都在一个xml文件中配置,创建虚拟机时就使用这个xml文件中的内容作为参数,即上面的xml参数的类型是字符串。

defineXML()是用根据xml的内容定义了一个虚拟机,即创建了一个virDomain对象,但是并没有启动这个虚拟机。用这个方法定义的虚拟机是永久性的,会再生成一个和这个虚拟机相关的xml配置文件。还有一个方法是createXML(),它创建的虚拟机是临时性的。

createWithFlags()是启动之前定义的虚拟机,即让虚拟机的状态变为running。和它类似的方法还有一个create(),两者的区别暂时还不清楚。

根据上面的方法,就可以直接使用python来创建虚拟机了,简单的示例如下:

[python] view plaincopy
  1. import libvirt
  2. auth = [[libvirt.VIR_CRED_AUTHNAME, libvirt.VIR_CRED_NOECHOPROMPT],'root',None]
  3. conn=libvirt.openAuth("qemu:///system",auth,0) #这里要用读写的方式打开连接
  4. with open('/suo/domain/demo.xml') as f:
  5. xml=f.read()
  6. domain=conn.defineXML(xml)
  7. domain.createWithFlags(0)
  8. try:
  9. dom0 = conn.lookupByName("instance-00000001")
  10. except:
  11. print 'Failed to find the main domain'
  12. sys.exit(1)
  13. print "Domain 0: id %d running %s" % (dom0.ID(), dom0.OSType())
  14. print dom0.info()

因为使用python创建虚拟机,需要读写很多root权限的文件,所以要用openAuth()方法来创建连接,并且qemu使用的是system模式的。

demo.xml文件如下:

[html] view plaincopy
  1. <domain type='qemu'>
  2. <name>instance-00000001</name>
  3. <uuid>c7a5fdbd-cdaf-9455-926a-d65c16db1809</uuid>
  4. <memory>219200</memory>
  5. <currentMemory>219200</currentMemory>
  6. <vcpu>1</vcpu>
  7. <os>
  8. <type arch='i686' machine='pc'>hvm</type>
  9. <boot dev='hd'/><!--优先从硬盘启动-->
  10. <boot dev='cdrom'/><!--硬盘不能启动的话,从光驱启动-->
  11. </os>
  12. <devices>
  13. <emulator>/usr/local/bin/qemu</emulator>
  14. <disk type='file' device='cdrom'>
  15. <source file='/suo/domain/cflinux-1.0.iso'/>
  16. <target dev='hdc'/>
  17. <readonly/>
  18. </disk>
  19. <disk type='file' device='disk'>
  20. <source file='/suo/domain/precise-server-cloudimg-i386-disk1.img'/>
  21. <target dev='hda'/>
  22. </disk>
  23. <interface type='bridge'>
  24. <source bridge='br100'/><!--这里配置的虚拟机让它桥接到br100网桥上-->
  25. </interface>
  26. <graphics type='vnc' port='-1'/>
  27. </devices>
  28. </domain>

官方文档上介绍这个xml的配置文件是还有很多复杂的内容,这里仅仅配置了最简单的情况,方便理解。另外网络的配置现在还不太明白怎么配置,只是简单的把这个虚拟机桥接到了br100这个网桥上。

运行上面的python文件,就可以创建虚拟机了(前提是创建好br100和root权限的libvirtd的守护进程正常运行),运行之后只是创建了虚拟机,但是对虚拟机的安装还是需要手动进行的,可以使用qemu的命令:qemu -hda instance-00000001.img来打开一个qemu的虚拟机窗口,也可以直接使用virtual manager来进行安装。

openstack nova基础知识——libvirt和qemu(2)相关推荐

  1. openstack nova 基础知识——Quota(配额管理)

    很久没有写博客了,之前在学校的一段时间比较堕落,坐着火车从南到北,穿越长江黄河,来到了一片新的天地.在这里,不管男的女的,老的少的,在吃饭,在路上,我听到的不再是"游戏"这个永久不 ...

  2. OpenStack 云计算基础知识

    OpenStack Docs: Current http://docs.openstack.org/ OpenStack云计算快速入门教程 - OpenStack及其构成简介_服务器应用_Linux公 ...

  3. KVM 介绍(7):使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照 (Nova Instances Snapshot Libvirt)...

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  4. 【KVM系列07】使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照

    第七章 使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照 1. QEMU/KVM 快照 1.1 概念 1.2 使用 virsh 实验 1.3 外部快照的删除 2. OpenSt ...

  5. 通过demo学习OpenStack开发所需的基础知识 -- 单元测试

    本文将进入单元测试的部分,这也是基础知识中最后一个大块.本文将重点讲述Python和OpenStack中的单元测试的生态环境. 单元测试的重要性 github上有个人画了一些不同语言的学习曲线图:Le ...

  6. 硬件基础知识----(20)KVM 深入理解

    KVM 介绍(1):简介及安装 http://www.cnblogs.com/sammyliu/p/4543110.html 学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 ...

  7. 云系列---Openstack Nova组件 | 参数说明 | 详细讲解

    Openstack Nova组件 一.Nova 概念 二.Nova 系统架构 三.Nova 组件详讲 1.API 讲解 2.Scheduler 讲解 调度器类型 过滤调度器调度过程 过滤器类型 Sch ...

  8. 【KVM系列08】使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机

    第八章 使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机 1. QEMU/KVM 迁移的概念 1.1 迁移效率的衡量 1.2 KVM 迁移的原理 1.3 使用命令行的方式做动态迁移 ...

  9. OpenStack 基础知识

    OpenStack 基础知识 文章目录 OpenStack 基础知识 前言 一.虚拟化 1.I型虚拟化 2.II型虚拟化 二.KVM & Libvirt 前言 了解openstack之前需要掌 ...

最新文章

  1. nginx 通过proxy_next_upstream实现容灾和重复处理问题
  2. 20行python代码的入门级小游戏-200行Python代码实现的2048小游戏
  3. 进化计算在深度学习中的应用 | 附多篇论文解读
  4. win7映射linux硬盘_win7下安装Linux实现双系统全攻略
  5. C++explicit关键字
  6. 与Netflix合作 美电视运营商推出4K频道
  7. 一道数组求连续子集最大值的题目。
  8. UI自动化之元素定位(xpath、css)
  9. js基本包装类型和引用类型
  10. 第八十七期:爬了知乎“沙雕问题”,笑死个人!
  11. 如何选择python书籍_关于 Python 的经典入门书籍有哪些?
  12. Ai Challenger Caption图像中文描述(2017)
  13. Linux系统下如何实现文件系统配额
  14. ORB-SLAM3 yaml文件介绍
  15. 11.17牛客练习赛31 ABC-----未完
  16. 显卡天梯图2022年4月 最新显卡性能排行天梯图
  17. 电脑如设置路由器WiFi外加无线桥接一个副路由器
  18. 初一计算机在线应用,初中计算器_求:计算器(初中数学七年级)在线使用_淘题吧...
  19. Java个人网站设计与实现毕业
  20. 类和对象8:数值方法

热门文章

  1. STM32F4系列ADC最大转换速率及操作条件(以STM32F407ZGT6为例)
  2. css3切角文本框_[CSS揭秘]切角效果
  3. 手机品牌是否一定要自研芯片
  4. 科大讯飞胡郁:我所领导的超脑项目,代表了AI的未来
  5. 英语语法浅入-learning
  6. 前端面试题(背题中)
  7. word给代码加行号
  8. 2021年软考考试科目怎么安排?
  9. python - glob
  10. iOS 应用内购买(In-App Purchase)之开发