1. 程式人生 > >VMware下的Centos7實踐Kvm虛擬化(通俗易懂)

VMware下的Centos7實踐Kvm虛擬化(通俗易懂)

雖然網上已經有很多關於kvm安裝的教程了,但我還是看得頭暈,有的教程裡安裝的包很多,有的很少,也沒說明那些安裝包的作用是幹嘛的,用的命令也不一樣,也沒解釋命令的意思是什麼。

 我重新寫一個教程,儘量通俗易懂點,也是給增強我的記憶。

這裡提示下,Hyper-v就是一個大坑!本來我是用Hyper-v來學習這個Kvm虛擬化的,我建立的宿主虛擬機器可以連外網,宿主機裡建立的kvm虛擬機器是用橋接網路,但無論怎樣設定都連線不了外網,kvm的虛擬機器可以ping得通宿主機,宿主機也能ping得通kvm的虛擬機器,宿主機可以ping得通外網,但就是kvm的虛擬機器ping不通外網,但害我查了一整天,後面無奈用回VMware後,網路全都正常。

而且用Hyper-v,明顯我的電腦記憶體佔好多,每次啟動,還要等半天的什麼合併檢查點,還不能連線U盤。

 

準備工作:一臺能上網的Centos7虛擬機器,VncViewer(這是在window執行的,到時可以連線虛擬機器),XShell(遠端ssh工具),XFtp(上傳安裝包)

VncViewer下載地址:https://www.realvnc.com/en/connect/download/viewer/

XShell、XFtp下載地址:https://www.netsarang.com/zh/free-for-home-school/

主要步驟:

  1. 開啟巢狀虛擬功能(如果你不是用虛擬機器的話,這步就不用)
  2. 安裝kvm工具包
  3. 設定橋接網絡卡(如果是用Nat的,這步不用)
  4. 建立第一個kvm虛擬機器(安裝方式分控制檯安裝及遠端圖形化安裝)

 


 

1、開啟巢狀虛擬功能

一開始我是在hyper-v的虛擬機器上安裝的,hyper-v比vmware麻煩點,得用以下命令操作

#以下命令不區分大小寫
Get-VM    #獲取全部虛擬機器
Get-VMProcessor -VMName xxx | fl    #檢視虛擬機器屬性,ExposeVirtualizationExtensions屬性代表是否開啟巢狀虛擬化
Set-VMProcessor -ExposeVirtualizationExtensions $true -VMName xxx    #開啟巢狀虛擬化,得先把虛擬機器關機,不然會出錯

 

 

後面改用VMware就簡單多了,如下圖,把紅圈裡兩個複選框勾上就行了,虛擬機器得先關機才能修改

 

 開啟虛擬機器,輸入以下命令,檢視是否支援虛擬化,如果沒上面的操作是肯定沒有的

cat /proc/cpuinfo | egrep "vmx|svm"

 


 

2、安裝kvm工具包

我看網上好多教程安裝的包很多,但又沒說明各個包是幹什麼的,原諒我有點強迫症,我必須得了解每個包作用到底是幹什麼的

但經我測試後,最終發現只需安裝三個包,分別是libvirt、qemu-kvm、virt-install(網上寫的一些其它的包,如libvirt-python、libvirt-client、qemu-img,其實在安裝這3個包時也會順帶安裝了)。

我的理解:kvm只是linux一個功能,但linux沒有提供任何方便我們去使用它的命令,所以需要安裝一些工具,而libvirt、qemu-kvm、virt-install都是工具包,qemu-kvm提供一些qemu開頭的命令(這個不安裝會提供錯誤主機不支援任意虛擬化選項),libvirt提供一個服務(libvirtd)和其它virsh管理命令,virt-install提供安裝管理虛擬機器的命令

yum -y install qemu-kvm libvirt virt-install

因為我的是命令列管理,不在虛擬機器上用圖形化管理,所以只需這三個包,因為要在虛擬機器上圖形管理,還得安裝個XWindows,我覺得生產環境應該也沒人去裝個圖形管理。

 

還有一個包bridge-utils,這是用來管理橋接網絡卡的,這個我裝libvirt包時也順帶裝了,如果你的沒包裝,就安裝一下

yum -y install bridge-untils

 


 

3、設定橋接網絡卡

 經常玩虛擬機器的都知道有兩種試,一種是Nat,一種是橋接,

Nat就好比宿主機(就是安裝kvm虛擬化的主機)是臺路由器,虛擬機器是連線路由器下面的電腦,跟宿主機同個網段的電腦是訪問不了虛擬機器的,要訪問的話,就得在宿主機上設定埠對映。

而橋接就是把宿主機的物理網絡卡當做一個交換機,虛擬機器直接連線交換機,那就跟宿主機是同一個網段的了,可以被其它電腦訪問到,一般做服務虛擬化都是用橋接模式。

 先切換到網絡卡目錄,然後把原來的網絡卡檔案複製一份,名稱為ifcfg-br0,命令如下

cd /etc/sysconfig/network-scripts
cp ifcfg-ens33 ifcfg-br0  #你的不一定是ifcfg-ens33,我開始用hyper-v時,介面是叫eth0

然後修改ifcfg-br0的配置,如下

 

修改ifcfg-ens33,主要是新增加一行,如下所示,如果你的本來是靜態IP的話,就把靜態IP的配置註釋掉,只保留在br0就行了

然後重啟下網路服務

systemctl restart NetworkManager
systemctl restart network

 然後檢視下網橋介面

brctl show

