OPNFV在雙網卡物理機群上的部署(FUEL)

前言

目前看來,似乎opnfv的fuel安裝方法並不是很穩定,在安裝過程中會出現不少難以解釋的現象。如果完全按照官方文檔走,很可能會安裝失敗。目前網上的教程全部都是針對虛擬機部署的。對於在物理機上部署OPNFV,本文將提供一種親測可行的方法(使用FUEL部署工具),並且與大家分享我們在安裝過程中遇到的坑。

所用硬體

5台物理機,每台物理機均有兩張或以上的網卡。

NOTICE:OPNFV系統理論上最少3台機器即可部署,但使用Fuel工具的話它會強制要求你使用5台機器。

拓撲圖

製作鏡像

opnfv.org/software/down,選擇Fuel,下載iso文件。

使用UltraISO或者其他刻錄工具,將iso文件刻錄進光碟。(建議另外刻錄一份在U盤,下文會解釋原因)

NOTICE:目前該iso文件的大小約4.5g,以後的版本應該會更大。普通DVD容量只有4.3G,所以需要購買DVD9或更大容量的光碟。

NOTICE:理論上,也可以將iso刻錄到u盤進行安裝。但經過多次試驗,發現該方法總是不能成功安裝。fuel的默認安裝方式也是直接到光碟機去找鏡像的。所以不建議使用u盤安裝。

安裝Master節點

放入刻錄好的光碟,開機進BIOS,選擇從光碟機啟動。進入如下界面:

按Tab鍵可以看到下面三行配置信息,但是無需修改,直接選擇第1項,回車啟動安裝。然後等待約30分鐘。

NOTICE:fuel里有5個網路,可籠統分為三類,如下表所示:

其中這個10.20.0.1的作用只有作PXE啟動,跟其他因素沒有任何關係,不需修改。

五個網路的具體作用見附錄。

然後系統會自動重啟一遍。可能由於該版本還不太穩定,此時有一定概率會又回到上圖的安裝界面。為了避免這種情況,可把之前刻錄的U盤也插到主機,然後在系統自動重啟時再進BIOS,這一次選擇從U盤啟動。如果採用這種方式,則一定可以進入下面的界面:

選擇第一項,經過一番載入之後,會進入下面這個界面:

照官網的說法,在這裡要進行相關的配置,最後選擇【Save and Quit】。但此時我們的物理機還沒有連上網,意味著暫時不能連上repo,所以save的話是無法通過驗證的。所以我們在這裡直接跳過,選擇了【Quit withoutSaving】。之後會有大約50分鐘的各種驗證,最後系統會不斷嘗試連接repo,重複十多遍以後會自動退出,耐心等待,不用理會。

NOTICE:跳過的原因有二:此時master暫未聯網;之後仍有機會對這些參數進行配置。

之後就可以看到master的主界面:

登錄Fuel UI進行配置

讓自己的電腦與master節點連通,配置到同一子網(如10.20.0.99),關閉防火牆。然後在瀏覽器輸入https://10.20.0.2:8443即可進入UI界面:

賬號密碼都是admin(不建議修改,網上有人改密碼以後會在以後的安裝步驟掛掉),登錄:

創建環境,參數設置按照官方教程走:

完成創建。進入如下界面:

選中上方Settings欄,修改hypervisor類型為KVM

選中上方Networks欄。

default項內的內容不必修改,此處應該針對的是以後在該系統上跑的虛擬機的地址池,而不是實際的物理機器。

NOTICE:在這裡唯一要注意的是Gateway的配置。如果走默認的話,就必須手動改把路由器的lan地址改成172.16.0.1。在後面的繞坑環節還會討論這個問題。

NOTICE:雖然不知道為什麼會失敗,這裡不建議把public網設置為vlan。除非每台機器真的只有一張網卡。

Other項中,勾選【Assign public network to all nodes】,把下面的NTP Server改為master的地址10.20.0.2

