CentOS 7.5 安裝KVM虛擬機(jī)(Windows)
一盗舰、KVM環(huán)境搭建
1.檢測系統(tǒng)是否支持
cat /proc/cpuinfo | egrep 'vmx|svm'
KVM是基于x86虛擬化擴(kuò)展(Intel VT 或者 AMD-V)技術(shù)的虛擬機(jī)軟件韩脏,所以查看 CPU 是否支持 VT 技術(shù),就可以判斷是否支持KVM赊锚。
有返回結(jié)果,如果結(jié)果中有vmx(Intel)或svm(AMD)字樣,就說明CPU的支持的叶摄。
2.關(guān)閉SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
3.安裝KVM環(huán)境
安裝kvm基礎(chǔ)包
yum -y install kvm
安裝kvm核心包--虛擬操作系統(tǒng)模擬器加速模塊
yum -y install qemu-kvm qemu-kvm-tools
安裝kvm管理工具
yum -y install libvirt python-virtinst libvirt-python virt-manager libguestfs-tools bridge-utils virt-install
libvirt:必須要裝的核心工具
virt-manager:虛擬機(jī)圖形管理工具(宿主機(jī)有桌面環(huán)境時可以考慮安裝,命令操作或者遠(yuǎn)程控制則不需要)
bridge-utils:虛擬機(jī)與外界通信的命令管理工具
virt-install:虛擬機(jī)安裝工具
pyhon-virtinst: 包含python模塊和工具(virt-install碗淌,virt-clone和virt-image)
重啟宿主機(jī)盏求,加載kvm相關(guān)模塊
shutdown -r now
查看kvm模塊是否被正確加載
lsmod | grep kvm
出現(xiàn)以下信息則表示正確加載
kvm_intel 162153 0
kvm 525259 1 kvm_intel
irqbypass 13503 1 kvm
開啟kvm服務(wù)抖锥,并設(shè)置開機(jī)啟動
systemctl start libvirtd.service
systemctl enable libvirtd.service
查看操作結(jié)果,出現(xiàn)Active:active(running)字樣則說明運行情況良好
systemctl status libvirtd
systemctl is-enabled libvirtd
二碎罚、網(wǎng)橋搭建
如果是在局域網(wǎng)內(nèi)安裝kvm虛擬機(jī)磅废,為了方便連接和維護(hù)管理,kvm虛擬機(jī)的網(wǎng)絡(luò)模式我們建議使用Bridge模式(另外還有NAT模式)荆烈,這樣kvm虛擬機(jī)和宿主機(jī)就處在同一個網(wǎng)段拯勉,局域網(wǎng)內(nèi)其它主機(jī)就直接連接
1.查看宿主機(jī)網(wǎng)卡信息
ip a 或者 ifconfig a
一般物理網(wǎng)卡名稱為eth0、eth1或ens開頭的等等憔购,我本機(jī)上的就是ens33
復(fù)制ens33網(wǎng)卡配置文件到br0文件
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-br0
2.宿主機(jī)物理網(wǎng)卡配置
vim ifcfg-ens33
內(nèi)容參考如下:
TYPE=Ethernet #TYPE必須為Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
#BOOTPROTO=dhcp
#DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=5169b9de-3b6a-425e-8f92-3c74e1e8d97d
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0 #在原來的ifcfg-ens33配置文件中必須添加的(這塊網(wǎng)卡橋接到br0設(shè)備上)
NM_CONTROLLED=no #是否由NetworkManger服務(wù)控制該網(wǎng)絡(luò)接口宫峦,修改后立即生效,無需重啟玫鸟,一般設(shè)置成no
# 因為要設(shè)置橋接导绷,這幾項IP地址等原來的配置信息必須關(guān)閉,在br0配置文件中再設(shè)置
#IPADDR=192.168.0.9
#NETMASK=255.255.255.0
#GATEWAY=192.168.0.1
#DNS1=114.114.114.114
#DNS2=8.8.8.8
#PREFIX=24
3.橋接網(wǎng)卡配置
vim ifcfg-br0
內(nèi)容參考如下:
TYPE=Bridge #TYPE必須為Bridge
DEVICE=br0
NAME=br0
BOOTPROTO=static
DEFROUTE=yes #是否使用默認(rèn)路由
PEERDNS=no #是否指定DNS屎飘,如果使用DHCP協(xié)議妥曲,默認(rèn)為yes
PEERROUTES=no #是否指定路由
ONBOOT=yes
DELAY=0
NM_CONTROLLED=no #同樣設(shè)置為no,不讓NetworkManager服務(wù)管理br0網(wǎng)卡
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_DEFROUTE=yes
IPV6_AUTOCONF=yes
IPV6_FAILURE_FATAL=no
IPADDR=192.168.0.9
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=114.114.114.114
DNS2=8.8.8.8
PREFIX=24
4.查看設(shè)置結(jié)果
關(guān)閉NetworkManager服務(wù)钦购,也可以用service stop NetworkManager檐盟,systemctl是現(xiàn)在linux發(fā)行版通用的服務(wù)管理工具,CentOS中使用service命令會自動調(diào)用systemctl工具
systemctl stop NetworkManager.service
重啟網(wǎng)絡(luò)服務(wù)押桃,如果重啟不成功葵萎,一般是ens33和br0配置文件中配置項沖突造成的
systemctl restart network.service
查看網(wǎng)絡(luò)配置是否正確,可以ip a查看是否ens33和br0信息怨规,推薦使用brctl show命令陌宿,如果提示沒有brctl命令,yum -y install bridge-utils安裝
brctl show
如果結(jié)果中出現(xiàn)類似下面的信息波丰,則表明橋接初步設(shè)置成功,主要是第一項壳坪,第二項,第四項掰烟,常見的情況是第四項為空爽蝴,原因是物理網(wǎng)卡配置文件中Bridge=br0這一項缺少
三、VNC環(huán)境搭建
1.安裝vnc服務(wù)
yum -y install tigervnc tigervnc-server
2.vnc服務(wù)配置——宿主機(jī)遠(yuǎn)程控制
配置vnc
將/lib/systemd/system/vncserver@.service文件復(fù)制一份到/etc/systemd/system/目錄
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
編輯剛剛復(fù)制得到的文件纫骑,將文件中的<USER>修改為VNC Client(或者VNC Viewer)連接的賬號蝎亚,我只設(shè)置一個用戶root,多用戶再增加對應(yīng)的vncserver@:2.service文件即可
vim /etc/systemd/system/vncserver@:1.service
修改以后的文件部分內(nèi)容(只修改文件下半部分)
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
User=root
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l root -c "/usr/bin/vncserver %i"
#ExecStart=/usr/sbin/runuser -l root -c "/usr/bin/vncserver :1 -geometry 1280*720 -depth 24"
PIDFile=/root/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
設(shè)置vnc連接密碼,輸入命令vncpasswd以后連續(xù)輸入兩次密碼先馆,然后直接連續(xù)回車
vncpasswd
啟動vncserver@:1.service并設(shè)置開機(jī)啟動
systemctl start vncserver@:1.service
systemctl enable vncserver@:1.service
設(shè)置防火墻(VNC默認(rèn)是被防火墻阻止的)
firewall-cmd --permanent --add-service="vnc-server" --zone="public"
firewall-cmd --reload
啟動VNC服務(wù)
vncserver
會出現(xiàn)以下信息:其中說明VNC客戶端連接賬號為root发框,端口號為5901
New 'dev:1 (root)' desktop is dev:1
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/dev:1.log
測試
3.vnc服務(wù)配置——虛擬機(jī)遠(yuǎn)程控制
上面是VNC連接主機(jī)的VNC服務(wù)時設(shè)置的情況,如果是要遠(yuǎn)程連接主機(jī)安裝虛擬機(jī)煤墙,可以不進(jìn)行上面的設(shè)置梅惯,安裝虛擬機(jī)的時候用主機(jī)ip宪拥,端口號5900(默認(rèn),可以進(jìn)行設(shè)置铣减,后面會說到)她君,有權(quán)限的賬號密碼都可以連接。
這里也有一個坑:5900是VNC里面遠(yuǎn)程連接虛擬機(jī)用的端口(安裝和安裝好以后都用這個端口)葫哗,能遠(yuǎn)程操作安裝過程缔刹;5901,5902等端口是VNC中設(shè)置的遠(yuǎn)程連接主機(jī)的端口號劣针,這里要做好區(qū)分校镐。
還有一種用virt-manager虛擬機(jī)圖形管理的方式安裝虛擬機(jī),這里有個前提酿秸,主機(jī)必須安裝好GNOME等桌面環(huán)境灭翔,CentOS中安裝有點復(fù)雜,很難安裝成功(踩過的第一個坑)辣苏,個人覺得還是用VNC的方式安裝比較好肝箱,服務(wù)器安裝桌面環(huán)境多少有點累贅。
四稀蟋、虛擬機(jī)安裝
這一步操作需要注意的幾個點:
a煌张、局域網(wǎng)內(nèi)與主機(jī)傳輸文件用scp或ftp命令,要保證ISO鏡像文件在主機(jī)上有操作權(quán)限的目錄下退客,比如 /home等骏融;
b、不管安裝什么系統(tǒng)的虛擬機(jī)萌狂,創(chuàng)建的磁盤類型档玻,分配的虛擬內(nèi)存等參數(shù)可能有所不同,但有幾個參數(shù)必須要正確對應(yīng)茫藏,否則安裝不成功误趴。需要注意的幾個參數(shù):
--disk
--cdrom或者--location
--cpu ( 這個必須和主機(jī)的cpu型號一直 )
--network ( 首先要確定需要安裝虛擬機(jī)網(wǎng)絡(luò)的類型,是Bridge模式還是NAT模式 )
--graphics
--os-type
1.創(chuàng)建磁盤(kvm虛擬機(jī)的磁盤總大形癜痢)
創(chuàng)建類型為raw的磁盤,還有另外兩種格式img和qcow2
qemu-img create -f raw /data/vms/win2012.raw 40G
檢查磁盤是否創(chuàng)建成功
qemu-img info /data/vms/win2012.raw
看到類似以下信息表明磁盤創(chuàng)建成功
編輯/etc/libvirt/qemu.conf更改如下參數(shù)凉当。
user = “root”
group = “root”
dynamic_ownership = 0
重啟libvirtd服務(wù):
service libvirtd restart
2.使用virt-install命令以及VNC遠(yuǎn)程控制安裝虛擬機(jī)
Windows系統(tǒng)安裝
virt-install \
--virt-type kvm \
--name win2012 \
--ram 4096 \
--cdrom=/root/Windows_Server_2012_R2_x64_CN_2019.07.iso \
--boot cdrom \
--vcpu 2 \
--network bridge=br0,model='e1000' \
--graphics vnc,listen=0.0.0.0,port=5900 \
--disk path=/data/vms/win2012.raw,bus='ide' \
--noautoconsole \
--os-type=windows
執(zhí)行上述命令后,虛擬機(jī)安裝并未結(jié)束售葡,接下來用上面配置的VNC連接主機(jī)進(jìn)行后續(xù)操作
此時如果virt-install命令參數(shù)沒有問題看杭,會有提示信息:
開始安裝......
域安裝仍在進(jìn)行,您可以重新連接
到控制臺(virsh console)以便完成安裝進(jìn)程
執(zhí)行以后只看到提示連接成功挟伙,其他沒有變化楼雹,所以不用執(zhí)行這個命令,暫時沒發(fā)現(xiàn)有什么用處
局域網(wǎng)內(nèi)的任意一臺同網(wǎng)段的電腦通過vnc client或者vnc viewer連接虛擬機(jī)
CentOS系統(tǒng)安裝
virt-install \
--virt-type=kvm \
--name=centos7 \
--vcpus=2 \
--memory=2048 \
--location=/home/CentOS-7-x86_64-Minimal-1804.iso \
--disk path=/data/vms/centos7.qcow2,size=20,format=qcow2 \
--network bridge=br0 \
--graphics none \
--extra-args='console=ttyS0' \
--force
使用--graphics none說明安裝過程不使用圖形化的交互方式,直接在命令行終端操作安裝即可
在命令行終端安裝完畢后會提示回車?yán)^續(xù)烘豹,回車后虛擬機(jī)就會啟動并進(jìn)入到登陸界面
3.virt-install常用參數(shù)說明
舊版本的寫法
–name 指定虛擬機(jī)名稱
–memory 分配內(nèi)存大小瓜贾。
–vcpus 分配CPU核心數(shù),最大與實體機(jī)CPU核心數(shù)相同
–disk 指定虛擬機(jī)鏡像携悯,size指定分配大小單位為G。
–network 網(wǎng)絡(luò)類型筷笨,此處用的是默認(rèn)憔鬼,一般用的應(yīng)該是bridge橋接。
–accelerate 加速
–cdrom 指定安裝鏡像iso
–vnc 啟用VNC遠(yuǎn)程管理胃夏,一般安裝系統(tǒng)都要啟用轴或。
–vncport 指定VNC監(jiān)控端口,默認(rèn)端口為5900仰禀,端口不能重復(fù)照雁。
–vnclisten 指定VNC綁定IP,默認(rèn)綁定127.0.0.1答恶,這里改為0.0.0.0饺蚊。
–os-type=linux,windows
–os-variant=rhel6
新版本的寫法
--name 指定虛擬機(jī)名稱
--ram 虛擬機(jī)內(nèi)存大小,以 MB 為單位
--vcpus 分配CPU核心數(shù)悬嗓,最大與實體機(jī)CPU核心數(shù)相同
--vnc 啟用VNC遠(yuǎn)程管理污呼,一般安裝系統(tǒng)都要啟用。
--vncport 指定VNC監(jiān)控端口包竹,默認(rèn)端口為5900燕酷,端口不能重復(fù)。
--vnclisten 指定VNC綁定IP周瞎,默認(rèn)綁定127.0.0.1苗缩,這里改為0.0.0.0。
--network 虛擬機(jī)網(wǎng)絡(luò)配置
其中子選項声诸,bridge=br0 指定橋接網(wǎng)卡的名稱酱讶。
--os-type=linux,windows
--os-variant=rhel7.2
--disk 指定虛擬機(jī)的磁盤存儲位置
size,初始磁盤大小双絮,以 GB 為單位浴麻。
--location 指定安裝介質(zhì)路徑,如光盤鏡像的文件路徑囤攀。
--graphics 圖形化顯示配置
全新安裝虛擬機(jī)過程中可能會有很多交互操作软免,比如設(shè)置語言,初始化 root 密碼等等焚挠。
graphics 選項的作用就是配置圖形化的交互方式膏萧,可以使用 vnc(一種遠(yuǎn)程桌面軟件)進(jìn)行鏈接。
我們這列使用命令行的方式安裝,所以這里要設(shè)置為 none榛泛,但要通過 --extra-args 選項指定終端信息蝌蹂,
這樣才能將安裝過程中的交互信息輸出到當(dāng)前控制臺。
--extra-args 根據(jù)不同的安裝方式設(shè)置不同的額外選項
五曹锨、VNC端口說明
Linux下的VNC可以同時啟動多個vncserver孤个,各個vncserver之間用顯示編號(display number)來區(qū)分,每個vncserver服務(wù)監(jiān)聽3個端口沛简,它們分別是:
5800+顯示編號: VNC的httpd監(jiān)聽端口齐鲤,如果VNC客戶端為IE,Firefox等非vncviewer時必須開放。
5900+顯示編號: VNC服務(wù)端與客戶端通信的真正端口椒楣,必須無條件開放给郊。
6000+顯示編號: X監(jiān)聽端口,可選捧灰。
顯示編號淆九、開放的端口分別由/etc/sysconfig/vncservers文件中的VNCSERVERS和VNCSERVERARGS控制。
VNCSERVERS="顯示編號1:用戶名1 …"
如:
VNCSERVERS="1:root 2:aiezu
VNCSERVERARGS的設(shè)置方式為:
VNCSERVERARGS[顯示編號1]="參數(shù)一 參數(shù)值一 參數(shù)二 參數(shù)值二 ……"
如:
VNCSERVERARGS[2]="-geometry 800x600 -nohttpd"
VNCSERVERARGS的詳細(xì)參數(shù)有:
-geometry 桌面分辨率,默認(rèn)1024x768毛俏;
-nohttpd 不監(jiān)聽HTTP端口(58xx端口)炭庙;
-nolisten tcp 不監(jiān)聽X端口(60xx端口);
-localhost 只允許從本機(jī)訪問拧抖;
-AlwaysShared 默認(rèn)只同時允許一個vncviewer連接煤搜,此參數(shù)允許同時連多個vncviewer;
#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
startkde &
# gnome-session &
配置完各個用戶根目錄下的".vnc/xstartup"后唧席,執(zhí)行service vncserver restart 重新啟動vncserver使配置生效擦盾。
VNCSERVERS的設(shè)置方式為:
-SecurityTypes None 登錄不需要密碼認(rèn)證VncAuth默認(rèn)值,要密碼認(rèn)證。
VNC Server的默認(rèn)設(shè)置下淌哟,客戶端連接時啟動的是xterm迹卢,如果想看到桌面,必須將用戶根目錄下的".vnc/xstartup"文件中的最后兩行注釋掉徒仓,然后根據(jù)你安裝的桌面壞境腐碱,添加一行"startkde &"或者"gnome-session &"。
六掉弛、kvm命令解釋
virsh list –all
查看虛擬機(jī)和狀態(tài)
virsh start test
啟動該虛擬機(jī)
virsh reboot test
重啟虛擬機(jī)
virsh suspend test
虛擬機(jī)處于paused暫停狀態(tài),一般情況下是被admin運行了virsh suspend才會處于這種狀態(tài),但是仍然消耗資源,只不過不被超級管理程序調(diào)度而已症见。
virsh resume test
把虛擬機(jī)喚醒,使其恢復(fù)到running狀態(tài)
virsh shutdown test
關(guān)閉指令殃饿,是虛擬機(jī)進(jìn)入shutoff狀態(tài)谋作,系統(tǒng)提示虛擬機(jī)正在被關(guān)閉,卻未必能成功
virsh destroy test
強(qiáng)制關(guān)閉該虛擬機(jī)乎芳,但并非真的銷毀該虛擬機(jī)遵蚜,只是關(guān)閉而已帖池。
virsh save test a
將該虛擬機(jī)的運行狀態(tài)存儲到文件a中
virsh restore a
根據(jù)文件a恢復(fù)被存儲狀態(tài)的虛擬機(jī)的狀態(tài),即便虛擬機(jī)被刪除也可以恢復(fù)(如果虛擬機(jī)已經(jīng)被undefine移除吭净,那么恢復(fù)的虛擬機(jī)也只是一個臨時的狀態(tài)睡汹,關(guān)閉后自動消失)
virsh undefine test
移除虛擬機(jī),虛擬機(jī)處于關(guān)閉狀態(tài)后還可以啟動寂殉,但是被該指令刪除后不能啟動囚巴。在虛擬機(jī)處于Running狀態(tài)時,調(diào)用該指令不撑,該指令暫時不生效文兢,但是當(dāng)虛擬機(jī)被關(guān)閉后,該指令生效移除該虛擬機(jī)焕檬,也可以在該指令生效之前調(diào)用define+TestKVM.xml取消該指令
virsh edit test
修改TestKVM的配置文件,效果等于先dumpxml得到配置文件澳泵,然后vi xml实愚,最后后define該xml文件(建議關(guān)機(jī)修改,修改完virsh define防止不生效)
virt-clone -o test -n test01 –file /data/test01.img
在-o后面為被克隆虛擬機(jī)名稱兔辅,-n后克隆所得虛擬機(jī)名稱腊敲,file為克隆所得虛擬機(jī)鏡像存放地址∥Γ克隆的好處在于碰辅,假如一個虛擬機(jī)上安裝了操作系統(tǒng)和一些軟件,那么從他克隆所得的虛擬機(jī)也有一樣的系統(tǒng)和軟件介时,大大節(jié)約了時間没宾。