這個圖是我在後面補的,紅圈的是在啟動虛擬機器後才有的,你如果按部落格順序的話,現在應該是看不到這個紅圈的vnet0的,等你把虛擬機器啟動後,再檢視就看到這個vnet0,這表示vnet0也撟接在br0下面

 


 

 4、建立第一個kvm虛擬機器

 這個就需要用到之前安裝的包virt-install了,我先把命令主要引數列出來

#virt-install引數
--name=xxx                            #虛擬機器唯一名稱
--memory=1024[,maxmemory=2048]        #虛擬機器記憶體,單位為mb --memory=1024,maxmemory=2048
--vcpus=1[,maxvcpus=4]                #虛擬機器CPU數量
--cdrom=/xxx/xxx                     #指定安裝原始檔
--location=/xxx/xxx                    #指定安裝原始檔,跟--cdrom二選一,如果要用控制檯安裝得用這個,配合--extra-args引數
--disk path=/xx/xxx[,size=10,format=raw] #儲存檔案及格式
--graphics vnc,port=xxx,listen=xxx     #圖形化引數,不用圖形化用--graphics none --extra-args="console=ttyS0"
--network bridge=br0              #網路連線方式
--os-variant=xxx               #對應的系統值,可以osinfo-query os這個查對應值
--virt-type=kvm                   #虛擬機器型別
--noautoconsole                #不自動連線,預設是安裝時用virt-viewer或者virsh console去連線虛擬機器

 把管理虛擬機器的命令也寫一下

virsh list --all    #檢視所有虛擬機器,加all列出關機狀態的
virsh console xxx    #以控制元件臺連線到指定虛擬機器
virsh start xxx        #啟動虛擬機器
virsh shutdown xxx    #關閉虛擬機器,一般關不了
virsh destroy xxx    #強制關閉虛擬機器
virsh autostart xxx    #設定虛擬機器隨機啟動
virsh undefine xxx    #刪除虛擬機器,只會刪除對應的xml,硬碟檔案不會刪除
virsh autostart xxx    #設定虛擬機器自動啟動

 

4.1、利用VncViewer遠端圖形化安裝的方式

virt-install主要引數--graphics vnc,port=5901,listen=xxx

原理就是用virt-install命令安裝時,在宿主機上開啟一個vnc埠5901,然後用VncViewer程式連線宿主機的5901埠,跟平時圖形化安裝一樣了。

推薦用Xshell連線,因為可以方便地複製命令,再裝個XFtp上傳iso檔案到/data/iso目錄裡

 建立所需目錄

mkdir -p /data/iso /data/vm

把安裝檔案上傳到/data/iso後,用Xshell連線後,複製以下命令,回車(以下命令的斜槓,只是為了好看分行,不是必要的)

virt-install --name=c7 \
--memory=1024 --vcpus=1 \
--cdrom=/data/iso/CentOS-7-x86_64-Minimal-1810.iso \
--disk path=/data/vm/c7.qcow2,size=10,format=qcow2 \
--network bridge=br0 --virt-type=kvm --os-variant=centos7.0 \
--graphics vnc,listen=0.0.0.0,port=5900 \
--noautoconsole

看到以上提示,就可以用VncViewer來連線了,對了,得先把防火牆服務給關了

systemctl stop firewalld  #關閉防火牆服務
systemctl --zone=public --add-ports=5900/tcp --permanent    #或者用這個開放5900埠

 在vncViewer上輸入ip跟埠號

然後就可以圖形化安裝了,非常方便。

 

 4.2、用控制檯安裝的方式

virt-install主要引數--location跟--extra-args配合,不用--cdrom引數,複製以下命令,回車

virt-install \
--name=c7-2 \
--memory=1024 \
--vcpus=1 \
--location=/data/iso/CentOS-7-x86_64-Minimal-1810.iso \
--disk path=/data/vm/c7-2.qcow2,size=5,format=qcow2 \
--network bridge=br0 \
--virt-type=kvm \
--os-variant=centos7.0 \
--graphics none \
--extra-args 'console=ttyS0'

 

接著就會進入控制檯安裝介面,如下圖所示

 

可能還有些人沒在控制檯安裝過centos7,那我簡單說下

觀察這個,這些可以對應我上面的那個圖形化安裝的圖,注意紅圈,打X的就是已經設定好了,!的代表還沒設定,需要進行配置,輸入q退出安裝,輸入b開始安裝,輸入r重新整理

  1. 語言設定
  2. 時區設定
  3. 安裝源
  4. 軟體選擇
  5. 安裝位置
  6. Kdump
  7. 網路配置
  8. Root密碼
  9. 使用者設定

那我們需要對那些!的配置項進行設定,或者修改原來設定,先修改第1項,語言設定,輸入1回車,會顯示下圖,找到我們的中文,輸入68,回車

 

然後輸入1,簡體中文,回車

 

會回到主介面,你會看到第1項已經變了,變成簡體中文了

 

 

再配置時區,輸入2,回車,然後輸入1(Set timezone),然後輸入2(Asia亞洲),然後輸入64(Shanhai上海)

 

回到主介面,發現第2項已改變了

 

 

接著再設定安裝位置,輸入5,回車,如下圖,看到硬碟前面已經是X,說明已經選擇了,直接輸入c繼續就好了

 

這裡不太懂,我預設,輸入c繼續

 

還是保持預設LVM,輸入c繼續

 

會回到主介面,發現安裝位置也改變了,那最後來設定下Root密碼,輸入8,回車

 

重複輸入兩次root密碼

 

 

回到主介面,發現沒有!號了,那輸入b就可以進行安裝了,你會發現其實控制檯安裝跟圖形化安裝也是差不多的。

 

安裝好後啟用下網絡卡,就可以正常連線外網的,我一開始是用Hyper-v,導致虛擬機器一直連不了外網,以為哪裡配置不對,用回VMware後就一切正