至此,環境的基礎配置暫告一段落。

安裝slave節點

確認網路連通後,啟動子節點,選擇PXE啟動。在彈出的藍色界面中選擇第二項:bootstrap。

安裝完成後會進入一個CentOS系統。

對4台機器分別進行上述操作。安裝成功後,可在master的UI界面中看到已安裝的節點數

配置子節點

在10.20.0.2:8443的UI中,在Nodes標籤欄中,按官方教程要求,配置2個controller+Ceph,1個controller+MongoDB,1個compute+Ceph。

分別勾選各子節點(若伺服器型號相同,可一次性勾選多個),點擊右上角的【Configure】,5個網路在2張網卡上的分配情況如下圖:

並且對每張使用到的網卡,點擊左下部的【Offloading Modes】,把【tx-nocache-copy】置Disabled。

在master機器上,通過ssh將各個子節點每張網卡設置為混雜模式。

查看各節點的ip地址等信息:

fuel nodes

然後在主機上對每個節點:

ssh root@[IP地址] ifconfig eno1 promisc

ssh root@[IP地址] ifconfig eno2 promisc

(注意master和slave的網卡名字和起始下標都不同。master是eth0和eth1,slave是eno1和eno2)

在master機器上,通過ssh關閉各個子節點的2號網卡的rx-vlan-filter

格式為:

sshroot@[IP地址] ethtool -K eno2 rx-vlan-filter off

配置網路和源

方法一:在線安裝

此處要特別感謝姬子的博客。(註:博客中說的MOS = Mirantis OpenStack)

簡而言之,在安裝過程中,需要master從外網把ubuntu和openstack的源下載下來,然後子節點再從master節點下載得到源,然後進行安裝。而默認的兩個源的地址都在國外,姬子認為以天朝的網路環境,下載的源經常會有迷之錯誤。

那麼不管如何,首先要讓master連上外網。回到master機器上,賬號root,密碼r00tme,登錄。

然後用vi編輯配置文件

vi/etc/sysconfig/network-scripts/ifcfg-eth0,將網卡0的網關刪掉。

vi/etc/sysconfig/network-scripts/ifcfg-eth1,進行相應的配置,按實際情況填好外網ip和網關,配置好ONBOOT=yes、PEERDNS=yes、DEFROUTE=yes、BOOTPROTO=static項

然後:wq!退出

重啟一下網路:

service NetworkManager restart

service network restart

ping一下百度和騰訊,驗證網路已通。

接著,依據姬子的博客,可以將ubuntu的源換成國內的阿里云:

vi /usr/share/fuel-mirror/ubuntu.yaml

然後執行:

fuel-createmirror

顯示正在下載mos源到本地

顯示安裝成功(然而…就算中間出了什麼錯誤,它最後也總是會顯示製作成功),然後可以看到10.20.0.2:8443上Settings標籤下的General欄中,repo的地址變成全部指向master了:

刪掉其中的三項:「mos-updates」、」mos-security」、」mos-holdback」。

然後在Networks標籤欄下的【ConnectivityCheck】中,驗證一下網路。正常的話會出現下面這個界面:

NOTICE:上述做法將ubuntu源換成國內的阿里雲,mos源仍用默認的國外源。實際操作中,我們按照這種方法部署過3次,每次都在成功安裝完ubuntu後,安裝openstack失敗,log裡面的報錯也很迷,網上找不到有效的解決方法。所以我懷疑部署失敗的原因在於mos源的不穩定。所以方法一慎用。

方法二:離線安裝

再次感謝姬子的博客。

製作本地源:blog.csdn.net/qq_201542

離線安裝:jizi.updays.cn/archives

姬子的mos8.0本地源:3295a7.lt.yunpan.cn/lk/ 訪問密碼 e930

考慮到以後的使用,這裡仍可以按照方法一,讓master的eth2與外網連通,ping一下騰訊驗證一下。

