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 的宿主機 虛擬網路的邏輯圖,上面的網路裝置很多,層...