日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/3/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【KVM系列06】Nova 通过 libvirt 管理 QEMU/KVM 虚机 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??第六章 Nova 通過 libvirt 管理 QEMU/KVM 虛機


1. Libvirt 在 OpenStack 架構(gòu)中的位置

2. Nova 中 libvirt 的使用

2.1 創(chuàng)建 QEMU/KVM 虛機

2.2 添加 volume 到虛機 (nova volume-attach)

2.3 添加連接到新的網(wǎng)絡(luò)的 interface 給虛機 (nova interface-attach)


【KVM系列文章】https://blog.csdn.net/baidu_37107022/article/details/88812463

?

1. Libvirt 在 OpenStack 架構(gòu)中的位置

在 Nova Compute 節(jié)點上運行的 nova-compute 服務(wù)調(diào)用 Hypervisor API 去管理運行在該 Hypervisor 的虛機。Nova 使用 libvirt 管理 QEMU/KVM 虛機,還使用別的 API 去管理別的虛機。

? ? ???

libvirt 的實現(xiàn)代碼在?/nova/virt/libvirt/driver.py 文件中。

這里是?OpenStack Hypervisor Matrix。

這里是?每個 Linux 發(fā)行版里面 libvirt, QEMU/KVM 的版本號。

請注意Juno 版本 Nova 對 libvirt 和 QEMU 的各種最低版本要求:

功能最低 libvirt 版本最低 QEMU 版本不支持的后果
所有?0.9.11??Nova 不能使用 libvirt driver

支持 device callback

?1.1.1?不支持的話,就無法支持 Detach PCI/SR-IOV 設(shè)備
Live snapshot1.3.01.3.0?只能使用 Clod Snapshot
掛載卷時設(shè)置卷的 block 大小(Block IO)0.10.2?不能使用的話,就不能設(shè)置卷的特定 block size,只能使用其默認的 block size。
Block Job Info1.1.1?不能在線刪除卷的快照 (online deletion?of volume snapshots)
Discard1.0.61.6.0 不支持 image 設(shè)置 hw_disk_discard 屬性,具體參考 BluePrint
NUMA topology1.0.4??無法獲取 node 的 NUMA topology 信息,就無法將虛機的 vCPU 指定到特定的 node CPU 上,會影響虛機的性能

2. Nova 中 libvirt 的使用

Nova 使用 libvirt 來管理虛機,包括:

  • 創(chuàng)建虛機
  • 虛機的生命周期管理(參考這篇文檔)
  • 添加和刪除連接到別的網(wǎng)絡(luò)的網(wǎng)卡 (interface)
  • 添加和刪除 Cinder 卷 (volume)

2.1 創(chuàng)建 QEMU/KVM 虛機

創(chuàng)建虛機的配置有幾個來源:

  • 用戶的選項,包括虛機的基本信息,比如 name,flavor,image,network,disk等。
  • image 的屬性,比如 hw_vif_model,hw_scsi_model 等。完整的供 libvirt API 使用的屬性列表?在這里。
  • 管理員在 nova.conf 中的配置

(注意:image 的元數(shù)據(jù)屬性的優(yōu)先級高于 nova.conf 中的配置。只有在沒有property的情況下才使用nova.conf中的配置)

創(chuàng)建虛機的過程的幾個主要階段:

(1)消息由 nova-api 路由到某個 nova compute 節(jié)點 (API -> Scheduler -> Compute (manager) -> Libvirt Driver)

(2)調(diào)用 Neutron REST API 去準備網(wǎng)絡(luò)。其返回的數(shù)據(jù)類似:

[VIF({'profile': {}, 'ovs_interfaceid': u'59cfa0b8-2f5c-481a-89a8-7a8711b368a2', 'network': Network({'bridge': 'br-int', 'subnets': [Subnet({'ips': [FixedIP({'meta': {}, 'version': 4, 'type': 'fixed', 'floating_ips': [], 'address': u'10.0.10.14'})], 'version': 4, 'meta': {'dhcp_server': u'10.0.10.11'}, 'dns': [], 'routes': [], 'cidr': u'10.0.10.0/24', 'gateway': IP({'meta': {}, 'version': 4, 'type': 'gateway', 'address': u'10.0.10.1'})})], 'meta': {'injected': False, 'tenant_id': u'74c8ada23a3449f888d9e19b76d13aab'}, 'id': u'a924e87a-826b-4109-bb03-523a8b3f6f9e', 'label': u'demo-net2'}), 'devname': u'tap59cfa0b8-2f', 'vnic_type': u'normal', 'qbh_params': None, 'meta': {}, 'details': {u'port_filter': True, u'ovs_hybrid_plug': True}, 'address': u'fa:16:3e:e0:30:e7', 'active': False, 'type': u'ovs', 'id': u'59cfa0b8-2f5c-481a-89a8-7a8711b368a2', 'qbg_params': None})]