把姬子的本地源下載下來,解壓。可以通過ftp軟體傳入master的/var/www/nailgun。但如果物理機在身邊的話,可以把解壓得到的mirrors文件夾放到U盤,然後掛載到master機器上,用cp指令拷貝進該路徑,速度快很多。

接下來為了讓10.20.0.2:8443上Settings標籤下的General欄中repo的地址變成全部指向master,可以拔掉master連接外網的網線,然後執行:

fuel-createmirror

由於網路不通它很快就會報錯退出,但是這個報錯沒關係,無視之。淡定接上網線,點擊【Connectivity Check】驗證一下網路,結束源的配置。

完成部署

回到DashBoard點擊部署。如果順利的話,將近4個小時候就可以看到下面的界面了:

登錄horizon:

幾個坑(FAQ)

1.點擊網路驗證時,出現DHCP錯誤,如下圖

這是因為fuel它內部的神奇機制決定了它自己會進行DHCP,所以它要求網路中不能存在DHCP。這次在實驗室環境部署時,我們的交換機連到了所里的一個我們無法配置的路由器那裡,無法關閉路由器的DHCP,所以我們多接了一層路由器,關掉其上的DHCP,直觀上像是過濾掉了DHCP。拓撲圖如下:

2.點擊部署以後,slave節點安裝完ubuntu後,在安裝openstack的階段掛掉

遇到這種情況,基本上可以認為是這種安裝方法不穩定,甩鍋給玄學。自動安裝並不是100%能成功的,安裝過程出錯的話,我也沒辦法。如果不是準備工作出錯的話,重裝就能解決。總之前期的準備工作要做好,比如本地源以及機器配置等等,做好這些再安裝基本沒問題,錯了就重裝。多裝幾次,我們花了18天才部署成功,相信大家一定不會比我們更慢的。

BTW:姬子的源沒問題,我們最後就是用他的源成功部署的

3.像2中那種掛在安裝openstack的情況基本是沒法解決的。但是看log里如果出現形如」Timeout waiting for host 『172.16.0.1』 status to become 『up』 after60 seconds!」的錯誤(如下圖),那是可以解決的。

出現這種情況一般就是在Networks里對public的網關配置沒有做好。要注意把public的Gateway設置成2號網卡所在網路的路由器的ip地址。

4.在驗證網路時,如果出現形如「expectedvlan(not received)」的報錯,如下圖:

說明vlan包在網卡1所在的網路上走不通。可以留意一下網卡1所使用的交換機。按照網上的說法,如果是使用大型交換機,需要將用到的介面設置為trunk模式,並且設置為全部允許。但在我們的實驗中發現該方法還是沒有用,也懷疑機房裡的交換機可能設置了別的東西,有待進一步探究。我們是另買了一個tp-link的8口小交換機,解決了這個問題。

後記

登錄horizon以後,第一感覺是:

卧槽,界面長得跟openstack 一 毛 一 樣 !踏馬的老子裝了這麼久不會就只是裝了個openstack吧!

於是簡單重新調研了一下概念。網上的說法大概是「不能簡單地把OpenStack和OPNFV作比較,因為兩者的關注點不在同一維度。openstack提供對instance的管理和編排,OPNFV提供對the Virtualized Infrastructure的管理。你可以在OPNFV的基礎結構之上使用VIM(如fuel伺服器)搭建任意多的openstack環境。」也就是說,使用這個鏡像安裝出來的東西應該的確是OPNFV,但畢竟人家的關注點在infrastructure上,而他的頂層架構包括interface則完全使用Openstack的M版。

至於OPNFV用起來比普通OpenStack好在哪兒,就有待進一步探究了。

附錄

FUEL中五個網路的具體作用

1、PXE(部署網路):這是部署網路,也就是在節點開機的時候設置的網路啟動,首先獲取到IP地址的那個網卡的網路,這個網卡一旦獲取IP從此網卡啟動,則不能像其他網路一樣手動改變,並且不能綁定,所以一般獨立出來,生產環境下不建議跟其他網路混用。為了區分,一般我們模式使用網卡的第一個網口或者最後一個網口啟動,且不能存在DHCP,否則網路驗證的時候肯定會報錯,但是仍然可以強制部署。

