kvm介紹核心虛擬化技術從基礎到入門到高階

2021-10-05 19:29:22 字數 4977 閱讀 4215

kvm備課筆記

核心級虛擬化技術(kernel-based virtua machine)

1.雲計算概念

2.虛擬化與虛擬機器

3.硬體虛擬化與軟體虛擬化

4.kvm虛擬化

5.kvm(cpu虛擬化)+qemu(io裝置虛擬化)+libvirt(提供管理控制台)虛擬化及虛擬機器管理

重量級虛擬化,輕量級虛擬化(docker容器計算 )

vmm將物理硬體整合

宿主機(host):跑vmm的機器

客戶機(guest):在vmm之上虛擬化出來的機器

vmware:命令列支援較好

sun virtualbos:圖形化介面支援

硬體虛擬化:插虛擬化卡進行虛擬化,在虛擬化卡上進行配置,遷移性弱

軟體虛擬化:首先有一套作業系統,在作業系統上安裝虛擬化軟體系統,每個cpu對應宿主機上的乙個程序,核數對應程序中的執行緒,跨平台效能好

軟體虛擬化分為平台虛擬化與軟體虛擬化

平台虛擬化通過容器運作上層的作業系統,上層的作業系統可以呼叫底層的庫,不需要再安裝

軟體虛擬化對於底層庫的呼叫必須通過虛擬化軟體來**

全虛擬化與半虛擬化

傳統虛擬化結構

kvm優勢一:記憶體頁共享

記憶體分為核心態和使用者態。核心佔三分之一,一般的虛擬化技術程序存在於使用者態,所以最多只能操作使用者空間加少量的核心空間,而kvm的程序存在於核心態,可以操作所有的記憶體,kvm屬於linux核心的乙個分支,整合在linux中。

記憶體是分頁的,以頁面為基本單位

kvm優勢二:可以直接操作外圍裝置,執行到使用者空間的程序只能通過轉化去操作

kvm支援檢測及模組安裝

cpu檢測

sudo kvm-ok(使用此命令需安裝cpu-checker)

egrep -c 『(xvm|svm)』 /proc/cpuinfo 從檔案中搜尋是否有vmx或者svm指令

grep vmx /proc/cpuinfo

注意:如果是用 vm 下 ubuntu 虛擬機器環境學習 kvm,執行該命令為 0 時。那麼需要開啟虛擬化引擎

所謂的模組實際上是linux作業系統中的主鍵,絕大多數程式的驅動都是以模組的形式構建的

lsmod | grep kvm 檢視模組

安裝kvm:sudo apt install kvm

qemu:qemu 是純軟體實現的虛擬化模擬器,幾乎可以模擬任何硬體裝置。 但是正因為 qemu 是純軟體實現的,所以其效能非常低。 因此在生產環境中,大多數的做法都是配合 kvm 來完成虛擬化工作。 因為 kvm 是核心級虛擬化技術,主要負責複雜的 cpu 和記憶體虛擬化; 而 qemu 則負責 i/o 裝置虛擬化,兩者合作各自發揮自身的優勢,相得益彰

安裝qemu:sudo apt install qemu-utils

建立目錄:sudo mkdir -p vmdk/vmfs

建立虛擬磁碟:sudo qemu-img create -f qcow2 server1.qcow2 40g

-f指定虛擬磁碟的格式

磁碟格式:qcow2:可動態伸縮,不可以擴容

raw:分配實際的空間,可以擴容

轉換虛擬磁碟的格式:sudo qemu-img convert -f -o

調整虛擬磁碟大小:sudo qemu-img resize -q

注意:對於以上兩條命令要慎用,特別是在虛擬磁碟中有資料的時候,會造成資料損壞或丟失

檢視虛擬磁碟的資訊:sudo qemu-img info server1.qcow2

安裝libvirtd:sudo apt install virtinst 可以遠端管理

sudo vi /etc/libvirt/libvirtd.conf

listen_tls = 0 libvirt服務啟動時資訊傳遞的方式是否加密,不加密

listen_tcp = 1 遠端管理方式為tcp協議

tcp_port = 「16509」 預設埠

auth_tcp = 「none」 授權

mdns_adv = 0 是否支援在網絡卡上做dns解析

sudo vi /etc/default/libvirt-bin

libvirtd_opts = "-d -l" libvirt程序啟動的選項

sudo vi /etc/libvirt/qemu.conf

vnc_listen = "0.0.0.0" 支援遠端的vnc桌面,監聽ip位址

注意:該軟體安裝完成後會為我們建立乙個虛擬網絡卡,叫vibr0

如果你需要建立其他虛擬網絡卡可以使用以下命令:

virsh iface-bridge eth0 virbr1 eth0是宿主機網絡卡,vibr1是虛擬網絡卡的名字

乙個物理網絡卡上面可以建多個虛擬網絡卡

重啟libvirt服務

sudo service libvirt-bin restart

sudo apt install libvirt-bin

建立虛擬機器

sudo virt-install

–connect qemu:///system 作業系統安裝到哪台宿主機

–name=server1 新建的虛擬機器的名字

–ram 1024 新建虛擬機器的記憶體大小,單位m

–vcpus=2 幾核

