【云计算学习笔记(十六)】之 KVM原理,Libvirt,VLAN,Linux Bridge介绍
文章目錄
- 本文章由公號【開發小鴿】發布!歡迎關注!!!
- 一. 虛擬機基礎
- (一) 虛擬化分類
- 1. Host是通過什么方式將硬件資源虛擬化,并提供給Guest使用的呢?
- 2. 1型虛擬化
- 3. 2型虛擬化
- (二) KVM
- 1. KVM的概述
- 2. KVM的虛擬化實現
- 3.QEMU介紹
- 4.Libvirt
- (1)Libvirt概述
- (2)Libvirt組成
- (三)KVM虛擬化平臺搭建
- 1. 環境準備
- 2. 查看硬件是否支持虛擬化
- 3. 安裝KVM
- 4. 安裝kvm所依賴的組件
- 5. 創建物理橋接設備并關聯網卡
- 6. 測試使用KVM安裝虛擬機
- 7. 查看KVM虛擬機的狀態
- 8. 登錄虛機測試網絡情況
- 9. 遠程連接管理KVM虛擬機
- (四) KVM虛擬化原理
- 1. CPU虛擬化
- 2.內存虛擬化
- 3.存儲虛擬化
- 4.網絡虛擬化
- (1) Linux Bridge
- (2) VLAN
- (3) KVM是如何實現VLAN的?
- (4) 虛擬交換機的實現
本文章由公號【開發小鴿】發布!歡迎關注!!!
老規矩–妹妹鎮樓:
一. 虛擬機基礎
(一) 虛擬化分類
1. Host是通過什么方式將硬件資源虛擬化,并提供給Guest使用的呢?
? ? ? ?通過一個Hypervisor的程序,根據Hypervisor的實現方式和所處的位置,虛擬化又分為兩種:1型虛擬化和2型虛擬化。
2. 1型虛擬化
? ? ? ?Hypervisor直接安裝在物理機上,多個虛擬機在Hypervisor上運行,這里的Hypervisor的實現方式一般是一個定制的Linux系統,如Xen何VMWare的ESXi都是這種類型。
3. 2型虛擬化
? ? ? ?Host上安裝常規的OS,如Linux,Windows等,Hypervisor作為OS上的一個程序運行,并對虛擬機進行管理。如KVM,VirtualBox和VMWare WorkStation就是這種類型。
? ? ? ?這種類型的虛擬化更加靈活,支持虛擬機的嵌套,即可以在KVM上再運行一個KVM。
(二) KVM
1. KVM的概述
? ? ? ?KVM(Kernal-Based Virtual Machine),即KVM是基于Linux內核實現的虛擬化基礎設施,可以將Linux內核轉化為一個Hypervisor。KVM在2007年被導入Linux2.6.20核心中,它能夠在x86架構且硬件支持虛擬化技術(如Intel VT或AMD-T)的平臺上運行。
2. KVM的虛擬化實現
? ? ? ?KVM中有一個內核模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko),用來管理虛擬CPU和內存,而IO,存儲和網絡都交給Linux內核和Qemu來實現,QEMU軟件(qemu-kvm)作為虛擬機上層控制和界面管理。
3.QEMU介紹
? ? ? ?Qemu是一個廣泛使用的開源計算機模擬器和虛擬機,它能夠獨立運行虛擬機,即根本不需要kvm,kqemu是該軟件的加速軟件。對于kvm來說,并不需要qemu來做虛擬化處理,只是需要qemu的上層管理界面進行虛擬機控開關至,虛擬機依舊是由kvm驅動的。
? ? ? ?當qemu作為模擬器時,可以在一種架構(如x86 PC)下運行另一種架構(如ARM)下的操作系統和程序。通過使用動態轉換,它可以獲得非常好的性能。
? ? ? ?當qemu作為虛擬機時,QEMU可以使用其他虛擬機管理程序(如 Xen 或 KVM)來使用CPU擴展(HVM)進行虛擬化,通過在主機CPU上直接執行客戶機代碼來獲得接近于宿主機的性能。
4.Libvirt
(1)Libvirt概述
? ? ? ?Libvirt是KVM的管理工具,當然除了KVM它還可以管理其他的Hypervisor,如Xen,VirtualBox等,OpenStack底層也使用了Libvirt。它實際上是一系列庫函數提供給其他技術調用,來管理虛擬機的。它的設計是面向驅動的,對于任一種虛擬機技術都會開發該技術對應的驅動,這樣不同的虛擬機技術就可以使用不同的驅動來調用libvirt的接口。
(2)Libvirt組成
Libvirt中包含三個組件:
? ? ? ?后臺daemon程序libvirtd:接受和處理API請求;
? ? ? ?API庫:讓其他人可以開發基于Libvirt的高級工具,如virt-manager,這是個圖形化的KVM管理工具;
? ? ? ?virsh:KVM命令行工具;
(三)KVM虛擬化平臺搭建
1. 環境準備
? ? ? ?CentOS7_64位系統,配置圖形界面。
2. 查看硬件是否支持虛擬化
[root@localhost ~]# egrep ‘(vmx|svm)’ /proc/cpuinfo? ? ? ?結果是VMX表示Intel,SVM表示AMD。
3. 安裝KVM
? ? ? ?由于Linux內核已經將KVM收錄了,在安裝系統時已經加入了KVM,我們只需要在命令行模式下啟用KVM即可:
啟用KVM模塊:
[root@localhost ~]# modprobe kvm [root@localhost ~]# lsmod |grep kvm? ? ? ?modprobe可載入指定的個別模塊,或是載入一組相依的模塊。modprobe會根據depmod所產生的相依關系,決定要載入哪些模塊。若在載入過程中發生錯誤,在modprobe會卸載整組的模塊。
? ? ? ?執行 lsmod 指令,會列出所有已載入系統的模塊。Linux 操作系統的核心具有模塊化的特性,因此在編譯核心時,務須把全部的功能都放入核心。您可以將這些功能編譯成一個個單獨的模塊,待需要時再分別載入。
可以看到是,KVM模塊已經被載入Linux中。
4. 安裝kvm所依賴的組件
需要安裝qemu-kvm和libvirt相關的組件,如下所示:
[root@localhost ~]# yum install -y virt-* libvirt bridge-utils qemu-img qemu-kvm安裝完成后啟動libvirtd后臺服務:
[root@localhost ~]# service libvirtd start查看libvirtd后臺服務狀態:
systemctl status libvirtd.service設置開機自啟動libvirtd
systemctl enable libvirtd.service5. 創建物理橋接設備并關聯網卡
? ? ? ?在第4步中,我們已經創建了虛擬網橋virbr0,可以通過網橋管理命令查看:
brctl show? ? ? ?接下來,需要將NetworkManager服務關閉,開機啟動也關閉:
[root@localhost ~]# chkconfig NetworkManager off [root@localhost ~]# systemctl stop NetworkManager [root@localhost ~]# systemctl disable NetworkManager? ? ? ?接下來,需要創建物理橋接設備,使用virsh命令行工具創建物理網橋設備br0并關聯網卡ens33到該設備中:
[root@localhost ~]# virsh iface-bridge ens33 br0? ? ? ?此時,ens33之前的IP已經被放置到br0網橋中了。
? ? ? ?通過網橋管理來查看當前的網橋設備:
btctl show? ? ? ?如果列表中多了br0,則表示橋接成功。
6. 測試使用KVM安裝虛擬機
? ? ? ?安裝virt-manager圖形化界面管理虛擬機
yum -y install virt-manager? ? ? ?啟動virt-manager創建虛擬機:
virt-manager? ? ? ?從http://download.cirros-cloud.net/中下載一個很小的Linux鏡像cirrors,上傳到虛擬機中,使用virt-manager創建虛擬機,并分配內存和CPU,可以看到,cirrors已經成功在Centos7上生成了一個新的Linux虛擬機,如下所示:
7. 查看KVM虛擬機的狀態
virsh list –all8. 登錄虛機測試網絡情況
? ? ? ?登錄cirros虛機,查看當前虛機的地址信息,然后嘗試Ping宿主機以及百度,結果是成功的。說明當前的虛機已經和宿主機連通了,并且也能夠訪問外網了。
返回到宿主機中,通過網橋管理器查看當前宿主機的網橋情況:
? ? ? ?可以看到,br0是我們生成的物理網橋,它綁定了ens33宿主機的物理網卡,以及vnet0這個虛機的網卡,因此虛機和宿主機能夠相互通信。
? ? ? ?注意一點,虛擬中的虛擬網卡的名稱是eth0,而不是宿主機中顯示的vnet0,兩個名稱是不同的。
9. 遠程連接管理KVM虛擬機
? ? ? ?由于KVM(準確來說是Libvirt)默認是不接受遠程管理的,需要進行相關的配置才能夠連接上KVM虛擬機。
(四) KVM虛擬化原理
1. CPU虛擬化
? ? ? ?KVM的虛擬化是需要CPU硬件的支持的,之前通過命令查找硬件的cpu信息中是否有vmx或svm,vmx是Intel的虛擬化,svm是AMD的虛擬化。
? ? ? ?一個KVM虛擬機在宿主機中是一個qemu-kvm進程,與其他的Linux進程一樣被調度,而虛機中的每一個虛機vCPU對應qemu-kvm進程的一個線程。
2.內存虛擬化
? ? ? ?KVM通過內存虛擬機化共享物理系統內存,動態分配給虛機,為了在一臺機器上運行多個虛機,KVM需要實現VA(虛擬內存)->PA(物理內存)->機器內存(MA)直接的地址轉換。虛機的OS控制從VA到PA的轉換,KVM負責PA到MA。
3.存儲虛擬化
? ? ? ?KVM的存儲虛擬化通過存儲池(Storage Pool)和卷(Volume)來管理的。存儲池是宿主機上的一塊空間,是多種類型的,卷是池中的一塊空間,宿主機將卷分配給虛機,卷在虛機中就是一塊硬盤。
? ? ? ?文件目錄是最常用的存儲池類型,KVM將宿主機目錄/var/lib/libvirt/images作為默認的存儲池,而該存儲池中的卷就是一個個的文件了,每一個文件對于虛擬來說就是一個磁盤。KVM所有可用的存儲池都定義在宿主機的/etc/libvirt/storage目錄下,每一個池子有一個XML文件,默認有一個default.xml文件,其中的默認目錄就是/var/lib/libvirt/images。
? ? ? ?使用文件作為卷的優點是:存儲方便,移植性號,可復制,可遠程訪問。卷不一定都放在宿主機本地文件系統中,也可以存儲在通過網絡連接的遠程文件系統,這樣卷就能夠在多個宿主機之間共享,便于虛機在不同宿主機之間進行熱遷移。
KVM支持多種卷的文件格式,如:
? ? ? ?raw是默認格式,原始磁盤鏡像格式,移植性號,性能好,大小固定;
? ? ? ?qcow2,cow表示copy on write寫時復制,節省磁盤空間,支持多快照;
? ? ? ?vmdk是VMWare的虛擬磁盤格式,即VMWare的虛機可以直接在KVM上運行;
4.網絡虛擬化
? ? ? ?網絡虛擬化中最重要的是Linux Bridge和Vlan。
(1) Linux Bridge
? ? ? ?宿主機中有一塊連接外網的物理網卡eth0,如何讓虛機VM1訪問外網。選擇的方案是給VM1分配一個虛擬網卡vnet0,通過Linux Bridge br0將eth0和vnet0連接起來,這樣虛機和宿主機就通過Linux Bridege連接起來了。
? ? ? ?Linux Bridge是Linux上用來做二層交換的設備,即二層交換機,多個網絡設備可以連接到同一個Linux Bridge上,當某個設備收到數據包時,Linux Bridge會將數據轉發給其他設備。
? ? ? ?注意,在KVM中我們會看到一個virbr0,這是默認創建的一個Bridge,它的作用是為連接其上的虛擬網卡提供NAT訪問外網的功能,virbo0默認分配了一個IP192.168.122.1,并通過dnsmasql為連接其上的其他虛擬網卡提供DHCP服務。注意,使用NAT服務的虛機可以訪問外網,但是外網無法訪問虛機,因為NAT會將虛機發出網絡包的源地址轉換為宿主機的IP地址,不像網橋,虛機通過自己的IP直接和外網通信。
(2) VLAN
? ? ? ?LAN表示本地局域網,通常使用集線器和交換機來連接LAN中的PC,一個LAN表示一個廣播域,即LAN中的所有成員都會收到任一個成員發出的廣播包。
? ? ? ?VLAN表示虛擬的LAN,一個帶有VLAN功能的交換機能夠將自己的端口劃分出多個LAN,即隔離出了多個廣播域,每個域的二層廣播包(arp)是無法跨越每個廣播域的邊界的,但是在三層上是可以通過路由器讓不同的廣播域相通的。
? ? ? ?通常交換機的端口有兩種配置模式:Access和Trunk。Access端口被打上了VLAN的標簽,表明該端口屬于哪個VLAN,不同的VLAN用VLAN ID來區分,Access端口都是和計算機的網卡直連的,這樣從網卡出來的數據包流入Access端口后就能打上VLAN的標簽。Trunk端口能夠讓不同的VLAN進行通信。
(3) KVM是如何實現VLAN的?
? ? ? ?eth0是宿主機的物理網卡,宿主機通過軟件實現一個虛擬交換機,在其上定義了一個VLAN10,通過VLAN設備eht0.10連接到虛擬網橋brvlan10上,同時連接的還有虛機VM1的虛擬網卡vnet0,這樣vnet0,brvlan10,eth0.10相當于都接入了VLAN10的Access端口上,都屬于VLAN10了,連接到虛擬網橋brvlan10上的設備都自動加入了VLAN10中,而eth0就是一個Trunk端口。
? ? ? ?如果添加新的VLAN20網段到eth0上,那么兩個VLAN區域的網絡是隔離的,因為當VLAN10中的VM1向VLAN20中的VM2發送請求時,首先要獲取VM2的MAC地址,因此在VLAN10中廣播arp請求包,該請求包無法穿透VLAN10區域,因此獲取不到VM2的MAC地址,也就無法與VM2通信。
(4) 虛擬交換機的實現
? ? ? ?交換機包含兩種功能,一種是交換,另一種是隔離。Linux的VLAN設備的是隔離功能,將不同的VLAN網段隔離起來;Linux Bridge實現的是交換功能,將同一個VLAN的子設備掛載到一個Bridge上,設備之間就可以交換數據了。
? ? ? ?因此,Linux Bridge + Vlan實現了虛擬交換機的功能。
總結
以上是生活随笔為你收集整理的【云计算学习笔记(十六)】之 KVM原理,Libvirt,VLAN,Linux Bridge介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用友t6服务器设置映射,能否自定义用友T
- 下一篇: 根据身份证号码取得此CID户籍所在地