2、Storage(存儲網路):存儲網路,顧名思義也就是專門給存儲使用的私網。我喜歡使用Ceph當做NOVA、Cinder和Glance的統一存儲,簡單、共享。那此時這個存儲網路就是相當於Ceph的Cluster Network,用於數據第二、三副本的同步和內部rebalance。其實這個網路的流量還是很大的,特別是存儲節點越多,讀取IO高的情況下。

3、Public(公網):這裡其實包含兩個網路,Public網路和FloatingIP網路。初次部署這兩個網路必須在同一個網段,部署完成後可以手動添加額外的Floating IP網段,此時注意和交換機互聯的埠需要設置成Trunk了。Public主要是用於外部訪問,一是外部用戶管理物理機需要通過Public網路訪問,先到controller節點,然後跳轉到計算節點,當然也可以手動給計算和存儲節點配置Public IP。二是網路節點是在controller節點上面的,也就是常說的neutron L3,如果虛機分配了Floating IP需要訪問外部網路,例如公司或者互聯網,或者外部網路通過Floating IP訪問虛擬機。我們知道Floating IP是要到網路節點,也就是控制節點的neutron l3做DNAT出去。

其實很多人擔心這是一個瓶頸,擔心多了,真的。當然你要是上百個物理節點,或者南北向流量為主,那就用評估下了。還有就是如果不需要彈性IP的話,也可以考慮通過Private,也就是計算節點直接到交換機。

4、Private(私網):這個網路主要是用於內部通信,比如雲主機對外訪問要先到controller節點,那Public又只在controller節點,那它是怎麼到controller節點的呢,當然是通過Private網路。那部署的時候我們看到它默認有30個VLAN,也就是VLAN ID 1000-1030,這是做什麼的呢。我們知道OpenStack可以有很多租戶,每個租戶都可以有自己的網路,那網路的子網在不同租戶下可以相同,那問題來了,這是怎麼實現的呢,怎麼做的隔離呢。這就是這個VLAN的作用了,彼此之間使用的是VLAN做隔離,也就是每一個子網都使用一個VLAN來做隔離,保證不同租戶之間的網路隔離和不衝突。這30個vlan可以建立30個子網,你可以根據實際的需求來變動。這個Private也是需要上行埠,也就是與交換機互聯的埠是Trunk。

5、MGMT(管理網路):這個管理網的用處可就大了,一是這個OpenStack內部各個組件之間的通信都是走的Management,也就是API之間、Keystone認證啊,監控啊什麼的都是走的這個網路。那按理說流量不大啊,當然,其實這個MGMT網路還有另外一個用途,那就是充當Ceph的Public網路,有一個Public網路和之前的Public網路有什麼區別的,別暈哈。其實說是Public網路,是相對於Ceph來說的,之前說過Storage網路是Ceph的Cluster Network,用於內部數據的同步和rebalance,那個外部流量怎麼寫入呢,那就是咱們的MGMT網路了。虛機的數據寫入是通過外部網路,然後這個流量通過MGMT網路寫到Ceph集群,那麼這個數據就是Ceph的主副本,所以這個網路流量也是很大的,由於是外部寫入和訪問,所以相對於Ceph集群來講,也就可以稱為是Public Network了。

Reference

官方安裝文檔

artifacts.opnfv.org/fue

5個網路的解釋

tianhunyongheng.blog.51cto.com

3類網路的解釋

updays.cn/archives/35

姬子的博客:本地源製作

blog.csdn.net/qq_201542

姬子的博客:mos8.0離線安裝

blog.csdn.net/qq_201542


推薦閱讀:

TAG:計算機網路 | 網路虛擬化 | 伺服器 |