1. 程式人生 > >虛擬化技術kvm

虛擬化技術kvm

虛擬化技術之kvm

一、虛擬化技術kvm原理

kvm是基於內核的虛擬機,負責的是:
1、虛擬機的虛擬CPU也就是vCPU
2、對虛擬內存進行管理和調度
QEMU-KVM就是通過修改QEMU代碼而得出的專門用來創建和管理虛擬機的管理工具,是為了KVM能更好的和內核打交道
使用虛擬化技術的QEMU,實現虛擬外設
結論:
1、KVM本身只關註虛擬機調度和內存管理這兩個方面
2、外設的任務交給我們上面說的linux 內核或者是QEMU。 所以KVM就是一個輕量級的Hypervisor。


kvm架構:

由兩個模塊來組成:kvm模塊和QEMU-KVM
原理圖
技術分享圖片
QEMU實現了虛擬外設
具體表現在:
[root@foundation90 dev]# ll /dev/kvm

crw-rw-rw-+ 1 root kvm 10, 232 Apr 24 11:26 /dev/kvm
/dev/kvm是kvm內核模塊提供給用戶空間的一個接口,這個接口被qemu-kvm調用,通過ioctl系統調用就可以給用戶提供一個工具創建,刪除,管理虛擬機。
(ioctl是設備驅動程序中對設備的I/O通道進行管理的函數。)


二、安裝kvm虛擬機

條件:centos redhat鏡像,
安裝過程:
1、virt-manager
技術分享圖片
2、選擇從鏡像導入(此次實驗是進行安裝redhat7.3版本)
技術分享圖片
3、選擇鏡像所在路徑
技術分享圖片
4、後幾處不再截圖,分別為選擇內存與硬盤大小與創建虛擬機的名稱
最終會進入這個界面
技術分享圖片
5、進入安裝界面

kdump:是在系統崩潰、死鎖或者死機的時候用來轉儲內存運行參數的一個工具和服務,打個比方,如果系統一旦崩潰那麽正常的內核就沒有辦法工作了,在這個時候將由kdump產生一個用於capture當前運行信息的內核,該內核會將此時的內存中的所有運行狀態和數據信息收集到一個dump core文件中以便於Red Hat工程師分析崩潰原因,一旦內存信息收集完成,系統將自動重啟。
可以使用ulimit -c查看此項是否開啟,輸出為0則表示沒有開啟
6、需要自己進行語言與鍵盤的設置,分區可以進行自己手動分區與自動分區與設置root密碼。


三、使用腳本實現

#!/bin/bash
virt-install \
--cdrom /iso/rhel-server-7.0-x86_64-dvd.iso \ #光盤位置

--ram 1024 #設置內存
--cpus 1 #cpu個數
--disk /var/lib/libvirt/images/$1.qcow2,size=9,bus=virtio #硬盤位置,大小,與類型
--name $1 #名稱
--network source=br0,model=virtio &#網卡類型
使用此腳本可以直接進行至安裝虛擬機的界面
技術分享圖片


四、創建快照

在有母鏡像的情況下,對母鏡像進行快照
虛擬機的快照類似與一個系統的還原點,也可以類似與虛擬機的一個備份。
使用腳本
#!/bin/bash
qemu-img create -f qcow2 -b \
/var/lib/libvirt/images/rhel7.0-base-2.qcow2 \
/var/lib/libvirt/images/$1.qcow2

virt-install \
--ram 1024 \
--cpus 1 \
--disk /var/lib/libvirt/images/$1.qcow2,size=9,bus=virtio \
--name $1 \
--network source=br0,model=virtio \
--import &
使用此腳本可以直接實現虛擬機的快照功能,而且快照相比於母鏡像是非常小的。
快照的大小取決於對快照進行了多少修改
技術分享圖片


五、重置虛擬機快照

#!/bin/bash
virsh list | grep test | awk ‘{print $NF}‘
if [ $? -eq 0 ];then
virsh destroy $1
fi
rm -fr /etc/libvirt/qemu/$1.xml
rm -fr /var/lib/libvirt/images/$1.qcow2

qemu-img create -f qcow2 -b \
/var/lib/libvirt/images/rhel7.0-base-2.qcow2 \
/var/lib/libvirt/images/$1.qcow2

virt-install \
--ram 1024 \
--cpus 1 \
--disk /var/lib/libvirt/images/$1.qcow2,size=9,bus=virtio \
--name $1 \
--network source=br0,model=virtio \
--import &

虛擬化技術kvm