openstack nova基础知识——libvirt和qemu(2)

[OpenStack 存储] Nova,Glance与Cinder 基于Ceph的统一存储方案 安装环境 都是redhat6.5 规划是这样了 三台机器作为ceph存储集群,分别hostnamemds, osd,mon,其中在这三台机器上都部署monitor和对象存储osd,在mds上部署metadata服务器mds 另外一台机器作为openstackall-in-one环境节点 hostnameclient 第一步:配置管理节点无密码访问其他节点,这个 阅读详情

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

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


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

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

    @staticmethod
    def _connect(uri, read_only):
        auth = [[libvirt.VIR_CRED_AUTHNAME, libvirt.VIR_CRED_NOECHOPROMPT],
                'root',
                None]

        if read_only:
            return libvirt.openReadOnly(uri)
        else:
            return libvirt.openAuth(uri, auth, 0)

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

    def _create_domain(self, xml=None, domain=None, launch_flags=0):
        """Create a domain.

        Either domain or xml must be passed in. If both are passed, then
        the domain definition is overwritten from the xml.
        """
        if xml:
            domain = self._conn.defineXML(xml)
        domain.createWithFlags(launch_flags)
        return domain

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

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

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


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

import libvirt

auth = [[libvirt.VIR_CRED_AUTHNAME, libvirt.VIR_CRED_NOECHOPROMPT],'root',None]

conn=libvirt.openAuth("qemu:///system",auth,0) #这里要用读写的方式打开连接

with open('/suo/domain/demo.xml') as f:
    xml=f.read()

domain=conn.defineXML(xml)
domain.createWithFlags(0)

try:
    dom0 = conn.lookupByName("instance-00000001")
except:
    print 'Failed to find the main domain'
    sys.exit(1)

print "Domain 0: id %d running %s" % (dom0.ID(), dom0.OSType())
print dom0.info()

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

demo.xml文件如下:

<domain type='qemu'>
  <name>instance-00000001</name>
  <uuid>c7a5fdbd-cdaf-9455-926a-d65c16db1809</uuid>
  <memory>219200</memory>
  <currentMemory>219200</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='i686' machine='pc'>hvm</type>
    <boot dev='hd'/><!--优先从硬盘启动-->
    <boot dev='cdrom'/><!--硬盘不能启动的话,从光驱启动-->
  </os>
  <devices>
    <emulator>/usr/local/bin/qemu</emulator>
    <disk type='file' device='cdrom'>
      <source file='/suo/domain/cflinux-1.0.iso'/>
      <target dev='hdc'/>
      <readonly/>
    </disk>
    <disk type='file' device='disk'>
      <source file='/suo/domain/precise-server-cloudimg-i386-disk1.img'/>
      <target dev='hda'/>
    </disk>
    <interface type='bridge'>
      <source bridge='br100'/><!--这里配置的虚拟机让它桥接到br100网桥上-->
    </interface>
    <graphics type='vnc' port='-1'/>
  </devices>
</domain>

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

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



OpenStack所支持的虚拟化技术和KVM、Xen、Hyer-V、QEMU、Libvirt说明 阅读详情

相关推荐

OpenStack之Nova

使用OpenStack Compute来托管和管理云计算系统。OpenStack Compute是基础架构即服务(IaaS)系统的主要部分。主要模块在Python中实现1因为认证,与OpenStack 身份认证keystone 交互。2因为磁盘和服务器镜像, 与镜像服务Glance 交互。3因为提供图形界面,与仪表盘Dashboard交互。Nova是OpenStack云中的计算组织控制器。支持OpenStack云中实例(instances)生命周期的所有活动都由Nova处理。

weixin_42795092的博客 2692

openstack nova 基础知识——libvirt和qemu(1)

又纠结了几天,终于到了可以写文章记录下来的时刻了。 简单的讲,nova最核心的功能就是对一大堆的虚拟机进行管理,虚拟机可以是各种各样(kvm, qemu, xen, vmware...),而且管理的方法也可以是各种各样(libvirt, xenapi, vmwareapi...),因为我的电脑不支持CPU的VT,而且以前在visualbox中装openstack,也只能使用qemu,所以这次测试

