什么是虛擬化?
在計算機領域中虛擬化,和我們平時說的虛擬化并沒有什么兩樣,說白了就是一個虛擬出來的東西罷了,并不是真實存在的。
虛擬化的歷史
虛擬化早在20實際60年代末,由IBM開發被命名為vmm(Virtual Machine Monitor)虛擬機監視器的軟件,我們知道那時候工藝技術并不發達,電腦也不像現在這樣屬于每家每戶的標配,IBM為了解決電腦使用的問題,就開發了此軟件,用于將一臺大型計算機硬件虛擬分為多個計算機,以提供多用戶對計算機的使用。
此圖是一個標準虛擬化場景,硬件上方安裝一個操作系統(我們成為宿主機),由操作系統上安裝一個軟件(我們稱之為Hypervisor)創建出多個虛擬機(我們成為來賓主機),guest主機如果發起系統調用等特權指令的操作會被hypervisor接收,并轉換后交給host實現系統調用。
虛擬化的分類
半虛擬化:虛擬機明確的知道自己運行與虛擬機中,發起的所有系統調用被稱作為hypercall,由hypercall直接向硬件發出指令。
完全虛擬化:又被稱為硬件輔助的虛擬化,其實還有一種被稱之為模擬化的東西,模擬化是什么呢?就是guest所有設備都是通過hypervisor模擬出來的,底層硬件和guest的硬件甚至可以完全不一樣,但是這樣就會多個上面提到的指令轉換的過程,這樣性能就大大被降低。為了解決這個問題,一些硬件廠商直接在硬件上提供了一些技術支持,例如我們知道cpu有個叫做運行環的概念,用戶空間的指令在環3上運行,如果有對硬件的操作,都是通過發起系統調用,由內核操作硬件來完成這類型的指令,是在環0上執行,支持硬件輔助的cpu會虛擬出一個叫環-1的東西,我們host的內核從此就在環-1上呆著了,cpu上的指令集依然在環0上,這時候如果guest發出一個系統調用,就會直接被cpu捕獲,再由cpu激活運行在環-1上的host內核來執行,這樣一來是不是就比前面說的模擬化性能大大提升啊~。(當然在這里只提到了cpu的虛擬化,甚至cpu的MMU和TLB的虛擬化都沒提到,還有內存的虛擬化,IO的虛擬化,這里就不多做介紹了)
另外其實還有很多種虛擬化的分類,例如我們使用的tomcat 應用級別的虛擬化,還有現在的容器虛擬化(只隔離用戶空間,多個用戶空間共享內核空間)等等,但這些不是今天我們所說的重點。
看了對半虛擬化和完全虛擬化,如果我描述正常的話,相信你已經有個一點點概念了,半虛擬化無疑是運行性能應該是最好的,但是需要修改guest上的內核,以讓他知道自己運行在虛擬機的環境中,但是這又很難實現,畢竟修改內核也不是誰都會玩的,再說了有些系統閉源你根本沒法修改~。所以一般都使用的完全虛擬化類型。
再說kvm之前還必須提一下一個重要的軟件qemu,qemu本身是一款模擬軟件,可以模擬出各種硬件,xen和kvm都是依賴于qemu,IO設備一般有qemu模擬,cpu和內存一般就基于硬件輔助技術虛擬出來,qemu同時也是一款管理工具,但自身是一個比較底層的工具,底層也就意味著不好用。。。
kvm介紹
kvm有一家以色列的公司Qumranet開發,但后來被紅帽收購,已經被收錄至內核之中,想使用,我們直接在內核中加載此模塊,在用工具進行管理即可。
kvm依賴hvm硬件需要支持虛擬化技術,也就是我們上面提到的硬件輔助
kvm的管理工具
qemu:我們上文中提到的,但太過底層,所以不好用。
libvirt:有紅帽牽頭提出的項目,為所有虛擬化的場景中提供一個通用層,可管理所有虛擬化場景中的主機,但本身是作為一個守護進程運行在host主機上,所以較為重量級。
libvirt提供了幾個工具virsh 命令行管理工具,具有重多的子命令,用于管理guest(例如添加內存大小?。┖迷趲椭芎貌榭?,后文介紹,virt-install guest的管理工具用于創建guest主機等操作,另外還提供了一個圖形化的管理工具virt-manager,用于創建管理guest。
接著來看如何使用
在vmwaer中勾選此項,并啟動系統。
[root@localhost ~]# cat /proc/cpuinfo #進入系統后,查看cpu信息
確保cpu支持虛擬化技術 intel為vmx amd為svm
[root@localhost ~]# modinfo kvm #查看當前系統是否有kvm模塊,如果有模塊的響應信息就代表OK了
[root@localhost ~]# modprobe kvm_intel #裝載此模塊
[root@localhost ~]# ls /dev/kvm #可以看到在設備目錄下有個叫kvm的設備。
/dev/kvm
[root@localhost ~]# yum install libvirt #安裝libvirt
[root@localhost ~]# systemctl start libvirtd #啟動服務
[root@localhost ~]# yum install virt-manager #安裝圖形化管理工具
接著執行virt-manager就可以直接啟用圖形化接口了,記得要安裝linux圖形界面才行,如果還要遠程打開圖形化窗口記得ssh -X重新登錄(我這使用-X一直登錄不了,就直接在虛擬機上截圖看看吧)。
看到這里有沒有很熟悉的感覺~,就跟我們用的vmwaer差不多,除了丑了點,接著就可以添加虛擬機,等等做修改處理了。
virsh的使用
virsh –help 可以看到有非常多的子命令,并且后面也有簡單的描述,比如我想使用attach-disk添加磁盤的命令,那么使用virsh attach-disk –help 就可以看到具體使用格式,以及支持的選項。
具體的就不演示了
到這里其實還有不少問題,比如網絡,磁盤,的虛擬化,用qemu-img模擬出一個磁盤,網絡的虛擬化等等。
自己本來也并未完全吸收,這里就不過多介紹了,不然就成了門外漢在這指手畫腳鬧笑話了,以后了解了,能組織出自己的語言,再來介紹。
另外自我認為,想要學習虛擬化的使用,難得不在部署上,在虛擬化的背后有太多的理論知識,那才是重點,就像開篇標紅出說的,了解那些才能真真知道虛擬化具體是咋回事,此篇就當寫著玩好了~~~
原創文章,作者:N24_Ghost,如若轉載,請注明出處:http://www.www58058.com/70784
贊,有很多自己思考的地方~另外可以看下zstack~