(3)從 image 啟動話,nova 會調(diào)用 Glane REST API 后者 image metadata 和準備本地啟動盤

image metadata:

{u'status': u'active', u'deleted': False, u'container_format': u'bare', u'min_ram': 0, u'updated_at': u'2015-04-26T04:34:40.000000', u'min_disk': 0, u'owner': u'74c8ada23a3449f888d9e19b76d13aab', u'is_public': False, u'deleted_at': None, u'properties': {}, u'size': 13167616, u'name': u'image', u'checksum': u'64d7c1cd2b6f60c92c14662941cb7913', u'created_at': u'2015-04-26T04:34:39.000000', u'disk_format': u'qcow2', u'id': u'bb9318db-5554-4857-a309-268c6653b9ff'}

本地啟動盤:

{'disk_bus': 'virtio', 'cdrom_bus': 'ide', 'mapping': {'disk': {'bus': 'virtio', 'boot_index': '1', 'type': 'disk', 'dev': u'vda'}, 'root': {'bus': 'virtio', 'boot_index': '1', 'type': 'disk', 'dev': u'vda'}, 'disk.local': {'bus': 'virtio', 'type': 'disk', 'dev': 'vdb'}, 'disk.swap': {'bus': 'virtio', 'type': 'disk', 'dev': 'vdc'}}}?

本地啟動盤的文件信息:

root@compute2:/home/s1# qemu-img info /var/lib/nova/instances/02699155-940f-4401-bc01-36220db80639/disk.localimage: /var/lib/nova/instances/02699155-940f-4401-bc01-36220db80639/disk.localfile format: qcow2virtual size: 1.0G (1073741824 bytes) #由 flavor.ephemeral_disk 指定其 size disk size: 324Kcluster_size: 65536backing file: /var/lib/nova/instances/_base/ephemeral_1_defaultFormat specific information:compat: 1.1lazy refcounts: falseroot@compute2:/home/s1# qemu-img info /var/lib/nova/instances/02699155-940f-4401-bc01-36220db80639/disk.swapimage: /var/lib/nova/instances/02699155-940f-4401-bc01-36220db80639/disk.swapfile format: qcow2virtual size: 30M (31457280 bytes) # 由 flavor.swap_disk 指定其size disk size: 196Kcluster_size: 65536backing file: /var/lib/nova/instances/_base/swap_30Format specific information:compat: 1.1lazy refcounts: false

(4)根據(jù)這些信息,生成 domain xml,然后生成其配置使得它是一個持久性虛機 (調(diào)用 libvirt Python?DefineXML API)。

一個從 image 啟動的 Domain 的配置 XML 實例(藍色部分是注釋說明):