–disk path=/vm/server1.qcow2,format=qcow2,size=40,bus=virtio 虛擬磁碟檔案

–cdrom /package/ubuntu-16.04.1-server-amd64.iso 安裝盤的檔案

–vnc 支援遠端桌面檢視

–os-type linux 安裝的虛擬機器作業系統

–accelerate 使用加數計數

–hvm 虛擬化技術:半虛擬化

–network bridge=virbr0,model=virtio 網絡卡

–noautoconsole 不要自動啟動管理介面

建指令碼檔案:sudo vi i.sh

virt-install

–connect qemu:///system

–name=server \

…授權:sudo chmod +x i.sh

執行:sudo ./i.sh

virsh 進入virsh

list --all 當前執行的虛擬機器的列表

vnc-view ip:0 預設埠為5900,省略590,0表示第乙個虛擬機器

宿主機的記憶體加入4g,完全可以有三個2g的客戶機,因為記憶體頁共享的原因

第二種方式,修改配置檔案

server1.xml -> server2.xml

1:name,修改虛擬機器名字

2:uuid,修改唯一標識,隨便改其中的值,但是要注意是16進製制

3:mac address,修改mac位址,同上,隨便改

4:source file,修改映象檔案即磁碟路徑,絕對路徑

第三種方式,轉殖

virt-clone -o server1 -n server3 -f /home/yfl/vm/vmdk/vmfs/server3.qcow2

virsh edit server1 可以直接查詢到xml配置檔案進行修改

虛擬機器管理

啟動虛擬機器

virsh start vm

關閉虛擬機器

virsh shutdown vm

強制關閉虛擬機器

virsh destroy vm

刪除虛擬機器

virsh undefine vm

檢視虛擬機器

virsh list --all

遷移虛擬機器

virsh migrate --live vm qemu+tcp://ip/system --unsafe (遷移虛擬機器的磁碟路徑名要和被遷移的虛擬機器的相同)

虛擬機器域管理 briup training

查詢虛擬機器domain連線資訊

virsh domdisplay vm

查詢虛擬機器磁碟資訊

virsh domblklist vm

查詢虛擬機器網絡卡

virsh domiflist vm

arp -a 反向位址解析,可以查到連線過本虛擬機器的mac位址及ip等

虛擬磁碟管理 briup training

新增虛擬磁碟

virsh attach-disk –domain –source --target --persistent --subdriver=qcow2

刪除虛擬磁碟

virsh detach-disk –domain –target –persistent

vcpu的概念

qemu/kvm為客戶機提供一整套的硬體系統環境,在客戶機看來其所擁有的cpu即是vcpu(virtual cpu),在kvm環境中,每乙個客戶機都是乙個標準的linux程序,而每乙個vcpu在宿主機中是qemu程序的乙個執行緒

在普通的linux系統中,程序一般有兩種執行模式,核心模式和 使用者模式,kvm環境中,增加了第三種模式:客戶模式

使用者模式:主要處理io的模擬和管理,由qemu的**實現

核心模式:主要處理特別需要高效能和安全相關的指令,如處理客戶模式到核心模式的轉換,處理客戶模式下的io指令或其他特權指令引起的退出(vm-exit),處理影子記憶體管理(shadow mmu)

客戶模式:主要執行guest中的大部分指令,io和一些特權指令除外(他們會引起vm-exit,被hypervisor截獲並模擬)

cpu的過載使用

kvm允許客戶機過載使用物理資源,即允許為客戶機分配的cpu和記憶體數量多於物理上實際存在的資源,qemu會啟動更多的執行緒來為客戶機提供服務,這些執行緒也是被linux核心排程執行在物理cpu硬體上

關於cpu的過載使用,最不推薦的做法是讓某乙個客戶機的vcpu的數量超過物理系統上存在的cpu數量,比如,在4個邏輯cpu的宿主機中,同時執行乙個或多個客戶機,其中每個客戶機的vcpu數量多於4個,此時會帶來明顯的效能下降,效能反而不如給每個客戶機分配2個(或4個)vcpu的情況。

QEMU KVM核心虛擬化概述

本文翻譯自 主要內容為qemu kvm的記憶體虛擬化的架構描述 的梗概 由於linux核心的layz mode得到策略,qemu kvm會為guest分配虛擬記憶體空間,但直到訪問時,才真正分配物理空間。以前 指使用shadow page table時 每當guest修改頁表,必然會影響host.h...

開源KVM虛擬化技術

1.kvm虛擬機器技術原理 kvm全稱kernel based virtual machine,是乙個基於linux環境的開源虛擬化解決方案。與xen vmware等提供完整解決方案的商業化虛擬產品不同,kvm的思想是在linux核心的基礎上新增虛擬機器管理模組,重用linux核心中已經完善的程序排...

KVM 網路虛擬化基礎

網路虛擬化是虛擬化技術中最複雜的部分,學習難度最大。但因為網路是虛擬化中非常重要的資源,所以再硬的骨頭也必須要把它啃下來。為了讓大家對虛擬化網路的複雜程度有乙個直觀的認識,請看下圖 這是 openstack 官網上給出的計算節點 可以理解為 kvm 的宿主機 虛擬網路的邏輯圖,上面的網路裝置很多,層...