深入淺出KVM(五) 丨libvirt 介紹

1. Libvirt 是什么

為什么需要Libvirt全陨?

  1. Hypervisor 比如 qemu-kvm 的命令行虛擬機管理工具參數(shù)眾多看疙,難于使用。

  2. Hypervisor 種類眾多源葫,沒有統(tǒng)一的編程接口來管理它們痢掠,這對云環(huán)境來說非常重要驱犹。

  3. 沒有統(tǒng)一的方式來方便地定義虛擬機相關(guān)的各種可管理對象。

Libvirt提供了什么足画?

  1. 它提供統(tǒng)一雄驹、穩(wěn)定、開放的源代碼的應(yīng)用程序接口(API)锌云、守護進程 (libvirtd)和和一個默認命令行管理工具(virsh)荠医。

  2. 它提供了對虛擬化客戶機和它的虛擬化設(shè)備吁脱、網(wǎng)絡(luò)和存儲的管理桑涎。

  3. 它提供了一套較為穩(wěn)定的C語言應(yīng)用程序接口。目前兼贡,在其他一些流行的編程語言中也提供了對libvirt的綁定攻冷,在Python、Perl遍希、Java等曼、Ruby、PHP、OCaml等高級編程語言中已經(jīng)有l(wèi)ibvirt的程序庫可以直接使用禁谦。

  4. 它對多種不同的 Hypervisor 的支持是通過一種基于驅(qū)動程序的架構(gòu)來實現(xiàn)的胁黑。libvirt 對不同的 Hypervisor 提供了不同的驅(qū)動,包括 Xen 的驅(qū)動州泊,對QEMU/KVM 有 QEMU 驅(qū)動丧蘸,VMware 驅(qū)動等。在 libvirt 源代碼中遥皂,可以很容易找到 qemu_driver.c力喷、xen_driver.c、xenapi_driver.c演训、vmware_driver.c弟孟、vbox_driver.c 這樣的驅(qū)動程序源代碼文件。

  5. 它作為中間適配層样悟,讓底層 Hypervisor 對上層用戶空間的管理工具是可以做到完全透明的拂募,因為 libvirt 屏蔽了底層各種 Hypervisor 的細節(jié),為上層管理工具提供了一個統(tǒng)一的乌奇、較穩(wěn)定的接口(API)益楼。

  6. 它使用 XML 來定義各種虛擬機相關(guān)的受管理對象他嚷。

目前,libvirt 已經(jīng)成為使用最為廣泛的對各種虛擬機進行管理的工具和應(yīng)用程序接口(API),而且一些常用的虛擬機管理工具(如virsh刁卜、virt-install、virt-manager等)和云計算框架平臺(如OpenStack姚淆、OpenNebula勤哗、Eucalyptus等)都在底層使用libvirt的應(yīng)用程序接口。

1.1 Libvirt C API

1.1.1 Libvirti API 所管理的主要對象

1.1.2 對象的管理模型


1.1.3 API 的簡單分類
Libvirt API 就是對各種對象的各種操作疏叨,包括基本的增潘靖、刪、改蚤蔓、查操作和其它操作卦溢。


1.2 Libvirt XML 定義

Libvirt 使用 XML 來定義各種對象,其中秀又,與 OpenStack Nova 關(guān)系比較密切的有:

disk (磁盤)

任何磁盤設(shè)備单寂,包括軟盤(floppy)、硬盤(hard disk)吐辙、光驅(qū)(cdrom)或者半虛擬化驅(qū)動都使用 <disk> 元素來定義宣决。 方式:

<disk type='' device=''>。其中:

  • ”type“ 用來指定device source 的類型:"file", "block", "dir", "network", 或者 "volume"昏苏。具體的 source 由 <source> 標簽定義尊沸。

  • ”device“ 用來指定 device target 的類型:"floppy", "disk", "cdrom", and "lun", 默認為 "disk" 威沫。具體的 target 由 <target> 標簽定義。

(1)”volume“ 類型的 disk

(2)”file“ 類型的 disk

(3)”block“ 類型的 disk

(4)”network“ 類型的 disk

Host device assignment (主機設(shè)備分配)

有幾種 interface 類型:
(1)type = ‘network’ 定義一個連接 Virtual network 的 interface


(2)type=‘birdge’ 定義一個 Bridge to LAN(橋接到物理網(wǎng)絡(luò))的interface:前提是主機上存在一個 bridge洼专,該 bridge 已經(jīng)連到物理LAN棒掠。

(3)type=‘ethernet’ 定義一個使用指定腳本連接到 LAN 的 interface

(4)type=‘direct’ 定義一個直接連到物理網(wǎng)卡(Direct attachment to physical interface)的 interface:需要 Linux macvtap 驅(qū)動支持


(5)type=‘hostdev’ 定義一個由主機PCI 網(wǎng)卡直接分配(PCI Passthrough)的 interface: 分配主機上的網(wǎng)卡給虛機

network (網(wǎng)絡(luò))

1. bridge:定義一個用于構(gòu)造該虛擬網(wǎng)絡(luò)的網(wǎng)橋。

2. domain:定義 DHCP server 的 DNS domain屁商。

3. forward: 定義虛擬網(wǎng)絡(luò)直接連到物理 LAN 的方式. ”mode“指轉(zhuǎn)發(fā)模式句柠。

(1) mode=‘nat’:所有連接到該虛擬網(wǎng)絡(luò)的虛擬的網(wǎng)絡(luò)都會經(jīng)過物理機器的網(wǎng)卡,并轉(zhuǎn)換成物理網(wǎng)卡的地址棒假。