<domain type="qemu">8352e969-0a25-4abf-978f-d9d0ec4de0cdinstance-0000002f51200 # guest.memory = flavor.memory_mb * units.Ki 即 50 * 1024 = 51200 <vcpu cpuset="0">1 #flavor.vcpus<nova:instance xmlns:nova="http://openstack.org/xmlns/libvirt/nova/1.0"><nova:package version="2014.2.2"/>vm11 #input.name 2015-06-09 23:54:04<nova:flavor name="tiny2"> #input.flavor 5013011<nova:user uuid="bcd37e6272184f34993b4d7686ca4479">admin<nova:project uuid="74c8ada23a3449f888d9e19b76d13aab">admin<nova:root type="image" uuid="bb9318db-5554-4857-a309-268c6653b9ff"/> #input.source<sysinfo type="smbios"> # Nova 中寫死的<entry name="manufacturer">OpenStack Foundation<entry name="product">OpenStack Nova<entry name="version">2014.2.2<entry name="serial">03bb1a0f-ae04-4765-9f3c-d200a2540675<entry name="uuid">8352e969-0a25-4abf-978f-d9d0ec4de0cdhvm #表示 Guest OS 需要 full virtualiaiton 支持 <boot dev="hd"/> #指定啟動盤 <smbios mode="sysinfo"/> #去讀取 的定義# Soft Reboot 需要 ACPI 的支持,否則只能使用 Hard reboot。 https://bugs.launchpad.net/horizon/+bug/1346741 # 沒 APIC 的話,Windows Guest 會在 Xen 或者 KVM 上崩潰。 https://bugs.launchpad.net/nova/+bug/1086352<clock offset="utc"/> #如果Guest OS 是 MS,則是 localtime,否則都是 utc <cpu mode="host-model" match="exact"> # 對于 KVM,如果 CONF.libvirt.cpu_mode 是 none,mode 則設(shè)為 "host-model"。具體可參考 https://wiki.openstack.org/wiki/LibvirtXMLCPUModel <topology sockets="1" cores="1" threads="1"/> #默認的時候,sockets 數(shù)目設(shè)為 vcpu 的數(shù)目,cores 和 threads 都設(shè)為 1. 可以通過設(shè)置 image 的 hw_cpu_topology 屬性來改變這里的設(shè)置,具體請參考 https://blueprints.launchpad.net/nova/+spec/support-libvirt-vcpu-topology 以及 https://wiki.openstack.org/wiki/VirtDriverGuestCPUMemoryPlacement<disk type="file" device="disk"> # 從 image 啟動時候的啟動盤(flavor.root_disk) <driver name="qemu" type="qcow2" cache="none"/><source file="/var/lib/nova/instances/8352e969-0a25-4abf-978f-d9d0ec4de0cd/disk"/><target bus="virtio" dev="vda"/> #對于 KVM,disk 的 bus 為 "virtio",cdrom 的 bus 為 "ide",floppy 的 bus 為 "fdc"<disk type="file" device="disk"> #臨時分區(qū) (falvor.ephemeral_disk) <driver name="qemu" type="qcow2" cache="none"/><source file="/var/lib/nova/instances/8352e969-0a25-4abf-978f-d9d0ec4de0cd/disk.local"/><target bus="virtio" dev="vdb"/><disk type="file" device="disk"> #swap 分區(qū) (flavor.swap_disk) <driver name="qemu" type="qcow2" cache="none"/><source file="/var/lib/nova/instances/8352e969-0a25-4abf-978f-d9d0ec4de0cd/disk.swap"/><target bus="virtio" dev="vdc"/><interface type="bridge"> # 虛機通過網(wǎng)橋連接到 OVS <mac address="fa:16:3e:e0:30:e7"/><model type="virtio"/> #該 type 可以由 image metadata hw_vif_type 指定。未指定的話,如果配置了 conf.libvirt.use_virtio_for_bridges = true (默認就是 true)的話,QEMU/KVM 會使用 virtio 類型。 <driver name="qemu"/><source bridge="qbr59cfa0b8-2f"/> #qbr59cfa0b8-2f 連接虛機的 vNIC tap59cfa0b8-2f 和 qvb59cfa0b8-2f ,而 qvb59cfa0b8-2f 練到 OVS 的 br-int 上。 <target dev="tap59cfa0b8-2f"/></interface><serial type="file"> 當(dāng) CONF.serial_console.enabled = true 時,type 為 "tcp",使用 config 配置,其 XML 為 ;當(dāng)為 false 時,使用 console.log 文件,type 為 file。 <source path="/var/lib/nova/instances/8352e969-0a25-4abf-978f-d9d0ec4de0cd/console.log"/><serial type="pty"/> #每個domain都有 type 為 "pty" 的 serial 配置。 <input type="tablet" bus="usb"/> #當(dāng) CONF.vnc_enabled = true 或者 CONF.spice.enabled = true 并且 CONF.spice.agent_enabled = false 時添加 tablet,type 和 bus 都是固定的。 <graphics type="vnc" autoport="yes" keymap="en-us" listen="0.0.0.0"/> #如果 CONF.vnc_enabled = true,那么 keymap=CONF.vnc_keymap;listen=CONF.vncserver_listen #如果 CONF.vnc_enabled 或者 CONF.spice.enabled,則添加該 video 配置 <model type="cirrus"/> #如果 CONF.spice.enabled,則 type 為 qxl;否則為 cirrus。<memballoon model="virtio"> #如果 CONF.libvirt.mem_stats_period_seconds >0 則添加 memballoon;對 KVM,model 固定為 "virtio" <stats period="10"/>

