一、KVM環境搭建
1.檢測系統是否支持
cat /proc/cpuinfo | egrep 'vmx|svm'
KVM是基於x86虛擬化擴展(Intel VT 或者 AMD-V)技術的虛擬機軟件,所以查看 CPU 是否支持 VT 技術,就可以判斷是否支持KVM。
有返回結果,如果結果中有vmx(Intel)或svm(AMD)字樣,就說明CPU的支持的。
2.關閉SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
3.安裝KVM環境
安裝kvm基礎包
yum -y install kvm
安裝kvm核心包--虛擬操作系統模擬器加速模塊
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:虛擬機圖形管理工具(宿主機有桌面環境時可以考慮安裝,命令操作或者遠程控制則不需要)
bridge-utils:虛擬機與外界通信的命令管理工具
virt-install:虛擬機安裝工具
pyhon-virtinst: 包含python模塊和工具(virt-install,virt-clone和virt-image)
重啟宿主機,加載kvm相關模塊
shutdown -r now
查看kvm模塊是否被正確加載
lsmod | grep kvm
出現以下信息則表示正確加載
kvm_intel 162153 0
kvm 525259 1 kvm_intel
irqbypass 13503 1 kvm
開啟kvm服務,並設置開機啟動
systemctl start libvirtd.service
systemctl enable libvirtd.service
查看操作結果,出現Active:active(running)字樣則說明運行情況良好
systemctl status libvirtd
systemctl is-enabled libvirtd
二、網橋搭建
如果是在局域網內安裝kvm虛擬機,為了方便連接和維護管理,kvm虛擬機的網絡模式我們建議使用Bridge模式(另外還有NAT模式),這樣kvm虛擬機和宿主機就處在同一個網段,局域網內其它主機就直接連接
1.查看宿主機網卡信息
ip a 或者 ifconfig a
一般物理網卡名稱為eth0、eth1或ens開頭的等等,我本機上的就是ens33
復制ens33網卡配置文件到br0文件
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-br0
2.宿主機物理網卡配置
vim ifcfg-ens33
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配置文件中必須添加的(這塊網卡橋接到br0設備上) NM_CONTROLLED=no #是否由NetworkManger服務控制該網絡接口,修改后立即生效,無需重啟,一般設置成no # 因為要設置橋接,這幾項IP地址等原來的配置信息必須關閉,在br0配置文件中再設置 #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.橋接網卡配置
vim ifcfg-br0
TYPE=Bridge #TYPE必須為Bridge DEVICE=br0 NAME=br0 BOOTPROTO=static DEFROUTE=yes #是否使用默認路由 PEERDNS=no #是否指定DNS,如果使用DHCP協議,默認為yes PEERROUTES=no #是否指定路由 ONBOOT=yes DELAY=0 NM_CONTROLLED=no #同樣設置為no,不讓NetworkManager服務管理br0網卡 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.查看設置結果
關閉NetworkManager服務,也可以用service stop NetworkManager,systemctl是現在linux發行版通用的服務管理工具,CentOS中使用service命令會自動調用systemctl工具
systemctl stop NetworkManager.service
重啟網絡服務,如果重啟不成功,一般是ens33和br0配置文件中配置項沖突造成的
systemctl restart network.service
查看網絡配置是否正確,可以ip a查看是否ens33和br0信息,推薦使用brctl show命令,如果提示沒有brctl命令,yum -y install bridge-utils安裝
brctl show
如果結果中出現類似下面的信息,則表明橋接初步設置成功,主要是第一項,第二項,第四項,常見的情況是第四項為空,原因是物理網卡配置文件中Bridge=br0這一項缺少
三、VNC環境搭建
1.安裝vnc服務
yum -y install tigervnc tigervnc-server
2.vnc服務配置——宿主機遠程控制
配置vnc
將/lib/systemd/system/vncserver@.service文件復制一份到/etc/systemd/system/目錄
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
編輯剛剛復制得到的文件,將文件中的<USER>修改為VNC Client(或者VNC Viewer)連接的賬號,我只設置一個用戶root,多用戶再增加對應的vncserver@:2.service文件即可
vim /etc/systemd/system/vncserver@:1.service
修改以后的文件部分內容(只修改文件下半部分)
[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
設置vnc連接密碼,輸入命令vncpasswd以后連續輸入兩次密碼,然后直接連續回車
vncpasswd
啟動vncserver@:1.service並設置開機啟動
systemctl start vncserver@:1.service
systemctl enable vncserver@:1.service
設置防火牆(VNC默認是被防火牆阻止的)
firewall-cmd --permanent --add-service="vnc-server" --zone="public"
firewall-cmd --reload
啟動VNC服務
vncserver
會出現以下信息:其中說明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服務配置——虛擬機遠程控制
上面是VNC連接主機的VNC服務時設置的情況,如果是要遠程連接主機安裝虛擬機,可以不進行上面的設置,安裝虛擬機的時候用主機ip,端口號5900(默認,可以進行設置,后面會說到),有權限的賬號密碼都可以連接。
這里也有一個坑:5900是VNC里面遠程連接虛擬機用的端口(安裝和安裝好以后都用這個端口),能遠程操作安裝過程;5901,5902等端口是VNC中設置的遠程連接主機的端口號,這里要做好區分。
還有一種用virt-manager虛擬機圖形管理的方式安裝虛擬機,這里有個前提,主機必須安裝好GNOME等桌面環境,CentOS中安裝有點復雜,很難安裝成功(踩過的第一個坑),個人覺得還是用VNC的方式安裝比較好,服務器安裝桌面環境多少有點累贅。
四、虛擬機安裝
這一步操作需要注意的幾個點:
a、局域網內與主機傳輸文件用scp或ftp命令,要保證ISO鏡像文件在主機上有操作權限的目錄下,比如 /home等;
b、不管安裝什么系統的虛擬機,創建的磁盤類型,分配的虛擬內存等參數可能有所不同,但有幾個參數必須要正確對應,否則安裝不成功。需要注意的幾個參數:
--disk
--cdrom或者--location
--cpu ( 這個必須和主機的cpu型號一直 )
--network ( 首先要確定需要安裝虛擬機網絡的類型,是Bridge模式還是NAT模式 )
--graphics
--os-type
1.創建磁盤(kvm虛擬機的磁盤總大小)
創建類型為raw的磁盤,還有另外兩種格式img和qcow2
qemu-img create -f raw /data/vms/win2008.raw 20G
檢查磁盤是否創建成功
qemu-img info /data/vms/win2008.raw
看到類似以下信息表明磁盤創建成功
2.使用virt-install命令以及VNC遠程控制安裝虛擬機
Windows系統安裝
virt-install \ --virt-type kvm \ --name win2008 \ --ram 2048 \ --cdrom=/home/Windows_Server_2008_R2_with_SP1_x64_DVD_Chinese-Simplified.iso \ --boot cdrom \ --vcpu 1 \ --network bridge=br0,model='e1000' \ --graphics vnc,listen=0.0.0.0,port=5900 \ --disk path=/data/vms/win2008.raw,bus='ide' \ --noautoconsole \ --os-type=windows
執行上述命令后,虛擬機安裝並未結束,接下來用上面配置的VNC連接主機進行后續操作
此時如果virt-install命令參數沒有問題,會有提示信息:
開始安裝......
域安裝仍在進行,您可以重新連接
到控制台(virsh console)以便完成安裝進程
執行以后只看到提示連接成功,其他沒有變化,所以不用執行這個命令,暫時沒發現有什么用處
局域網內的任意一台同網段的電腦通過vnc client或者vnc viewer連接虛擬機
CentOS系統安裝
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說明安裝過程不使用圖形化的交互方式,直接在命令行終端操作安裝即可
在命令行終端安裝完畢后會提示回車繼續,回車后虛擬機就會啟動並進入到登陸界面
3.virt-install常用參數說明
# 舊版本的寫法
–name 指定虛擬機名稱
–memory 分配內存大小。
–vcpus 分配CPU核心數,最大與實體機CPU核心數相同
–disk 指定虛擬機鏡像,size指定分配大小單位為G。
–network 網絡類型,此處用的是默認,一般用的應該是bridge橋接。
–accelerate 加速
–cdrom 指定安裝鏡像iso
–vnc 啟用VNC遠程管理,一般安裝系統都要啟用。
–vncport 指定VNC監控端口,默認端口為5900,端口不能重復。
–vnclisten 指定VNC綁定IP,默認綁定127.0.0.1,這里改為0.0.0.0。
–os-type=linux,windows
–os-variant=rhel6
# 新版本的寫法
--name 指定虛擬機名稱
--ram 虛擬機內存大小,以 MB 為單位
--vcpus 分配CPU核心數,最大與實體機CPU核心數相同
--vnc 啟用VNC遠程管理,一般安裝系統都要啟用。
--vncport 指定VNC監控端口,默認端口為5900,端口不能重復。
--vnclisten 指定VNC綁定IP,默認綁定127.0.0.1,這里改為0.0.0.0。
--network 虛擬機網絡配置
# 其中子選項,bridge=br0 指定橋接網卡的名稱。
--os-type=linux,windows
--os-variant=rhel7.2
--disk 指定虛擬機的磁盤存儲位置
# size,初始磁盤大小,以 GB 為單位。
--location 指定安裝介質路徑,如光盤鏡像的文件路徑。
--graphics 圖形化顯示配置
# 全新安裝虛擬機過程中可能會有很多交互操作,比如設置語言,初始化 root 密碼等等。
# graphics 選項的作用就是配置圖形化的交互方式,可以使用 vnc(一種遠程桌面軟件)進行鏈接。
# 我們這列使用命令行的方式安裝,所以這里要設置為 none,但要通過 --extra-args 選項指定終端信息,
# 這樣才能將安裝過程中的交互信息輸出到當前控制台。
--extra-args 根據不同的安裝方式設置不同的額外選項
五、VNC端口說明
Linux下的VNC可以同時啟動多個vncserver,各個vncserver之間用顯示編號(display number)來區分,每個vncserver服務監聽3個端口,它們分別是:
5800+顯示編號: VNC的httpd監聽端口,如果VNC客戶端為IE,Firefox等非vncviewer時必須開放。
5900+顯示編號: VNC服務端與客戶端通信的真正端口,必須無條件開放。
6000+顯示編號: X監聽端口,可選。
顯示編號、開放的端口分別由/etc/sysconfig/vncservers文件中的VNCSERVERS和VNCSERVERARGS控制。
VNCSERVERS="顯示編號1:用戶名1 …"
如:
VNCSERVERS="1:root 2:aiezu"
VNCSERVERARGS的設置方式為:
VNCSERVERARGS[顯示編號1]="參數一 參數值一 參數二 參數值二 ……"
如:
VNCSERVERARGS[2]="-geometry 800x600 -nohttpd"
VNCSERVERARGS的詳細參數有:
-geometry 桌面分辨率,默認1024x768;
-nohttpd 不監聽HTTP端口(58xx端口);
-nolisten tcp 不監聽X端口(60xx端口);
-localhost 只允許從本機訪問;
-AlwaysShared 默認只同時允許一個vncviewer連接,此參數允許同時連多個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"后,執行service vncserver restart 重新啟動vncserver使配置生效。
VNCSERVERS的設置方式為:
-SecurityTypes None 登錄不需要密碼認證VncAuth默認值,要密碼認證。
VNC Server的默認設置下,客戶端連接時啟動的是xterm,如果想看到桌面,必須將用戶根目錄下的".vnc/xstartup"文件中的最后兩行注釋掉,然后根據你安裝的桌面壞境,添加一行"startkde &"或者"gnome-session &"。