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万+

深入探讨 VQ-VAE:理解变分量化自动编码器

VQ-VAE代表"Variational Quantized Variational Autoencoder",是一种生成模型,通常用于处理高维数据,如图像和音频。它的设计灵感来自于变分自动编码器(VAE)和量化方法,结合了它们的优点,使得 VQ-VAE 能够生成高质量的数据,并在数据表示上引入离散性。VQ-VAE 是一种强大的生成模型,结合了变分自动编码器和量化方法的优点。它在图像和音频生成、数据压缩和生成性对抗网络等领域具有广泛的应用。

DeepViewInsight的博客 7016

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

Orcad原理图导入Allegro

在即将设计的PCB中,将层叠设置好后,执行File→import→parameters,将刚才导出的.prm文件导入,很多参数就自动设置好了,与已完成的PCB里的参数保持一致。具体操作是:在已完成的PCB里执行File→Exoprt→Parameters,弹出下图所示的对话框,选择需要导出的设计参数后,设置到导出路径,导出记录设计参数的文件(.prm)。在.brd文件导入网表后,往往需要页面大小、格点、各层叠里各要素显示颜色等参数,手动设置十分麻烦,我们可以在一块已经完成的PCB里导出记录设计参数的文件。

sinat_27007097的博客 2085

QT触摸屏开发:如何通过重写事件处理实现精准按键长按检测

本文针对QT触摸屏开发中按键长按检测不精准的常见问题,深入剖析了传统信号机制失效的原因,并提供了通过重写事件处理函数(event)的解决方案。文章详细介绍了创建自定义TouchButton类、直接处理QTouchEvent以实现可靠长按检测的完整步骤与代码示例,并分享了进阶优化与避坑指南,帮助开发者实现跨平台一致的精准交互。

weixin_29207149的博客 95

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

汽车IVI中控开发入门及进阶(三十八):手机投屏HiCar开发

为了兼容这部分手机,车机端在向手机端发送USB控制命令字的同时,需要启动mDNS Server,广播车机端IP地址和HiCar SDK侦听的Server Socket端口(IP地址和端口在HiCar SDK初始化USB driver时,告知车机),在检测到手机断开USB连接时关闭mDNS Server。厂商在集成HiCar SDK开发HMI应用时,不可避免会使用到智能座舱的敏感权限,例如位置权限、摄像头权限、麦克风权限等,SDK初始化时,厂商HMI应用需要设置必要的车机参数供SDK使用。

码农17年的博客 1075

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

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

土豆 4042

ITKMontage---ITK自动拼接模块

本文分享ITK中Remote中的ITKMontage拼接模块,希望对各位小伙伴有所帮助!1. ITKMontage介绍在医疗图像处理过程中,图像拼接有很多用处,比如DR图像的拼接。ITKMontage可以快速稳定的处理数据量较大的拼接图像。强度不均匀性校正配准全局优化融合2. ITKMontage安装ITKMontageITKMontage可脱离ITK进行单独安装,也可在ITK安装时作为模块进行安装。单独安装ITK模块安装在ITK编译时,选择ITKMontage模块。

qq_40041064的博客 450

【YOLOv12[基础]】热力图可视化实践 | 脚本升级 | 优化可视化效果 | 论文必备 | GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM等

热力图可视化实践 | 脚本升级 | 优化可视化效果 | 论文必备 GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM等

静谧、淡雅 895

Virt Driver模块介绍

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

实践求真知 1021

端到端自动驾驶:特斯拉FSD Beta技术拆解

端到端自动驾驶:特斯拉FSD Beta技术拆解 ,人工智能,计算机视觉,大模型,AI,这篇文章围绕特斯拉FSD Beta的端到端自动驾驶技术展开,先介绍端到端自动驾驶的定义、与传统方案的区别及FSD Beta的特点,再阐述其硬件基础、技术架构,解析关键技术,还涉及训练数据与标注、安全与冗余设计、实际应用场景与挑战以及技术迭代与更新等内容,展现了该技术的多方面情况。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

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

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

梵修 8538

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

『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、付费专栏及课程。

余额充值