從 bootable volume 啟動的話,disk 部分為:

<disk type="file" device="disk"><driver name="qemu" type="qcow2" cache="none"/><source file="/var/lib/nova/instances/02699155-940f-4401-bc01-36220db80639/disk.local"/><target bus="virtio" dev="vdb"/><disk type="file" device="disk"><driver name="qemu" type="qcow2" cache="none"/><source file="/var/lib/nova/instances/02699155-940f-4401-bc01-36220db80639/disk.swap"/><target bus="virtio" dev="vdc"/>26446902-5a56-4c79-b839-a8e13a66dc7a

(5). 啟動 domain (調(diào)用 libvirt Python?createWithFlags API)

2.2 添加 volume 到虛機 (nova volume-attach)

(1)使用 volume id 通過 volume driver 找到指定的 volume

(2)調(diào)用 volume driver 來建立主機和 Volume 之間的連接

主機信息為:?

{'ip': '192.168.1.15', 'host': 'compute2', 'initiator': 'iqn.1993-08.org.debian:01:a9f2b45c24f9'}?

建立的 iSCSI 連接信息為:

{u'driver_volume_type': u'iscsi', u'data': {u'access_mode': u'rw', u'target_discovered': False, u'encrypted': False, u'qos_specs': None, u'target_iqn': u'iqn.2010-10.org.openstack:volume-51da0d1f-0a17-4e7f-aeff-27438963348a', u'target_portal': u'10.0.2.41:3260', u'volume_id': u'51da0d1f-0a17-4e7f-aeff-27438963348a', u'target_lun': 1, u'auth_password': u'hXG64qrzEjNt8MDKnERA', u'auth_username': u'fKSAe6vhgyeG88U9kcBV', u'auth_method': u'CHAP'}}?

volume 在主機上的磁盤為:

root@compute2:/home/s1# ls /dev/disk/by-path/ -ls
total 0
0 lrwxrwxrwx 1 root root 9 Jun 10 12:18 ip-10.0.2.41:3260-iscsi-iqn.2010-10.org.openstack:volume-51da0d1f-0a17-4e7f-aeff-27438963348a-lun-1 -> ../../sdc

Disk /dev/sdc: 1073 MB, 1073741824 bytes
34 heads, 61 sectors/track, 1011 cylinders, total 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdc doesn't contain a valid partition table

?

(3)通過 domain name 來找到指定 domain 對象 (通過調(diào)用?lookupByName API)

(4)生成 volume 連接的配置 xml,比如:?51da0d1f-0a17-4e7f-aeff-27438963348a

(5)調(diào)用?attachDeviceFlags API 將 volume 掛載到該虛機

2.3 添加連接到新的網(wǎng)絡(luò)的 interface 給虛機 (nova interface-attach)

(1)運行 nova ?interface-attach,傳入 network-id,Neutron 會分配如下network info 給 Nova

VIF({'profile': {}, 'ovs_interfaceid': u'0142efee-7382-43ef-96e8-d0084ecc893c', 'network': Network({'bridge': u'br-int', 'subnets': [Subnet({'ips': [FixedIP({'meta': {}, 'version': 4, 'type': u'fixed', 'floating_ips': [], 'address': u'10.0.0.40'})], 'version': 4, 'meta': {u'dhcp_server': u'10.0.0.3'}, 'dns': [], 'routes': [], 'cidr': u'10.0.0.0/24', 'gateway': IP({'meta': {}, 'version': 4, 'type': u'gateway', 'address': u'10.0.0.1'})})], 'meta': {u'injected': False, u'tenant_id': u'74c8ada23a3449f888d9e19b76d13aab'}, 'id': u'01630966-b21f-4a6d-95ff-10c4575f1fe2', 'label': u'demo-net'}), 'devname': u'tap0142efee-73', 'vnic_type': u'normal', 'qbh_params': None, 'meta': {}, 'details': {u'port_filter': True, u'ovs_hybrid_plug': True}, 'address': u'fa:16:3e:14:32:d9', 'active': True, 'type': u'ovs', 'id': u'0142efee-7382-43ef-96e8-d0084ecc893c', 'qbg_params': None})

(2)執(zhí)行下面的命令,將 Neutron 分配的 port 連接到 OVS?

