一、KVM 虛擬化服務的構成
KVM 虛擬化主要由三大組件構成,即:KVM、QEMU、LIBVIRTD
1、KVM:KVM 是 Linux 內核的模塊,他需要 CPU 的支持,採用硬件輔助虛擬化技術 Intel-VT,AMD-V,內存的相關如 Intel 的EPT 和 AMD 的 RVI 技術。
2、QEMU:QEMU是一個虛擬化的仿真工具,通過 ioctl 與內核 kvm 交互完成對硬件虛擬化的支持。
3、LIBVIRTD:Libvirtd 是一個對虛擬化管理的接口和工具,提供用戶端程序 virsh,virt-install,virt-manager,virt-view 與用戶交互。
二、虛擬化服務的必備軟件
qemu-kvm:爲 KVM 提供底層仿真支持
libvirt-daemon:守護進程,管理虛擬機
libvirt-client:用戶端軟件,提供客戶端管理命令
libvirt-daemon-driver-qemu:libvirt 連接 qemu 的驅動
可選軟件
virt-install :系統安裝工具
virt-manager :圖形管理工具
virt-v2v :虛擬機遷移工具
virt-p2v :物理機遷移工具
三、虛擬機的組成
1、內核虛擬化模塊(KVM)
2、系統設備仿真(QEMU)
3、虛擬機管理程序(LIBVIRT)
4、XML 文件(虛擬機配置聲明文件,位置 /etc/libvirt/qemu/ )
5、磁盤鏡像文件(虛擬機的硬盤,位置 /var/lib/libvirt/iamges/ )
四、虛擬機管理
使用 virsh 命令對 kvm 虛擬機進行常規管理。
a、查看虛擬機信息
1、查看 KVM 節點(服務器)信息
virsh nodeinfo
2、列出虛擬機
virsh list [--all]
3、列出虛擬網絡
virsh net-list [--all]
4、查看指定虛擬機的信息
virsh nodeinfo 虛擬機名稱
b、開關機操作
1、運行|重啓|關閉 指定的虛擬機
virsh start|reboot|shutdown 虛擬機名稱
2、強制關閉指定虛擬機
virsh destory 虛擬機名稱
3、將指定虛擬機設置爲開機自動運行
virsh autostart [--disable] 虛擬機名稱
五、常用鏡像盤類型對比
經過以上表格的鏡像盤格式對比,我們可以很肯定的知道,KVM 使用 QCOW2 格式的鏡像盤時,對服務器資源的利用率最高的,當然系統默認的鏡像盤格式。
六、虛擬機磁盤管理
使用命令 qemu-img
a、使用 qemu-img 命令對虛擬機的磁盤進行管理。
b、qemu-img 支持非常多的磁盤格式,例如 raw、qcow2、vdi、vmdk 等等。
c、qemu-img 命令格式
qemu-img 命令 參數 塊文件名稱 大小 常用命令有: create 創建一個磁盤 convert 轉換磁盤格式 info 查看磁盤信息 snapshot 管理磁盤快照 1、創建鏡相盤文件 qemu-img create -f 格式 磁盤路徑 大小 例如: qemu-img create -f qcow2 disk.img 50G 表示創建一個名爲 disk.img,大小爲 50G,格式爲 qcow2 的鏡像盤文件 2、查看鏡像盤文件的信息 qemu-img info 磁盤路徑 例如: qemu-img info disk.img 3、加 -b 參數使用後端模板文件 例如: qemu-img create -b disk.img -f qcow2 disk1.img 表示以後端鏡像盤 disk.img 爲模板,創建一個名爲 disk1.img 格式爲 qcow2 的鏡像盤,這裏沒有指定大小,表示與後端鏡像盤 disk.img 相同大小。
七、COW 技術原理
COW,即:Copy On Write 寫時複製,該技術主要實現以下功能
a、直接映射原始盤的數據內容
b、當原始的舊數據有修改時,再修改之前自動將舊數據存入前端盤
c、對前端盤的修改不回寫到原始盤
如下圖所示:
在 KVM 虛擬化中,對於 COW 技術的運用可謂是無處不在,最明顯的莫過於虛擬機的克隆。
八、KVM 虛擬機的遠程管理
a、使用 virsh 客戶端工具
1、連接本地
[root@localhost ~]# virsh -c qemu:///system (默認選項)
2、連接遠程
[root@localhost ~]# virsh -c qemu+ssh://[email protected]:port/system
b、使用 virt-manager 客戶端工具
1、virt-manager 也可以通過 add connection 管理其它機器上的虛擬機,一般通過 “ remote tunnel over ssh ” 就可以了。
2、需要注意的是 virt-manager 需要使用 ssh 免密登陸,如果沒有免密登陸,需要單獨安裝 python 的 ssh 相關模塊,這裏我們可以使用部署 key 的方法解決。
九、創建虛擬交換機
a、原理:調用 dnsmasp 提供 DNS、DHCP 等功能
b、創建配置文件 /etc/libvirt/qemu/networks/default.xml,並粘貼以下內容:
<network> <name>default</name> <bridge name="virbr0"/> <forward mode="nat"/> <ip address="192.168.20.254" netmask="255.255.255.0"> <dhcp> <range start="192.168.20.1" end="192.168.1.200"/> </dhcp> </ip> </network>
[root@localhost ~]# cd /etc/libvirt/qemu/networks/ [root@localhost networks]# vim default.xml
注意:bridge name="virbr0",這裏時網卡名稱,一定要與服務器的網卡名稱相同,不然會報錯。
c、使用 virsh 管理虛擬網絡
net-list 查看虛擬網絡 net-define default.xml 創建虛擬網絡 net-undefine default 刪除虛擬網絡 net-start default 啓動虛擬網絡 net-destroy default 停止虛擬網絡 net-edit default 修改 default 的網絡配置 net-autostart default 設置 default 虛擬網絡開機啓動
創建虛擬網絡
[root@localhost networks]# virsh net-define eth1.xml
十、XML 管理
a、XML 配置文件說明
1、定義了一個虛擬機的名稱、CPU、內存、虛擬磁盤、網卡等各種參數。
2、默認位於 /etc/libvirt/qemu/虛擬機名稱.xml。
b、導出 XML 配置文件
1、查看:virsh dumpxml 虛擬機名稱。
2、備份:virsh dumpxml 虛擬機名稱 > 虛擬機名稱.xml。
c、編輯虛擬機設置
1、對虛擬機的配置進行調整
①、編輯:virsh edit 虛擬機名稱。
②、若修改 name、memory、disk、network,可自動保存爲新虛擬機配置。
2、定義虛擬機
根據修改後的獨立的 xml 文件定義新虛擬機。
virsh define XML描述文件
3、刪除虛擬機
必要時可以刪除多餘的 XML 配置
①、比如虛擬機改名的情況
②、避免出現多個虛擬機的磁盤或者 MAC 地址衝突
③、virsh undefine 虛擬機名稱
十一、創建模板虛擬機
a、使用 virt-manager 命令調出虛擬系統管理器,新建虛擬機
[root@localhost ~]# virt-manager
b、選擇網絡安裝,並前進
c、在 URL 框中輸入我們自己的內部 yum 源地址(centos 目錄爲掛載的光盤目錄,對於光盤的掛載,這裏省略)
d、設置內存、CPU
注意:這裏內存最好時大於 2048M,CPU 最小爲 2 ,否則後面的虛擬機系統無法安裝。
e、設置磁盤鏡像,選擇創建自定義存儲,創建存儲卷,如下圖所示的過程。
f、設置虛擬機名稱並指定網絡,完成之後,就會進入 Centos 的系統安裝界面,至於系統的安裝,我們就不再一步步演示了。
經過上面的 6 步,我們已經創建了一個 kvm 虛擬機的模板,這個模板時最小化安裝,完全純淨的。如果要使用雲,則這個模板將會是關鍵性的存在,因爲 KVM 使用了 COW 寫時複製技術。
十二、總結
經過一系列的闡述與演示,我們是否有對 KVM 虛擬化有個大致的瞭解?其實 KVM 虛擬化,除了命令多之外,其他的跟 vsphere、xen 虛擬化沒多少區別。而且,現在很多企業中都在使用 KVM ,而很多雲環境的搭建也會有 KVM 的身影存在,因此,關於 KVM ,各位老鐵們還得不斷的瞭解啊。