學習【KVM虛擬機存儲管理】讀完本文就夠了,涵蓋8個知識點
時間:2023-07-17 23:51:02 | 來源:網(wǎng)站運營
時間:2023-07-17 23:51:02 來源:網(wǎng)站運營
學習【KVM虛擬機存儲管理】讀完本文就夠了,涵蓋8個知識點:
KVM到底是個啥?
KVM的現(xiàn)狀
KVM最初是由Qumranet公司的Avi Kivity開發(fā)的,作為他們的VDI產(chǎn)品的后臺虛擬化解決方案。為了簡化開發(fā),Avi Kivity并沒有選擇從底層開始新寫一個Hypervisor,而是選擇了**基于Linux kernel,通過加載模塊使Linux kernel本身變成一個Hypervisor。**2006年10月,在先后完成了基本功能、動態(tài)遷移以及主要的性能優(yōu)化之后,Qumranet正式對外宣布了KVM的誕生。同月,**KVM模塊的源代碼被正式納入Linux kernel,成為內核源代碼的一部分。**2008年9月4日,Redhat公司以1.07億美元收購了Qumranet公司,包括它的KVM開源項目和開發(fā)人員。自此,Redhat開始在其RHEL發(fā)行版中集成KVM,逐步取代Xen,并從RHEL7開始,正式不支持Xen。
在KVM出現(xiàn)之前,Xen虛擬化解決方案已經(jīng)業(yè)界比較成熟的一款開源VMM,但是KVM出現(xiàn)之后,很快被Linux內核社區(qū)接受,就是因為Xen不是通過Linux內核去管理系統(tǒng)資源(硬件/軟件),而是通過自身的管理系統(tǒng)去完成,僅這一點就讓Linux內核社區(qū)很不爽。同時,Xen在當時設計上采用半虛方式,需要修改Guest OS的內核來滿足I/O驅動性能要求,從而不支持商用OS(Windows、Mac OS)的虛擬化,使得Xen相比KVM來說,在硬件輔助虛擬化的支撐上包袱更重,轉型困難重重。
目前,KVM已經(jīng)成為OpenStack用戶選擇的事實上的Hypervisor標準。**OpenStack自身調查數(shù)據(jù)顯示,KVM占87%以上的部署份額,可以說,KVM已經(jīng)主導公有云部署的Hypervisor市場,同時在電信云部署方面也是一枝獨秀。
功能上,虛擬化發(fā)展到今天,各個Hypervisor的主要功能都差不多。KVM由于其開源性,反而商業(yè)上的限制較少。性能上,KVM和Xen都能達到原生系統(tǒng)95%以上的效率(CPU、內存、網(wǎng)絡、磁盤等benchmark衡量),KVM甚至還略微好過Xen一點點。微軟雖然宣布其Hype-V的性能更好,但這只是微軟一家之言,并沒有公開的數(shù)據(jù)支撐。
在電信云NFV領域來說,由于通信網(wǎng)絡設備的實時性要求很高,且NFV的開源平臺OPNFV選擇了OpenStack。為了更好實現(xiàn)網(wǎng)絡功能虛擬化的愿景,其實時性要求責無旁貸的落到了KVM頭上,NFV-KVM項目也就順理成章地誕生了,它作為OPNFV的子項目主要解決KVM在實時性方面受到的挑戰(zhàn)。
總的來說,虛擬化技術發(fā)展到今天已經(jīng)非常成熟,再加上DPDK代碼的開源化、KVM也好、其他Hypervisor也好,在轉發(fā)性能的優(yōu)化和硬件輔助虛擬化的支撐上都半斤八兩,但由于KVM的開源性特性以及社區(qū)的熱度,使得其在云計算領域解決方案一枝獨秀。甚至,華為在其FusionSphere6.3版本也開始擁抱KVM而拋棄了Xen。要知道,華為在劍橋大學可是專門有一支團隊在研究Xen虛擬化。
KVM實踐初步
在x86-64架構的處理器中,KVM需要的硬件輔助虛擬化分別為Intel的虛擬化技術(Intel VT)和AMD的AMD-V技術。在前面我們介紹過,CPU不僅要在硬件上支持VT技術,還要在BIOS中將其功能打開,KVM才能使用到。目前,大多數(shù)服務器和PC的BIOS都默認已經(jīng)打開VT。至于如何在VMware Workstations虛擬機和物理服務器上打開,詳見本站《KVM到底是個啥?》一文。
部署和安裝KVM
KVM的部署和安裝主要有兩種方式:一種源碼編譯安裝,另一種就是通過CentOS的YUM工具安裝。**作為學習實驗途徑,我們這里主要介紹YUM工具安裝方式。至于源碼編譯安裝一般屬于生產(chǎn)研發(fā)人員的操作,這里我們只給一些關鍵提示,有興趣的同學可自行研究。
1)源碼編譯安裝方式。**KVM作為Linux內核的一個module,是從Linux內核版本2.6.20開始的,所以要編譯KVM,你的Linux操作系統(tǒng)內核必須在2.6.20版本以上,也就是CentOS 6.x和CentOS 7.x都天生支持,但是CentOS 5.x以下版本需要先升級內核。
下載KVM源代碼,主要通過以下三種方式:- 下載KVM項目開發(fā)中的代碼倉庫kvm.git。
- 下載Linux內核的代碼倉庫linux.git。
- 使用git clone命令從github托管網(wǎng)站上下載KVM的源代碼。
根據(jù)上面三種途徑下載源代碼后就可以通過make install的方式編譯安裝了,編譯安裝完成后還需要根據(jù)KVM官方指導手冊進行相關的配置。。。我們這里不展開,大家可自行搜索源碼方式安裝。
需要注意一點兒的是,除了下載KVM的源碼外,還需要同時下載QEMU的源碼進行編譯安裝,因為它倆是一輩子的好基友嘛。。。2)YUM工具安裝。首先,需要查看 CPU是否支持VT技術,就可以判斷是否支持KVM。然后,再進行相關工具包的安裝。最后,加載模塊,啟動libvirtd守護進程即可。具體步驟如下:
Step1:確認服務器是否支持硬件虛擬化技術,如果有返回結果,也就是結果中有vmx(Intel)或svm(AMD)字樣,就說明CPU的支持的,否則就是不支持。如下圖所示,表示服務器支持Intel的VT-x技術,且有4個CPU。
KVM管理工具libvirt
通過前面兩篇文章的介紹,相信大家對KVM虛擬機的原理、軟件架構、運行機制和部署方式等有所了解。但是,那些東西只能算是非常基礎入門的東西。尤其我們介紹的部署KVM虛擬機時用到的virt-install命令,不僅參數(shù)很多,很難記憶,而且要想用好virt-*系列工具首先需要對libvirt工具有更深刻的了解。因為,virt-*系列工具其實是對libvirt工具的封裝調用,而libvirt工具又是對底層qemu工具的封裝調用,其目的都是為了使命令更加友好與用戶交互。本篇文章就詳細介紹這幾種與libvirt相關的管理工具,為后續(xù)各種配置打下良好基礎。
libvirt管理工具
提到KVM的管理工具,就不得不提大名鼎鼎的libvirt,因為libvirt是目前使用最為廣泛的對KVM虛擬機進行管理的工具和應用程序接口,而且一些常用的虛擬機管理工具(如virsh、virt-install、virt-manager等)和云計算框架平臺(如OpenStack、ZStack、OpenNebula、Eucalyptus等)都在底層使用libvirt的應用程序接口,也就是說
libvirt實際上是一個連接底層Hypervisor與上層應用的中間適配層。KVM虛擬機的各種安裝方法
virt-instal工具簡介
virt-install是一個命令行工具,它能夠為KVM、Xen或其它支持libvrit API的hypervisor創(chuàng)建虛擬機并完成GuestOS安裝;此外,它能夠基于串行控制臺、VNC或SDL支持文本或圖形安裝界面。安裝過程可以使用本地的安裝介質如CDROM,也可以通過網(wǎng)絡方式如NFS、HTTP或FTP服務實現(xiàn)。對于通過網(wǎng)絡安裝的方式,virt-install可以自動加載必要的文件以啟動安裝過程而無須額外提供引導工具。當然,virt-install也支持PXE方式的安裝過程,也能夠直接使用現(xiàn)有的磁盤映像直接啟動安裝過程。
KVM虛擬機全生命周期管理實戰(zhàn)
在上一篇我們介紹了KVM最重要的管理工具libvirt,它是KVM其他管理工具的基礎,處于KVM管理架構的中間適配層。本篇我們主要要介紹libvirt的命令行管理工具的virsh,它也是將libvirt作為基礎,通過封包調用實現(xiàn)的。所以,在看本篇內容之前,最好將上一篇的內容做個預習。
libvirt命令行工具virsh
virsh通過調用libvirt API實現(xiàn)虛擬化管理,與virt-manager工具類似,都是管理虛擬化環(huán)境中的虛擬機和Hypervisor的工具,只不過virsh是命令行文本方式的,也是更常用的方式。
在使用virsh命令行進行虛擬化管理操作時,可以使用兩種工作模式:交互模式和非交互模式。交互模式是連接到Hypervisor上,然后輸入一個命令得到一個返回結果,直到輸入quit命令退出。非交互模式是直接在命令上通過建立URI連接,然后執(zhí)行一個或多個命令,執(zhí)行完后將命令的輸出結果返回到終端上,然后自動斷開連接。兩種操作模式的截圖如下:
KVM虛擬機存儲管理實戰(zhàn)(上篇)
我們上一篇介紹了KVM虛擬機的全生命周期管理實戰(zhàn),如果與OpenStack的實操對應,正好與nova服務的實操相符。在云計算體系中,運維管理主要涉及計算nova、存儲cinder和網(wǎng)絡neutron三部分。因此,本篇文章我們主要介紹KVM的存儲管理實戰(zhàn)。KVM的存儲選項有多種,包括虛擬磁盤文件、基于文件系統(tǒng)的存儲和基于設備的存儲。同樣,也有對應的virsh管理命令。
KVM的存儲選項和常用管理命令
為實現(xiàn)KVM存儲管理,可以使用LVM邏輯卷和創(chuàng)建存儲池。儲存池Storage Pool 是宿主機上可以看到的一片存儲空間,可以是多種型。而邏輯卷Volume 是在 存儲池Storage Pool 中劃分出的一塊空間,宿主機將 Volume 分配給虛擬機,Volume 在虛擬機中看到的就是一塊硬盤。
虛擬磁盤文件
當系統(tǒng)創(chuàng)建KVM虛擬機的時候,默認使用虛擬磁盤文件作為后端存儲。安裝后,虛擬機認為在使用真實的磁盤,但實際上看到的是用于模擬硬盤的虛擬磁盤文件。就是因為加了一層額外的文件系統(tǒng)層,所以系統(tǒng)的I/O讀寫性能會降低,但是基于文件系統(tǒng)的虛擬磁盤可以用于其他虛擬機,且具備快照、鏈接克隆、彈性擴縮容等特性,方便虛擬機的遷移。因此,可以說是各有利弊,根據(jù)實際使用場景來選擇。
基于文件系統(tǒng)的KVM存儲
在安裝KVM宿主機時,**可選文件系統(tǒng)為dir(directory)或fs(formatted block storage)**作為初始KVM存儲格式。默認為dir,通過指定本地文件系統(tǒng)中的一個目錄用于創(chuàng)建磁盤鏡像文件。而fs選項可以允許指定某個格式化文件系統(tǒng)的分區(qū),把它作為專用的磁盤鏡像文件存儲。**兩種KVM存儲選項之間最主要的區(qū)別在于:fs文件系統(tǒng)不需要掛載到某個特定的目錄。**兩種選項所指定的文件系統(tǒng),都可以是本地文件系統(tǒng)或位于SAN上某個物理宿主機上的網(wǎng)絡文件系統(tǒng)。后者具備數(shù)據(jù)共享的優(yōu)勢,可以很輕易地實現(xiàn)多個主機同時訪問。
KVM虛擬機存儲管理實戰(zhàn)(下篇)
在上一篇中我們介紹qemu-img這個對磁盤鏡像操作的命令,包括檢查鏡像磁盤,創(chuàng)建鏡像磁盤、查看鏡像磁盤信息、轉換鏡像磁盤格式、調整鏡像磁盤大小以及鏡像磁盤的快照鏈操作。但是,在鏡像磁盤快照鏈操作中,我們也提到了通過qemu-img命令創(chuàng)建快照鏈只能在虛擬機關機狀態(tài)下運行。如果虛擬機為運行態(tài),只能通過virsh save vm來保存當前狀態(tài)。那么,本文就專門講述在KVM虛擬機中如何通過virsh命令來創(chuàng)建快照鏈,以及鏈中快照的相互關系,如何縮短鏈,如何利用這條鏈回滾我們的虛擬機到某個狀態(tài)等等。
什么是虛擬機快照鏈
虛擬機快照保存了虛擬機在某個指定時間點的狀態(tài)(包括操作系統(tǒng)和所有的程序),利用快照,我們可以恢復虛擬機到某個以前的狀態(tài)。比如:測試軟件的時候經(jīng)常需要回滾系統(tǒng),以及新手安裝OpenStack時為了防止重頭再來,每安裝成功一個服務就做一次快照等等。
快照鏈就是多個快照組成的關系鏈,這些快照按照創(chuàng)建時間排列成鏈,像下面這樣。
復制
base-image<--guest1<--snap1<--snap2<--snap3<--snap4<--當前(active)
如上,base-image是制作好的一個qcow2格式的磁盤鏡像文件,它包含有完整的OS以及引導程序?,F(xiàn)在,以這個base-image為模板創(chuàng)建多個虛擬機,簡單點方法就是每創(chuàng)建一個虛擬機我們就把這個鏡像完整復制一份,但這種做法效率底下,滿足不了生產(chǎn)需要。這時,就用到了qcow2鏡像的
copy-on-write(寫時復制)特性。qcow2(qemu copy-on-write)格式鏡像支持快照,具有創(chuàng)建一個base-image,以及在base-image(backing file)基礎上創(chuàng)建多個
copy-on-write overlays鏡像的能力。這里需要解釋下backing file和overlay的概念。在上面那條鏈中,我們?yōu)閎ase-image創(chuàng)建一個guest1,那么此時base-image就是guest1的backing file,guest1就是base-image的overlay。同理,為guest1虛擬機創(chuàng)建了一個快照snap1,此時guest1就是snap1的backing file,snap1是guest1的overlay。
**backing files和overlays十分有用,可以快速的創(chuàng)建瘦裝備實例,特別是在開發(fā)測試過程中可以快速回滾到之前某個狀態(tài)。**以CentOS系統(tǒng)來說,我們制作了一個qcow2格式的虛擬機鏡像,想要以它作為模板來創(chuàng)建多個虛擬機實例,有兩種方法實現(xiàn):
KVM虛擬機網(wǎng)絡管理實戰(zhàn)
上一篇文章我們介紹完KVM的存儲管理實戰(zhàn)后,接下來我們本篇文章就開始主要介紹KVM的網(wǎng)絡管理實戰(zhàn)。KVM的網(wǎng)絡管理模型與OpenStack Neutron中的網(wǎng)絡管理非常類似,而在學些OpenStack時,網(wǎng)絡服務Neutron往往是很多人初學OpenStack的一個難點。因此,掌握了本篇內容的知識點,對于后續(xù)學習OpenStack Neutron部分的內容有事半功倍的效果。
virsh中的網(wǎng)絡管理基礎
在介紹KVM中常見的網(wǎng)絡模型之前,我們先來看看virsh有哪些網(wǎng)絡管理的命令。與存儲管理實戰(zhàn)和全生命周期管理實戰(zhàn)類似,virsh主要提供對節(jié)點上的物理網(wǎng)絡接口和分配給虛擬機的虛擬網(wǎng)絡進行管理的命令。包括:創(chuàng)建節(jié)點上的物理接口、編輯節(jié)點上物理接口的XML配置文件,查詢節(jié)點上物理接口、創(chuàng)建虛擬機的虛擬網(wǎng)絡、編輯虛擬機的虛擬網(wǎng)絡和刪除虛擬機的虛擬網(wǎng)絡等。常用的命令和作用如下:
更多Linux內核資料
【深入研究 kvm,ceph,fuse特性】:
【高清技術學習視頻】
如果對大家有幫助,記得 @零聲Github整理庫 關注我 或者 加WX:baby602878196【備注:1024】獲取學習視頻。