成长的足迹 2万+

手把手教你用UC3844设计多路输出反激电源(附PCB布局避坑指南)

本文详细介绍了使用UC3844设计多路输出反激电源的实战技巧,包括核心电路设计、变压器参数计算、PCB布局优化及EMI抑制方法。通过实验室实测数据和项目经验,帮助工程师避开常见设计陷阱,提升电源性能和可靠性。特别附赠PCB布局避坑指南,助力高效完成开关电源设计。

weixin_30300225的博客 568

qemu命令行参数转libvirt的xml文件

目录 [hide] 1 libvirt从Domain的配置文件启动虚拟机 2 使用qemu命令行启动虚拟机 3 在xml文件里使用任意qemu命令行参数 4 将QEMU参数转domain XML配置 5 转化domain XML为QEMU参数 6 参考资料 运行虚拟机有多种方式,其中可以使用qemu-system-x86或者qemu-kvm来运行虚拟。另外还可

beckdon的专栏 7063

Langchain分割方式

【代码】Langchain分割方式。

2896

Linux CentOS7文件系统(/dev/var)的容量扩充

原因是之前安装docker后,再想安装Nessus,系统说home、var文件系统的内存都不够。

JHoanna的博客 3226

openstack nova 基础知识——libvirt和qemu

原始地址不知道,转载来自:http://www.verydemo.com/demo_c441_i65124.html 简单的讲,nova最核心的功能就是对一大堆的虚拟机进行管理,虚拟机可以是各种各样(kvm, qemu, xen, vmware...),而且管理的方法也可以是各种各样(libvirt, xenapi, vmwareapi...),因为我的电脑不支持CPU的VT,而且以前在vi

ztejiagn的专栏 1940

01_MySQL下载、安装与配置(以MySQL8.0.31版本为例)

1.点击下载好的mysql安装包 进入到mysql installer界面。2.选择MySQL Servers选项 一直下拉。

4819

【云计算 | OpenStack】从零开始使用libvirt创建一个kvm虚机

一开始没有可启动盘时,将vm从光驱启动,从vnc进入虚机,开始安装,可以获得可启动盘,也就是制作了带系统的image镜像有了这个带系统的image镜像,可以多次拷贝重复利用,创建虚机时直接从硬盘启动。..................

土豆 4042

抖音视频数据抓取

最近经常有人问我抓取抖音视频的数据,问我一些很小白的问题,算法给他也不会用。 还是先抓包,获取需要的接口和参数,相关的算法在其它文章里面有描述。 搜索个视频看看 查看抓的包信息: 可以看到,这里是post请求...

2501_91048859的博客 3098

手把手教你学Simulink--移动机器人多轮协同场景实例:基于Simulink的双轮差速PMSM轮毂电机协同驱动仿真

本文介绍了基于Simulink的双轮差速PMSM轮毂电机协同驱动仿真系统。针对移动机器人存在的电机参数不一致、负载分配不均等问题,提出主从同步+力矩补偿的协同控制策略。通过搭建包含运动学模型、PMSM电机模型和矢量控制器的仿真系统,实现了速度同步误差<0.005m/s、轨迹跟踪误差<0.8cm、能耗降低12.5%的优化效果。文章详细阐述了建模步骤、核心算法实现和性能验证,为移动机器人动力系统设计提供了实用参考方案。

MHD0815的博客 133

Virt Driver模块介绍

Nova本身并不提供虚拟化技术,只是借助了各种主流的虚拟化技术,比如Xen、KVM等,实现虚拟机的创建与管理,因此作为Nova的核心,nova-compute需要和不同的Hypervisor进行交互。各种Hypervisor的支持通过Virt Driver的方式实现,比如Libvirt Driver,各种Virt Driver的实现位于nova/virt目录。|--disk|--hyperv|--...

实践求真知 1021

COMSOL有限元仿真深度指南:连接薄结构与实体结构(I)

COMSOL有限元仿真深度指南:如何在结构力学仿真中连接薄结构与实体结构?

忘了面孔的Batou 1万+

Openstack(nova)、kvm、qemu和libvirtd之间的联系

