雖然網上已經有很多關於kvm安裝的教程了,但我還是看得頭暈,有的教程里安裝的包很多,有的很少,也沒說明那些安裝包的作用是幹嘛的,用的命令也不一樣,也沒解釋命令的意思是什麼。 我重新寫一個教程,儘量通俗易懂點,也是給增強我的記憶。 這裡提示下,Hyper-v就是一個大坑!本來我是用Hyper-v來學習 ...
雖然網上已經有很多關於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/
主要步驟:
- 開啟嵌套虛擬功能(如果你不是用虛擬機的話,這步就不用)
- 安裝kvm工具包
- 設置橋接網卡(如果是用Nat的,這步不用)
- 創建第一個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刷新
- 語言設置
- 時區設置
- 安裝源
- 軟體選擇
- 安裝位置
- Kdump
- 網路配置
- Root密碼
- 用戶設置
那我們需要對那些!的配置項進行設置,或者修改原來設置,先修改第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後就一切正常。