kvm配置eth0
A. 2、kvm網路篇---網路配置Bridge方式、NAT方式
NAT方式和Bridge方式。
Bridge方式的配置原理和步驟。
Bridge方式適用於伺服器主機的虛擬化。
NAT方式適用於桌面主機的虛擬化。
選擇:當需要外界能定位(找)到虛機時使用Bridge方式、當不需要外界定位到虛機時使用NET方式。
安裝完kvm後默認網卡的工作方式為NET
適用范圍:伺服器主機虛擬化
原理:即虛擬網橋的網路連接方式,是客戶機和子網裡面的機器能夠互相通信。
好處:可以使虛擬機成為網路中具有獨立IP的主機。
上圖,網橋的基本原理就是創建一個橋接介面br0,在物理網卡和虛擬網路介面之間傳遞數據。
下圖,對應計算機上真實的route表。其中br0為橋接網卡。
網橋方式配置步驟:
一、命令模式
1、編輯修改網路設備腳本文件,增加網橋設備br0
vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=static
IPADDR=192.168.12.118
GATEWAY=192.168.12.1
DNS1=180.76.76.76
DNS2=114.114.114.114
DEFROUTE=yes
備註:如不需要靜態地址,可以使用如下配置
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=dhcp
2、編輯修改網路設備腳本文件,修改網卡設備eth0
DEVICE="eth0"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE=Ethernet
BOOTPROTO=none
BRIDGE="br0"
NAME="System eth0"
HWADDR=44:37:E6:4A:62:AD
備註:NM_CONTROLLED這個屬性值,根據 RedHat 公司的文檔是必須設置為「no」的(這個值為「yes」表示可以由服務NetworkManager來管理。NetworkManager服務不支持橋接,所以要設置為「no」。),但實際上發現設置為「yes」沒有問題。通訊正常。
3、重啟網路服務
#service network restart
4、校驗橋接介面
#brctl show
適用范圍:不需要外網訪問虛擬機情況、桌面主機虛擬化。
原理:NAT方式是kvm安裝後的默認方式。它支持主機與虛擬機的互訪,同時也支持虛擬機訪問互聯網,但不支持外界訪問虛擬機。
好處:無法從網路上定位和訪問虛擬主
上圖可以看出,虛擬介面和物理介面之間沒有連接關系,所以虛擬機只能在通過虛擬的網路訪問外部世界。
下圖,對應計算機上真實的route表。其中virbr0為虛擬網卡。
Bridge方式的影響
Bridge方式配置出來的介面對NAT方式沒有影響,因為NAT方式並沒有使用物理網卡。
但作為客戶機,只能選擇其中的一種。
實踐經驗:
當將虛擬機網卡方式更改為Briage後需要注意幾點
1、關閉宿主機與虛機的NetworkManager服務並設置開機不自啟。不然將會影響兩者的網路功能,甚至出現虛機無法啟動的情況。
2、虛機網卡已設置為啟動開啟,但實際情況為開機後宿主機網卡啟動了,而虛擬機網卡不能啟動,即使手動啟動也將失敗。這種情況為網卡的啟動順序造成,因為Briage橋接方式虛擬網卡需要在宿主機網卡啟動之前啟動。而在開機時Network服務啟動順序高於libvirtd服務,所以才會有該現象。解決方式有兩個:1、更改服務啟動順序並重啟。 2、停止br0網卡,啟動虛擬網卡後再啟動br0網卡。
3、配置正常並關閉沖突服務後依然無法使用Briage正常上網。此時可以從route表信息開始排查,一般第一次啟動Briage方式之後默認的路由表會遭到更改,使得無法連接外網,而內網正常的情況。
1、http://www.linuxidc.com/Linux/2012-05/61445p2.htm
2、 http://blog.csdn.net/hzhsan/article/details/44098537/
B. kvm在ubuntu下怎麼不能用
默認情況下,KVM是沒有安裝的,在安裝之前,需要先檢查一下,CPU是否支持VT技術
1. 切換到root模式
默認情況下,ubuntu的root帳號是沒有啟用的,要啟用,需要做一些設置,為了安裝方便,就啟用root吧
sudo passwd root
輸完密碼後,su root進入高許可權模式
2. 檢查CPU信息
egrep '(vmx|svm)' --color=always /proc/cpuinfo
flags
: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm
constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm dts
tpr_shadow vnmi flexpriority
flags
: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm
constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm dts
tpr_shadow vnmi flexpriority
如果出現這個,就表示支持VT技術 www.linuxidc.com
還可以用這個命令
egrep -c '(vmx|svm)' --color=always /proc/cpuinfo
如果為0,表示符合的個數為0,那麼肯定不支持了,如果大於0,那麼可能有一個或兩個符合結果,就支持vmx或svm
3. 安裝kvm所需軟體,ubuntu這個很方便
apt-get ubuntu-virt-server python-vm-builder kvm-pxe
4. 將用戶加入到kvm管理組裡面
adser 「id -un」 libvirtd
adser 「id -un「 kvm
如果id -un無法加入,那麼使用用戶名替換
5. 檢測安裝是否成功
運行virsh -c qemu:///system list
如果出現
root@server1:~# virsh -c qemu:///system list
Id Name State
----------------------------------
6. KVM的橋接
默認情況下,啟動kvm後,自帶NAT模式,生成一個網卡virbr0,網段是192.168.122.0的,這個雖然可以聯網,但是網路功能受限,畢竟,一些服務需要埠都要開,NAT模式不能滿足需求,那麼就需要使用橋接模式,使用這個模式需要單獨下載安裝橋接軟體
apt-get install bridge-utils
7. 橋接配置
安裝完成後,還需要配置一下橋接介面,在ubuntu下,橋接介面被定義為br0,需要手動配置一下,這個地方弄錯了,配置的時候出現問題,導致無法上網,所以需要小心配置。這個無非就是配置ubuntu的網路設置,跟RHEL
裡面的system-config-network是一樣的。在ubuntu中,使用vim打開網路配置文件
/etc/network/interfaces
記得提前安裝vim,ubuntu的vi難用至極
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto br0
iface br0 inet dhcp
bridge_ports eth0
這個配置文件定義了3個網卡設備,lo跟eth0不用說了,關鍵是br0,配置跟eth差不多,關鍵是bridge_ports eth0
指定要橋接到哪一塊網卡,這個需要明確定義
說一下配置文件interfaces,跟RHEL還真不太一樣
開機自動啟動網卡
auto 網卡介面
獲取IP的方式,dhcp或靜態
iface eth0 inet dhcp(static)
如果是靜態的話,還需要設置ip與網關
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
跟RHEL還真不太一樣啊。
ok了,保存之後就開始下一步了
8. 啟動網路服務
有兩種方法
/etc/init.d/networking restart
或者
ifup br0
9. 查看配置結果
ifconfig
可以看到br0已經啟動了
br0 Link encap:乙太網 硬體地址 00:22:15:ca:59:2e
inet 地址:192.168.1.102 廣播:192.168.1.255 掩碼:255.255.255.0
inet6 地址: fe80::222:15ff:feca:592e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 躍點數:1
接收數據包:10 錯誤:0 丟棄:0 過載:0 幀數:0
發送數據包:47 錯誤:0 丟棄:0 過載:0 載波:0
碰撞:0 發送隊列長度:0
接收位元組:1920 (1.9 KB) 發送位元組:10157 (10.1 KB)
10. 現在可以啟動KVM管理器,通過圖形界面安裝虛擬機了
11. 其實還有命令行安裝,這個比較cool,還沒開始看,等下一篇。
12. 期望有snapshot功能,這個功能可方便了,特別是做實驗的時候,相當方便,不知道kvm有這個功能不
C. 如何給ubuntu kvm配置橋接
首先:要停止網路服務
sudo /etc/init.d/networking stop
其次:修改網路配置文件
sudo gedit /etc/network/interfaces
如果想手動設置ip等請將以下代碼復制到編輯的文件中,注意:IP等設置自己按照需要修改。
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.200.130
network 192.168.200.0
netmask 255.255.255.0
broadcast 192.168.200.255
gateway 192.168.200.1
dns-nameservers 8.8.8.8
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
如果想自動從DHCP獲取,請將一下代碼復制到編輯的文件中。
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
最後:重新啟動網路服務便可
sudo /etc/init.d/networking restart
網卡的配置完成了,還要對虛擬機進行一下設置.
打開虛擬機控制器:
sudo virt-manager
將虛擬機的網路屬性更改為:br0
有圖為例:
通過以上步驟的設置KVM的橋接問題解決了,但是還是有問題的, 無線網卡橋接是不成功的,默認的是有線網卡!
使用過程中如果有問題歡迎交流!
D. centos7創建kvm虛擬機有幾種方法
步驟
一、准備環境:
1、檢查是否支持虛擬化
Centos6.2_x864
KVM 需要有 CPU 的支持(Intel vmx 或 AMD svm),在安裝 KVM 之前檢查一下 CPU 是否提供了虛擬技術的支持:
egrep '^flags.*(vmx|svm)' /proc/cpuinfo有顯示, 有顯示則說明處理器具有VT功能
2、檢查BIOSS是否開啟虛擬化
二、安裝KVM相關軟體
1、復制即可(首先確認yum配置是否正常)
yum install kvm kmod-kvm qemu kvm-qemu-img virt-viewer virt-manager libvirt libvirt-python python-virtinst
2、檢查kvm模塊是否安裝
[root@localhost ~]# lsmod |grep kvm
kvm_intel 55496 32
kvm 337772 1 kvm_intel
三、啟動服務並開機啟動
/etc/init.d/libvirtd
chkconfig libvirtd on
#以上就是KVM的安裝,很簡單。但是我們需要通過桌面去安裝系統和偶爾的配置。所以需要在Server端安裝桌面:Gnome
四、安裝gonme桌面 並配置VNC桌面連接到 virtual-server伺服器上
1、安裝virtual-server 桌面
yum -y groupinstall "Gnome" "Desktop"
如果不安裝桌面在使用svn登錄伺服器的時候會報錯:
2、安裝VNC-server端軟體
yum -y install vnc *vnc-server*
3、修改VNCServer主配置文件
vim /etc/sysconfig/vncservers
跳至最後並去掉倒數第二行注釋符,然後修改為
VNCSERVERS="1:root"
4、使用vncpasswd設置VNC登錄密碼
如下:輸入兩次密碼即可
[root@localhost ~]# vncpasswd
Password:
Verify:
[root@localhost ~]#
設置完密碼會在root宿主目錄下生成.vnc開頭的隱藏目錄,該目錄下面的文件就是root用戶的VNC桌面配置文件。打開xstartup配置桌面
#vim /root/.vnc/xstartup
將最後一行改為
gnome & #這將啟用gnome桌面
6、啟動vncserver服務並設置為開機啟動
/etc/init.d/vncserver start
chkconfig vncserver on
7、通過VNC客戶端連接virtual-server
下載一個小的VNC客戶端,如下圖:
輸入IP和埠,這個埠是在當時設置VNC-server時設置的!
結果如下:
五、配置橋接
這樣安裝完了之後就可以使用了,但是虛擬機不能和外面通信,只能和virtual-server內的虛擬機通信。
如果需要和外面的伺服器通信需要配置橋接很簡單。
臨時:設置橋接網卡:KVM#設置br0與eth0橋接brctl addif br0 eth0#清空eth0IP地址ifconfig eth0 0.0.0.0#設置br0地址ifconfig br0 192.168.7.241 255.255.252.0 up
永久:
永久設置DEVICE=br0ONBOOT=yesBOOTPROTO=staticTYPE=BridgeIPADDR=192.168.9.47NETMASK=255.255.248.0GATEWAY=192.168.8.1DEVICE=eth0ONBOOT=yesBOOTPROTO=staticTYPE=EthernetBRIDGE=br0
IPV6INIT=no
註:
在橋接網卡里設置是需要注意:TYPE=Bridge
在屋裡網卡要指定橋接的網卡名:BRIDGE=br0
E. KVM虛擬機橋接網卡變更導致網路不通解決方案
物理機有兩塊網卡,eth0,eth1,開始創建網橋br0與eth0橋接,然後為虛擬機設置橋接方式聯網。後期由於業務需要,將br0調整為與eth1,導致所有虛擬機均不能上網。虛擬機重啟網卡,重啟系統都不能。通過virt-manger查看顯示,虛擬機網卡已經是橋接的eth1了。於是只好將虛擬機網卡刪除,然後重新配置虛擬機網卡,就可以正常上網了。kvm虛擬機橋接網卡支持熱插拔。
F. KVM實例總結
{% note success %} poetry
<center style="box-sizing: border-box; margin-top: 0px; margin-bottom: 0px;">往事越千年,魏武揮鞭,東臨碣石有遺篇。蕭瑟秋風今又是,換了人間。 {% endnote %}</center>
kvm創建虛擬機的根本在於這樣一條命令, virsh define vm-template.xml ,這條命令的核心就是創建一個虛擬機,之後或者之前的內容都是圍繞著這條命令和這個虛擬機的。
所以,virsh define vm-template.xml 其本質是在安全可靠的前提下,將母機的資源通過kvm虛擬化的形式分配給子機。
所以主要考慮方向有兩個
1、保障母機和子機的安全可靠,包括系統安全和網路安全
2、進行資源分配,包括網路資源、存儲資源、計算資源等
該腳本考慮了母機分配資源不會超過母機承受范圍的資源安全,其他系統層面和網路層面的安全問題還需考慮
完成過程
[0]
剛開始考慮當母機資源超過一定比例則程序退出,比如磁碟使用超過2/3,後來覺得這樣不夠靈活,改用百分比,默認50%
在設置百分比的時候有幾點小問題
1、浮點數運算保留小數
使用scale可以准確保留小數,echo "scale=2;62/3" | bc 結果 20.66
使用printf可以保留小數位,補零填充 printf %.2f 結果20.00
2、浮點數運算不保留小數
echo "123.123"|sed "s/.. //g"
代表0到多個,所以第一個命令中. 只能替換掉小數點變成空
..代表了小數點之後的1到多個
3、除法
echo "2 / 3" | bc 這個結果會顯示為0
echo "scale=2 ;2 / 3" | bc 這個結果會顯示為.66
printf "%.2f" echo "scale=2;2/3" | bc 這個結果會顯示為0.66
[1]
剛開始的時候選擇將subvm_configuration.sh這個腳本cat進內存,然後用expect登錄到子機的時候echo到文件,然後執行。後來發現expect輸出的時候會把subvm_configuration.sh腳本里的內容先執行一遍,而且還存在其他一些問題,比如說echo到文件的時候殘缺不全、不換行、文件為空等。
後來採用磁碟共享的方式,在宿主機上創建一塊磁碟,然後掛載到/tmp/share/這個目錄,再將subvm_configuration.sh腳本和ipinfo配置文件復制到該目錄,之後在子機的XML文件中添加一塊disk(vdc),登錄進子機後,掛載vdc,此時就可以看到母機上/tmp/share/下的內容了。直接執行腳本即可。
磁碟共享也有一個缺點,就是文件內容不能實時刷新,比如在母機上改了ipinfo,只有子機重啟後,子機上的ipinfo才可以刷新,鑒於/tmp/share/這個目錄每個子機一生只有一次用到,所以這個問題暫時不需要解決。
[2]
創建子機
1、if ( vlanid != 0 && xenbrx not in brctl show ) 會報錯網卡未找到導致虛擬機啟動失敗
2、vm-template模板不正確,包括<emulator>/usr/local/bin/qemu-system-x86_64</emulator>路徑不正確,會導致虛擬機無法啟動
3、disk的slot卡槽相同會導致虛擬機無法啟動
4、需要注意的是,virsh define vm-template 這條命令的執行路徑是/usr/local/etc/libvirt/qemu/vm-template,最後會在/usr/local/etc/libvirt/qemu/下生成vm$ipfmt.xml的配置文件。
[3]
expect會有很多問題
1、命令不按順序執行
2、傳入的變數為空,且傳入的變數下標是從0開始的;shell傳入變數下標從1開始,0代表自身文件
3、set timeout $time 設置的時間不一定準確,設置了300秒延時,但未到300s,程序還是退出了,可以考慮直接設置 timeout 為-1
4、expect有多種寫法,有expect << EOF ; expect eof ; 最正常的是上面用的
5、expect文件用的解釋器是/usr/bin/expect,這里將login.sh使用cat寫在了單獨的文件中
[4]
1、subvm_configuration.sh配置了兩張網卡,格式化vdb數據盤,配置ssh
2、eth0為連接外網的網卡,使用tunnel,eth1為內網網卡,使用vlan
xenbrX為隧道入口,母機收到從xenbr361口收到的報文,就發給另一端隧道,從而實現連接外網
tunnel network ---- host(default router: subhost -> netowrk , throught interface & sh vlan.sh ) ---- subhost
母機收到vlan的報文,就在指定vlan的廣播域內進行路由(不一定是母機進行路由)
vlan network ---- host(broadcast router: subhost ---> broadcast/vlanid throught 802.1Q ) ---- subhost
expect合理用法