之前一直不清楚kvm、qemu、libvirtd和nova组件之间的区别和联系,今天在网上看了几篇文章,基本搞清了这几者之间的关系。下面简单总结一下。先介绍一下这几种技术。 一:QEMU QEMU是一个模拟器,通过动态二进制转换来模拟cpu以及其他一系列硬件,使guest os认为自己就是在和真正的硬件打交道,其实是和qemu模拟的硬件交互。这种模式下,guest os可以和主机上的硬件进行交...

梵修 8538

【即插即用模块】Transformer篇 | CVPR 2025 | D2T:双域特征融合,完美适配缺陷检测/小目标检测和分割等频域细节敏感的任务!

本文提出了一种基于小波和原型增强的双域Transformer(WPFormer)用于像素级表面缺陷检测。该模型通过Dual-domain Transformer (D2T)模块融合频域和空间域特征:小波增强交叉注意力(WCA)分解高低频特征并加权平衡,增强缺陷细节捕捉;原型引导注意力(PCA)生成全局原型向量强化关键信息聚合。实验表明,该模块在缺陷检测任务中性能优于现有方法,通过频域细节增强和全局依赖建模有效提升了复杂场景下的检测效果。代码已开源,适用于对频域敏感的目标检测和分割任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1374

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

KVM之Nova通过libvirt管理QEMU/KVM虚机

学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 (snapshot) (8)迁移 (migration) 1. Libvirt 在 OpenStack 架构中的位置 在 Nova Compute 节点上运行的 no

Yonx 1639

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【KVM系列06】Nova 通过 libvirt 管理 QEMU/KVM 虚机

第六章 Nova 通过 libvirt 管理 QEMU/KVM 虚机 1. Libvirt 在 OpenStack 架构中的位置 2. Nova 中 libvirt 的使用 2.1 创建 QEMU/KVM 虚机 2.2 添加 volume 到虚机 (nov...

Java仗剑走天涯 1426

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

『OpenStack』云计算平台『Nova』计算服务学习指南

本文将会讲解OpenStack 平台计算服务组件 Nova,结合抽象概念和简单易懂的实战操作,帮助您更好的理解 Nova 计算服务在 OpenStack 中的作用系统配置:宿主机 Ubuntu 20.04(WSL2)官网链接OpenStack是开源的云计算平台,用于构建和管理公有云和私有云基础设施。它提供了一组模块化的工具和服务,使用户能够创建和管理虚拟机、存储、网络、身份验证、镜像和其他云基础设施资源。

ReturnTmp的博客 1949

KVM之使用libvirt做QEMU/KVM、Nova实例的快照

学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 (snapshot) (8)迁移 (migration) 本文将梳理 QEMU/KVM 快照相关的知识,以及在 OpenStack Nova 中使

Yonx 1155

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

第七章 使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照 1. QEMU/KVM 快照 1.1 概念 1.2 使用 virsh 实验 1.3 外部快照的删除 2. OpenStack 中的快照 2.1 对 Nova Instance 进行快照 2.2 对卷做快照...

Java仗剑走天涯 1041

KVM之使用libvirt迁移QEMU/KVM、Nova虚机

学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 (snapshot) (8)迁移 (migration) 1. QEMU/KVM 迁移的概念 迁移(migration)包括系统整体的迁移和某个工作负...

Yonx 1711

深入浅出KVM (六) 丨Nova 通过 libvirt 管理 QEMU/KVM 虚机

深入浅出KVM (六) 丨Nova 通过 libvirt 管理 QEMU/KVM 虚机 2018.01.31 12:21:21字数 746阅读 2,290 1. Libvirt 在 OpenStack 架构中的位置 在 Nova Compute 节点上运行的 nova-compute 服务调用 Hypervisor API 去管理运行在该 Hypervisor 的虚机。Nova 使用 libvirt 管理 QEMU/KVM 虚机,还使用别的 API 去管理别的虚机。 libvirt 的.

qq_42533216的博客 1392

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

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

Java仗剑走天涯 1335
上一篇: openstack nova 基础知识——libvirt和qemu(1)
下一篇: 有用的linux命令集锦
hackerain
博客等级 码龄16年 753粉丝 220原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值