(2) mode=‘route’:類似于 NAT溯职,但是不使用NAT,而是使用routing table帽哑。 </pre>

(3) mode=‘bridge’:使用不受libvirt管理的bridge谜酒,比如主機上已有的bridge;open vswitch bridge妻枕;使用 macvtap's "bridge" 模式

(4) mode=‘passthrough’:使用 a macvtap "direct" connection in "passthrough" mode 指定主機上的特定網(wǎng)卡用于虛擬網(wǎng)絡(luò)

(5) mode=‘hostdev’:直接分配主機上的網(wǎng)絡(luò)設(shè)備僻族。

詳細的 XML 定義說明在 https://libvirt.org/format.html

1.3 Libvirt API 的實現(xiàn)

libvirt API 的實現(xiàn)是在各個 Hypervisor driver 和 Storage dirver 內(nèi)屡谐。Hypervisor 驅(qū)動包括:

  • LXC - Linux Containers

  • OpenVZ

  • QEMU

  • Test - Used for testing

  • UML - User Mode Linux

  • VirtualBox

  • VMware ESX

  • VMware Workstation/Player

  • Xen

  • Microsoft Hyper-V

  • IBM PowerVM (phyp)

  • Parallels

  • Bhyve - The BSD Hypervisor

1.4 Libvirt 的 Python 綁定

python-libvirt 包含 Libvirt 的 Python 語言綁定述么。安裝 libvirt 時,默認會安裝 python-libvirt 愕掏。 來源: https://libvirt.org/python.html https://pypi.python.org/pypi/libvirt-python

Python API 和 C API 之間幾乎是一對一的映射關(guān)系度秘,比如:

因此,libvirt 官網(wǎng)并沒有提供詳細的 python API 描述饵撑。

2. QEMU/KVM libvirt 驅(qū)動

2.1 架構(gòu)

?Libvirtd 是一個 daemon 進程剑梳,可以被本地的virsh調(diào)用,也可以被遠程的virsh調(diào)用

?Libvirtd 調(diào)用 qemu-kvm 操作KVM 虛擬機

這里有一個 virsh 命令滑潘、Libvirt C API垢乙、 QEMU driver 方法 和 QEMU Monitor 命令的對照表(部分):

2.2 安裝

有三種方式來安裝 libvirt:

(1)下載 libvirt 的源代碼,然后編譯和安裝

(2)從各 Linux 的發(fā)行版中直接安裝语卤,比如 Ubuntu 上運行 apt-get install libvirt-bin

(3)從 git 上克隆 libvirt 的代碼追逮,然后編譯和安裝

2.3 libvirt log

這篇文章(https://libvirt.org/logging.html) 描述了 livbirt log。設(shè)置所有日志的方法是在 /etc/libvirt/libvirtd.conf 中添加下面的配置然后重啟 libvirt:

3 使用 libvirt 編程來管理 KVM 虛機的實例

這里只描述基本的過程粹舵。具體的過程钮孵,下一篇文章會具體分析 Nova 中 libvirt 的使用。

  1. 定義虛機的基本配置齐婴,包括 vCPU油猫、內(nèi)存稠茂、磁盤或者cdrom以及啟動順序柠偶,生成 xml 配置情妖,調(diào)用 virDomainCreateXML API 啟動一個虛機

  2. 使用 Domain 相關(guān)的 API 來管理虛機的生命周期。我的這篇文章(http://www.cnblogs.com/sammyliu/p/4486712.html)有虛機生命周期的詳細介紹诱担。

  3. 添加磁盤:定義一個 disk 的 xml 配置毡证,使用 virDomainAttachDevice API 將它掛載到虛機上。如果不是本地的源磁盤蔫仙,需要提前準備好料睛。

  4. 添加interface:使用 Network API 定義一個虛擬網(wǎng)絡(luò)(需要提前準備好物理網(wǎng)絡(luò)),然后定義一個 interface 的 XML 配置摇邦,使用 virDomainAttachDevice API 將它加到虛機恤煞。

  5. 按照需要,重復(fù)2施籍、3居扒、4步驟。

作者:劉世民(Sammyliu)
博客:http://www.cnblogs.com/sammyliu/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丑慎,一起剝皮案震驚了整個濱河市喜喂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竿裂,老刑警劉巖玉吁,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異腻异,居然都是意外死亡进副,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門悔常,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敢会,“玉大人,你說我怎么就攤上這事这嚣∨富瑁” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵姐帚,是天一觀的道長吏垮。 經(jīng)常有香客問我,道長罐旗,這世上最難降的妖魔是什么膳汪? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮九秀,結(jié)果婚禮上遗嗽,老公的妹妹穿的比我還像新娘。我一直安慰自己鼓蜒,他們只是感情好痹换,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布征字。 她就那樣靜靜地躺著,像睡著了一般娇豫。 火紅的嫁衣襯著肌膚如雪匙姜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天冯痢,我揣著相機與錄音氮昧,去河邊找鬼。 笑死浦楣,一個胖子當(dāng)著我的面吹牛袖肥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播振劳,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼昭伸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了澎迎?” 一聲冷哼從身側(cè)響起庐杨,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夹供,沒想到半個月后灵份,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡哮洽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年填渠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸟辅。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡氛什,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匪凉,到底是詐尸還是另有隱情枪眉,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布再层,位于F島的核電站贸铜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏聂受。R本人自食惡果不足惜蒿秦,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛋济。 院中可真熱鬧棍鳖,春花似錦、人聲如沸碗旅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骂蓖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間川尖,已是汗流浹背登下。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留叮喳,地道東北人被芳。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像馍悟,于是被迫代替她去往敵國和親畔濒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容