kvm虛擬化介紹
一、虛擬化分類
3、虛擬化架構分類
(1)1型虛擬化
Hypervisor 直接安裝在物理機上,多個虛擬機在 Hypervisor 上運行。Hypervisor 實現方式一般是一個特殊定制的 Linux 系統。Xen 和 VMWare 的 ESXi
都屬於這個類型。
(2)2型虛擬化
物理機上首先安裝常規的操作系統,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作為 OS 上的一個程序模塊運行,並對管理虛擬機進行管理。
KVM、VirtualBox 和 VMWare Workstation 都屬於這個類型。
二、虛擬化 ---KVM
1、虛擬化kvm發展:
2006 年 10 月由以色列的 Qumranet 組織開發的一種新的“虛擬機”方案,並將其貢獻給開源世界
2007 年 2 月於 Linux Kernel-2.6.20 中第一次包含了 KVM
2008 年 9 月,紅帽收購了 Qumranet ,由此入手了 KVM 的虛擬化技術。在之前紅帽決是將Xen 加入到自己的默認特性當中——那是 2006 年,因為當時Xen技術脫離了內核的維護方式,也許是因為采用 Xen 的 RHEL 在企業級虛擬化方面沒有贏得太多的市場,也許是因為思傑跟微軟走的太近了,種種原因,導致其萌生了放棄 Xen。而且在正式采用 KVM 一年后,就宣布在新的產品線中徹底放棄 Xen ,集中資源和精力進行 KVM 的工作。
2009 年 9 月,紅帽發布其企業級 Linux 的 5.4 版本( RHEL5.4 ),在原先的 Xen 虛擬化機制之上,將 KVM 添加了進來
2010 年 11 月,紅帽發布其企業級 Linux 的 6.0 版本( RHEL6.0 ),這個版本將默認安裝的 Xen 虛擬化機制徹底去除,僅提供 KVM 虛擬化機制
2011 年初,紅帽的老搭檔 IBM 找上紅帽,表示 KVM 這個東西值得加大力度去做。於是到了 5 月, IBM 和紅帽,聯合惠普和英特爾一起,成立了開放虛擬化聯盟( Open Virtualization Alliance ),一起聲明要提升 KVM 的形象,加速 KVM 投入市場的速度,由此避免 VMware 一家獨大的情況出現。聯盟成立之時,紅帽的發言人表示, 大家都希望除 “ VMware 之外還有一種開源選擇。未來的雲基礎設施一定會基於開源
自 Linux 2.6.20 之后逐步取代 Xen 被集成在Linux 的各個主要發行版本中,使用 Linux 自身的調度器進行管理。
2 、KVM --- 全稱是基於內核的虛擬機(Kernel-based Virtual Machine)
是一個開源軟件,基於內核的虛擬化技術,實際是嵌入系統的一個虛擬化模塊,通過優化內核來使用虛擬技術,該內核模塊使得 Linux 變成了一個Hypervisor,虛擬機使用 Linux 自身的調度器進行管理。
KVM 是基於虛擬化擴展(Intel VT 或者 AMD-V)的 X86 硬件的開源的 Linux 原生的全虛擬化解決方案。KVM 中,虛擬機被實現為常規的 Linux 進程,由標准 Linux 調度程序進行調度;虛機的每個虛擬 CPU 被實現為一個常規的 Linux 進程。這使得 KMV 能夠使用 Linux 內核的已有功能。但是,KVM 本身不執行任何硬件模擬,需要客戶空間程序通過 /dev/kvm 接口設置一個客戶機虛擬服務器的地址空間,向它提供模擬的 I/O,並將它的視頻顯示映射回宿主的顯示屏。目前這個應用程序是 QEMU。
3、Linux 上的用戶空間、內核空間、虛機:
Guest:客戶機系統,包括CPU(vCPU)、內存、驅動(Console、網卡、I/O 設備驅動等),被 KVM 置於一種受限制的 CPU 模式下運行。
KVM:運行在內核空間,提供CPU 和內存的虛級化,以及客戶機的 I/O 攔截。Guest 的 I/O 被 KVM 攔截后,交給 QEMU 處理。
QEMU:修改過的為 KVM 虛機使用的 QEMU 代碼,運行在用戶空間,提供硬件 I/O 虛擬化,通過IOCTL /dev/kvm 設備和 KVM 交互。
4、KVM:
kvm.ko(內核模塊),只用於管理虛擬 CPU 和內存。IO 的虛擬化,就交給 Linux 內核和qemu來實現。
Libvirt:是 KVM 的管理工具。Libvirt 除了能管理 KVM 這種 Hypervisor,還能管理 Xen,VirtualBox 等。OpenStack 底層也使用 Libvirt。
Libvirt 包含 3 個東西:后台 daemon 程序 libvirtd、API 庫和命令行工具 virsh
(1)libvirtd是服務程序,接收和處理 API 請求;
(2)API 庫使得其他人可以開發基於 Libvirt 的高級工具,比如 virt-manager,這是個圖形化的 KVM 管理工具,后面我們也會介紹;
(3)virsh 是我們經常要用的 KVM 命令行工具,后面會有使用的示例。作為 KVM 和 OpenStack 的實施人員,virsh 和 virt-manager 是一定要會用的。
三、虛擬化VT開啟確認
KVM 本身也有一些弱點,那就是相比裸金屬虛擬化架構的 Xen 、 VMware ESX 和 HyperV , KVM 是運行在 Linux 內核之上的寄居式虛擬化架構,會消耗比較多的計算資源;不過針對這一點, Intel 、 AMD 已經在處理器設計上有專門的VT-x 和 AMD-V 擴展,這種特性在每次硬件更新的時候也會更新,往往每次更新后都對虛擬化性能和速度上有明顯的提升,所以長遠來看,也不是什么大問題。
KVM 的虛擬化需要硬件支持(需要處理器支持虛擬化:如 Intel 廠商的 Intel-VT ( vmx )技術&&AMD 廠商的 AMD-V ( svm )技術。是基於硬件的完全虛擬化。而 Xen 早期則是基於軟件模擬的半虛擬化( Para-Virtualization ),新版本則是基於硬件支持的完全虛擬化。但 Xen 本身有自己的進程調度器,存儲管理模塊等,所以代碼較為龐大。
你當前的 CPU 是否支持 VT 技術?當不確定你當前 CPU 是否支持 VT 技術時
1. 可以在 windows 下使用 cpu-z 軟件來進行測試
2. 可以在 Linux 下查看 CPU 的相信信息來確定
** CPU 虛擬化給我們帶來了哪些好處?
CPU 的虛擬化技術可以將單 CPU 模擬多 CPU 並行,允許一個平台同時運行多個操作系統,並且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。
** 虛擬化技術與多任務超線程的技術的區別?(操作系統多對一)
虛擬化技術與多任務以及超線程技術是完全不同的。多任務是指在一個操作系統中多個程序同時並行運行,而在虛擬化技術中,則可以同時運行多個操作系統,而且每一個操作系統中都有多個程序運行,彼此獨立。每一個操作系統都運行在一個虛擬的 CPU 或者是虛擬主機上;而超線程技術只是單 CPU 模擬雙 CPU 來平衡程序運行性能,這兩個模擬出來的 CPU 是不能分離的,只能協同工作
實驗一:將命令行界面改為圖形化界面
之前我們在創建虛擬機的時候,可以根據需求選擇圖形化界面(帶gui的圖形工具)或者直接安裝命令行界面。
但是如果在選擇安裝命令行界面后又想改為圖形化呢。以下步驟:
1) 將yum源中非本地倉庫中的可用包全部放在一個目錄里。
[root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# ls 1.repo haha #將源包放在haha目錄里不被使用 [root@localhost yum.repos.d]# cd haha [root@localhost haha]# ls CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo zabbix.repo
2)將yum本地倉庫中的網絡源備份到其他目錄或者注釋掉。總之不要用。
3)執行yum makecache 緩存元數據
[root@localhost haha]# yum makecache
已加載插件:fastestmirror, langpacks
from cached hostfile
元數據緩存已建立
4)查看可用環境和組信息
[root@localhost haha]# yum grouplist 已加載插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile 已安裝環境分組: 帶 GUI 的服務器 可用的環境分組: 最小安裝 基礎設施服務器 計算節點 文件及打印服務器 基本網頁服務器 虛擬化主機 GNOME 桌面 KDE Plasma Workspaces 開發及生成工作站 可用組: 傳統 UNIX 兼容性 兼容性程序庫 圖形管理工具 安全性工具 開發工具 控制台互聯網工具 智能卡支持 科學記數法支持 系統管理 系統管理工具 完成
5)yum groupinstall '帶 GUI 的服務器' -y
下載過程中可能會報以下錯誤:
這是因為安裝的包與所需的包版本不一致,刪除掉已安裝的沖突的包即可。
yum -y remove 沖突包
6)臨時進入圖形化界面
下載完成后執行 startx
root@localhost haha]# startx xauth: file /root/.serverauth.23809 does not exist X.Org X Server 1.19.3 Release Date: 2017-03-15 X Protocol Version 11, Revision 0 Build Operating System: 3.10.0-514.16.1.el7.x86_64 Current Operating System: Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 Kernel command line: BOOT_IMAGE=/vmlinuz-3.10.0-693.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=zh_CN.UTF-8 Build Date: 05 August 2017 06:19:43AM 。。。 VMware: No 3D enabled (0, Success).
查看虛擬機狀態是否轉變為圖形化界面。
7)退出圖形化界面:ctrl + c 直接退出
8)如果需要永久轉變為圖形化。
執行 systemctl set-default graphical.target
[root@localhost haha]# systemctl set-default anaconda.target hybrid-sleep.target network.target runlevel1.target spice-vdagentd.target basic.target initrd-fs.target nfs-client.target runlevel2.target suspend.target bluetooth.target initrd-root-fs.target nss-lookup.target runlevel3.target swap.target cryptsetup-pre.target initrd-switch-root.target nss-user-lookup.target runlevel4.target sysinit.target cryptsetup.target initrd.target paths.target runlevel5.target system-update.target ctrl-alt-del.target iprutils.target poweroff.target runlevel6.target timers.target default.target kexec.target printer.target shutdown.target time-sync.target emergency.target local-fs-pre.target reboot.target sigpwr.target umount.target final.target local-fs.target remote-fs-pre.target sleep.target virt-guest-shutdown.target getty.target machines.target remote-fs.target slices.target graphical.target multi-user.target rescue.target smartcard.target halt.target network-online.target rpcbind.target sockets.target hibernate.target network-pre.target runlevel0.target sound.target
然后重啟即可。
10)如果又想永久轉為命令行界面怎么辦?
這樣做:
執行 systemctl set-default multi-user.target,再重啟就可以了。
安裝kvm前准備工作
1. 確定處理器有 VT
支持vmx或者svm建立在圖形化界面的前提下,按照上面的設置為圖形化界面后,
再勾選處理器的虛擬化引擎,如果出現不支持虛擬化性能計數器,可以選擇不勾選。
命令行: grep vmx /proc/cpuinfo (INTEL 芯片 )
grep svm /proc/cpuinfo (AMD 芯片 )
cat /proc/cpuinfo | grep -e vmx -e nx -e svm
執行以上命令:
[root@localhost haha]# egrep '(vmx|svm)' /proc/cpuinfo | wc -l
1 #處理器個數大於0就是支持虛擬化,就可以放心做kvm虛擬化安裝了
不知道芯片的生產廠商則輸入:egrep '(vmx|svm)' /proc/cpuinfo
如果 flags: 里有 vmx 或者 svm 就說明支持 VT ;如果沒有任何的輸出,說明你的 cpu 不支持,將無法成功安裝 KVM 虛擬機。
2. 當你硬件本身支持虛擬化,但查詢相應參數無果時,請檢查 BIOS 設定,確認你的 BIOS 中開啟了硬件支持虛擬化的功能!
將如下選項設為Enabled
Intel(R) Virtualization Tech [Enabled]
四、KVM虛擬化安裝
1. 安裝 KVM 要求
(1)64bitCPU( 支持虛擬化 VT-x or AMD-V)
(2)2G 以上空閑內存,確認內存大小
grep -e MemTotal /proc/meminfo
free -m
(3)6GB 空閑存儲空間
2. 安裝 KVM 並檢測
(1)YUM 安裝 KVM
yum install kvm virt-manager libvirt libvirt-python python-virtinst libvirt-client qemu-kvm qemu-img
(2)YUM 安裝 KVM( 簡單版 )
yum install kvm virt-manager libvirt*
(3)如果無法連入互聯網 , 可自行建立源來完成安裝並避免各種關聯。建立一個本地的 YUM 源:
kvm虛擬化所需組件介紹
3. kvm: 核心套件 ***
virt-manager: 圖形化 KVM 管理軟件
libvirt: 提供虛擬機與宿主相互通信的機制
libvirt-python: 允許使用 libvirt API
python-virtinst:CLI 下創建 KVM 的工具
libvirt-client: 提供 client 訪問 kvm 服務器的機制 ,並包含 virsh 命令進行
管理和控制 VMs
qemu-kvm: 提供用戶級 KVM 環境
qemu-img:VMs 磁盤管理
3.啟動 KVM
(1)modprobe kvm #加載 kvm 模塊
(2)lsmod | grep kvm #查看加載成功
(3)systemctl start libvirtd
(4)systemctl status libvirtd
4. 啟動並檢測 KVM
virsh list --all
如出現
Id Name State
-------------------------------------------------------
則安裝成功
5. 在 GUI 模式下安裝虛擬機,啟動虛擬系統管理器
五、KVM網絡模式設置
1. NAT ( 默認上網 ) :虛擬機利用 host 機器的 ip 進行上網 . 對外顯示一個 ip,
virbr0 是 KVM 默認創建的一個 Bridge,其作用是為連接其上的虛機網卡提供 NAT 訪問外網的功能,默認ip為192.168.122.1
2. 自帶的Bridge : 將虛擬機橋接到 host 機器的網卡上 ,vm和 host 機器都通過 bridge 上網 . 對外有同網段的不通 ip,此種方式host卻不能和vm聯通
3. Linux Bridge : 基本原理就是創建一個橋接接口 br0 ,在物理網卡和虛擬網絡接口之間傳遞數據。此種方式host卻可以和vm聯通
Linux Bridge 是 Linux 上用來做 TCP/IP 二層協議交換的設備,其功能大家可以簡單的理解為是一個二層交換機或者 Hub。多個網絡設備可以連接到同一個 Linux
Bridge,當某個設備收到數據包時,Linux Bridge 會將數據轉發給其他設備
(1)添加 br0 網卡的配置文件
cd /etc/sysconfig/network-scripts
cp ifcfg-ens33ifcfg-br0
(2)修改網卡配置文件
Vim ifcfg-eth0
TYPE=Ethernet
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
Vim ifcfg-br0
TYPE=Bridge NAME=br0 DEVICE=br0 ONBOOT=yes BOOTPROTO=static(或者dhcp)
(3)重啟host:reboot或者重啟網卡
(4)檢查
# ethtool br0
# brctl show
# ifconfig br0
[root@localhost ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29e7d62c no ens33 virbr0 8000.5254001b9b1c yes virbr0-nic [root@localhost ~]# ethtool br0 Settings for br0: Link detected: yes
可以看到bro端口為連接狀態。
如果br0上並沒有ip地址轉換,試試以下方法:
1)重新應用下nat
2)再windows上搜索服務,將dhcp改為啟動。
六、生成虛擬機流程
點擊系統工具——虛擬系統管理器——生成新虛擬機(本地介質)——瀏覽鏡像文件——選擇內存——自定義配置——完成
'生成新虛擬機(本地介質)
瀏覽鏡像文件
這就需要上傳鏡像文件到/var/lib/libvir/images/,此目錄也是磁盤文件和鏡像文件的目錄。
選擇內存
自定義配置
勾選自定義配置后就進入此頁面,選擇引導選項,箭頭所指意思是增加啟動時的引導,可不選。
上面勾選了virtio磁盤的選項,這里的原路徑默認為上傳鏡像的同一級目錄。
所以在創建完虛擬機后,再次瀏覽鏡像文件會發現多出一個磁盤文件
IDE選項的原路徑默認為上傳鏡像文件的目錄。
一、如果出現此報錯,
這是因為libvirt負責虛擬機與宿主機的通信
如果網卡配置錯誤或者建立通信的環節出現錯誤的話。
libvit就會運行libvirtd守護進程,這也是一種保護方式。
如果網卡都沒有配置錯誤的話關閉防火牆試試。
確認以上無誤后就可以開始點擊創建虛擬機了!!