#添加 linux bridgebrctl addbr qbr0142efee-73 #名字是 devname 的后半部分 brctl setfd qbr0142efee-73 0 brctl stp qbr0142efee-73 offtee /sys/class/net/qbr0142efee-73/bridge/multicast_snoopingip link add qvb0142efee-73 type veth peer name qvo0142efee-73 ip link set qvb0142efee-73 ip link set qvb0142efee-73 promisc on#在 OVS 上添加端口ovs-vsctl --timeout=120 -- --if-exists del-port qvo0142efee-73 -- add-port br-int qvo0142efee-73 -- set Interface qvo0142efee-73 external-ids:iface-id=0142efee-7382-43ef-96e8-d0084ecc893c external-ids:iface-status=active external-ids:attached-mac=fa:16:3e:14:32:d9 external-ids:vm-uuid=8352e969-0a25-4abf-978f-d9d0ec4de0cd

(3)生成 interface 配置的xml,比如:

(4)調(diào)用?attachDeviceFlags API 來掛載該 interface 到虛機

?至于其他的虛機操作,會在另一篇文章中描述。

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的【KVM系列06】Nova 通过 libvirt 管理 QEMU/KVM 虚机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天堂成人在线 | 丝袜美腿亚洲一区二区图片 | 国产老头和老头xxxx× | 撕开少妇裙子猛然进入 | 欧美伦理在线观看 | 成人午夜在线观看视频 | 亚色视频| 亚洲精品免费在线 | 精人妻一区二区三区 | 国产高清视频在线免费观看 | 最新国产精品视频 | 亚洲日本网站 | 嫩草视频网站 | 欧美日韩中文字幕一区二区 | 好色成人网 | 最近国语视频在线观看免费播放 | 在线视频资源 | 欧美性xxxxx极品少妇 | 久久久久国产一区二区 | 欧美午夜精品一区二区蜜桃 | 大奶子情人 | 99ri国产在线 | 911美女片黄在线观看游戏 | 超能一家人电影免费喜剧在线观看 | 日韩欧美视频二区 | 精品人妻无码一区二区性色 | 日韩av一卡| 污视频免费在线观看 | 黄色av电影网站 | 国产三级av在线播放 | 老妇free性videosxx| 正在播放久久 | 欧美美女性生活视频 | 少妇无套内谢久久久久 | 99热都是精品 | 黑人巨大精品欧美黑寡妇 | 91麻豆国产 | 色呦 | 成人激情片 | 综合久久久 | 日日夜夜网站 | 激情开心网站 | 国产九一精品 | 精品国产一区二区三区四区阿崩 | www.在线观看网站 | 日韩黄色短视频 | 男人亚洲天堂 | 亚洲aⅴ网站 | 快播在线视频 | 国产成人无码一区二区三区在线 | 黄色骚视频| 香蕉视频最新网址 | 日韩精品一区二区三 | 亚洲情热 | 国产日产亚洲精品 | 亚洲精品在线免费 | 五月天激情视频在线观看 | 亚洲欧洲自拍 | 中文字幕在线视频日韩 | 男女在线视频 | 日韩欧美视频免费观看 | 真实的中国女人做爰 | 性xxxx狂欢老少配o | 亚洲精品毛片av | 国产黄色大片网站 | 妖精视频在线观看免费 | 国产精品成人免费一区二区视频 | 污污视频在线免费看 | 亚洲视频自拍 | 亚洲女人天堂网 | 日韩黄色片在线观看 | 亚洲人人人 | 国产在线观看网站 | 男女视频国产 | 精品成人| 日本va在线观看 | 国产精品久久久久久久久免费相片 | 国产精选中文字幕 | 9l视频自拍九色9l视频 | 北条麻妃二三区 | 亚洲精品伊人 | va免费视频 | 国产91精品久久久久久久 | 日韩亚洲欧美综合 | 成年人网站在线观看视频 | 麻豆传媒在线看 | 尤物视频在线观看免费 | 欧美混交群体交 | 海角国产乱辈乱精品视频 | 国产一区美女 | 日韩av手机在线免费观看 | 中文字幕久久熟女蜜桃 | 黄色三级生活片 | 第五色婷婷 | 免费黄色三级网站 | 亚洲成人无码久久 | 青青青免费在线视频 | 免费在线| 国产男女猛烈无遮挡免费观看网站 |