■ 中核能源科技有限公司 侯圣寶
編者按:關于OpenStack的部署有很多方法和社區(qū)項目,筆者公司采用了社區(qū)中的kolla項目作為部署OpenStack的方案,本文會詳細介紹使用kolla在基于傳統(tǒng)企業(yè)常用的vlan網絡環(huán)境下部署OpenStack生產環(huán)境的實際案例。
圖1 整體架構拓撲圖
簡單說Kolla項目可以做到上百個節(jié)點開箱即用,把OpenStack項目用到的所有組件都容器化,并且所有的組件都具備生產級別的HA功能,能實現(xiàn)單個或整體OpenStack項目平滑的升級,可以說解決了OpenStack的一大痛點。
Kolla分為一下幾個模塊,每個模塊做一件事情 :(1)Kolla,主要是負責Docker的鏡像制作;(2)kolla-Ansible負 責 容器的配置管理;(3)Kolla-Kubernetes,也是負責容器集群的配置管理。
本文我們主要采用kolla-ansible來進行部署OpenStack。Kolla本身提供了生產級別的容器的鏡像,除非有定制化要求,否則完全可以直接使用。
筆者公司私有云項目公分兩個階段來進行實施,第一階段先采用的5個物理節(jié)點來進行試運行和性能測試;第二階段逐步添加存儲和計算節(jié)點擴大規(guī)模; 整體架構如圖1所示。
1.服務器
整個云架構由三臺控制節(jié)點和N個計算節(jié)點組成,為了能夠充分利用服務器資源,可以將三臺控制節(jié)點同時也作為計算節(jié)點來使用,對于作為計算節(jié)點的服務器,內存容量和CPU的物理核心數盡量的高一些,以便能承載更多的業(yè)務。
2.存儲
私有云環(huán)境中可以選擇后端的存儲類型很多,可以采用傳統(tǒng)的集中式存儲產品和技術,比如NAS、iscsi等,也可以選擇ceph這樣的分布式存儲系統(tǒng)。
目前ceph與云環(huán)境的集成愈來愈成熟,其標準的S3接口方便與上層各類應用對接,再加上方便動態(tài)伸縮、負載平衡、冗余容災等特性,最終筆者選擇ceph作為云環(huán)境的后端存儲,用來承載虛擬機文件、映像和卷的管理等。
在實際環(huán)境中,可以根據自身負載情況,選擇將ceph的監(jiān)控節(jié)點(monitor)與OpenStack的控制節(jié)點放在同一服務器上,數據存儲節(jié)點與計算節(jié)點放在同一服務器上,達到充分利用服務器資源的目的,而且可以使用SSD作為cache盤來提升性能。
3.網絡
整個網絡采用spineleaf架構,spine層與leaf層分別采用萬兆光纖交換機進行堆疊或者虛擬化技術,對上與核心交換機、對下與服務器利用端口聚合技術形成全互聯(lián)網絡。
spin-leaf網絡架構提供了解決橫向網絡連接的傳輸瓶頸,還提供了高度的擴展性,隨著規(guī)模擴大可以將leaf橫向不斷擴展,它幾乎能適應所有大中小型數據中心,當然各位可以根據自己公司和業(yè)務情況選擇更適合自身的技術架構,如更小規(guī)模的云環(huán)境可以將spine與leaf合并起來也是一種經濟選擇。
在二層網絡技術方面,由于筆者公司業(yè)務規(guī)模不是特別大,同時為了使現(xiàn)有業(yè)務和網絡架構能夠盡量不做改動的平滑遷移,因此沒有使用流行的VXLAN,而還是采用了之前一直使用vlan網絡。
表1 網絡規(guī)劃表
服務器網絡方面,由于筆者公司選擇將計算節(jié)點與存儲節(jié)點融合在一起,因此服務器會有多組不同功能的網卡進行配置:
存儲網絡:負責ceph存儲節(jié)點之間的數據同步,由兩個萬兆網卡做bond,分別連上到堆疊的leaf交換機,實現(xiàn)鏈路冗余和帶寬負載。
外部網絡:負責虛擬機與外部通信的網絡,由兩個千兆/萬兆網卡做bond,分別上連到堆疊的leaf交換機,實現(xiàn)鏈路冗余和帶寬負載,如果采用vlan方式,該leaf交換機的聚合端口應該配置為trunk模式。
API網絡:負責opensack個組件進行通信的,本例中該網絡同時融合了各個組件負載均衡和Dashboard訪問界面,由兩個千兆/萬兆網卡做bond,分別上聯(lián)到堆疊的leaf交換機,實現(xiàn)鏈路冗余和帶寬負載。
管理網絡:負責部署管理OpenStack物理節(jié)點,由一個千兆網卡上聯(lián)到管理網絡交換機上,可以根據實際情況同其他網絡融合。
目前以5個節(jié)點為例,服務器系統(tǒng)為CentOS 7.3,將所有網卡根據前面規(guī)劃,做好bond,接口整理網絡規(guī)劃如表1所示。
1.部署節(jié)點上環(huán)境
部署節(jié)點用來控制和部署OpenStack,kolla項目部署OpenStack采用kollaansible的方式,即通過ansible在各個物理節(jié)點上部署裝有OpenStack各個項目的容器。因此要保證部署節(jié)點已經安裝了ansible并做了到各個節(jié)點ssh免密鑰等必備條件。
2.獲取docker鏡像
此前可以通過http://tarballs.OpenStack.org/kolla/images來 獲取kolla的docker鏡像,但是從pike版開始,所有的鏡像全移到了https://hub.docker.com/u/kolla/官方源中,目的是通過kolla-ansible安裝的時候可以直接去下載images,免去還要建立本地源的麻煩。但是由于image較大有時對于目前在國內的很多企業(yè)網絡環(huán)境來說訪問官方源會很慢,造成了部署不便。
為了解決這個問題,建議還是自行在部署節(jié)點建立docker源,那么怎么知道pike需要哪些image呢,如果訪問官方docker源的話,會發(fā)現(xiàn)kolla的各種image都混合在一起,很難找全。
我們可以通過http://tarballs.OpenStack.org/kolla下載pike版本的kolla。因為kolla本身是用來生成image的,因此解壓縮后在其中的docker文件夾下就包含了kolla所支持的所有組件名稱,由于我們要使用centos的 source方式部署,因此image的格式就是centos-source-[組件名稱],大家可以通過腳本把這些組件名稱提取出來,然后就可以將image批量pull下來,再push到我們自己建立的docker源上,關于docker image的pull和push,以及自己建立本地docker源我們就不討論了。
表2 節(jié)點磁盤配置
各節(jié)點最小化安裝好OS,網絡配置好之后,yum update一下系統(tǒng)并重啟,使其保持最新內核。
本項目我們使用ceph作為后端存儲,需要對存儲節(jié)點的硬盤做初始化。
筆者公司采取SSD與SATA混 合 使 用,SSD用 作cache和日志盤,SATA作為后端數據存儲。
如果服務器里面有RAID卡,為了獲得更好性能需要將每個磁盤都配置成RAID 0。
每個節(jié)點磁盤配置如表2所示。
1.緩存盤分區(qū)準備
用作ceph的磁盤分區(qū)必須要指定LABLE,這樣在部署的時候kolla才能夠通過LABLE識別磁盤,并確定這個磁盤的用途
parted /dev/sdb -s --mklabel gpt mkpart KOLLA_CEPH_OSD_CACHE_BOOTSTRAP 1 -1
2.數據和日志盤分區(qū)準備
日志盤可以與數據盤同屬一個磁盤,也可以指定外部日志磁盤,為了提升性能筆者使用一個獨立的SSD作為日志盤,日志盤的命名與數據盤是有一定關系的,有多個數據盤的話,編號逐漸增1。
parted /dev/sdd -s --mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP_1 1 -1
parted /dev/sde -s --mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP_2 1 -1
parted /dev/sdc -s --mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP_1_J 1-50000
parted /dev/sdc -s --mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP_2_J 50000 -100000
3.磁盤優(yōu)化
為了使磁盤在ceph環(huán)境下獲得更好的性能,需要修改每個磁盤以下參數:
echo “8192” > /sys/block/sdb/queue/read_ahead_kb
echo “deadline” >/sys/block/sdb/queue/scheduler
在部署節(jié)點上通過http://tarballs.OpenStack.org/kollaansible/下載穩(wěn)定版本的kolla-ansible,筆者生產環(huán)境用的ocata版本,之后升級到了pike版本,新部署的可以直接下載pike版本進行安裝。
將下載的kollaansible/etc/kolla目錄復制到/etc下。在kolla下面有兩個文件 globals.yml和passwords.yml,一個是部署OpenStack環(huán)境配置文件,包括指定安裝源,定義安裝哪些OpenStack組件等功能,一個是OpenStack中所用到的所有密碼。
1.全局globals配置
編 輯/etc/kola/globals.yml,里面可以定義開啟哪些OpenStack組件,可以根據自己實際情況,來選擇要安裝的組件。其中選項做如下修改,如果有注釋需要去掉:
kola_install_type:“source” #指定部署方式,我們采用source方式
OpenStack_release:“pike” #指 定 OpenStack版本
kola_internal_vip_address: “172.16.6.100”#此ip必須沒有被分配
docker_registry:“172.16.245.20:4000” #本地docker源地址,如果使用公有源可以不配置此項
docker_namespace:“kolla” #指定docker源名稱
network_interface:“em2” #api,存儲、網絡接口
storage_interface:"bond0"
cluster_interface:"bond0"
tunnel_interface:"bond0"
neutron_external_interface: “em4”
neutron_plugin_agent:“l(fā)inuxbrige”
enable_ceph : “yes” #開啟ceph
enable_cinder: “yes”#開啟cinder功能
enable_openvswitch:“no”
ceph_enable_cache:“yes” #啟用ceph緩存
glance_backend_ceph:“yes” #指定glance后端使用ceph存儲
2.生成OpenStack密碼
cd kolla-ansible/tools
./generate_passwords.py
生成的密碼會填充到/etc/kolla/passwords.yml中。
3.配置ansible主機文件
編 輯kolla-ansible/a n s i b l e/i n v e n t o r y/multimode文 件,根 據 各個節(jié)點功能在[control]、[network]、[compute]、[monitoring]、[storage]選項下將OpenStack節(jié)點信息填入,這樣部署的時候可以通過指定這個文件來部署節(jié)點信息,當然這些節(jié)點的主機名需要事先通過DNS或者hosts文件進行解析。比如需要三個控制節(jié)點,因此在[control]項下面只寫3個node信息。
[control]
node1
node2
node3
4.配置neutron網絡文件
因為筆者公司網絡采用vlan方式,默認kollaansible只開啟了vxlan和flat模式,因此需要修改neutron的ml2_conf.ini.j2等配置文件添加vlan功能,與此端口對應的交換機端口應配置成trunk模式。
首先開啟vlan支持
vi kolla-ansible/ansible/group_vars/all.yml
#修改如下選項,添加vlan
n e u t r o n_t e n a n t_n e t w o r k_t y p e s:"vxlan,flat,vlan"
添加vlan網絡所在端口,physnet1默認對應著em4外部網絡接口
vi kolla-ansible/ansible/roles/neutron/templates/ml2_conf.ini.j2
network_vlan_ranges =physnet1
flat_networks = *
由于kolla是基于docker運行的,因此在OpenStack節(jié)點上需要預先配置好docker環(huán)境。kollaansible提供了這個功能。進入部署節(jié)點上kollaansible/tools文件夾,執(zhí)行如下命令,來對節(jié)點初始化。
這個過程會安裝pip,并通過pip安裝一些組件和相應版本的docker等,因此這時候所有OpenStack節(jié)點建議能夠連接到互聯(lián)網。如果順利執(zhí)行完畢不出現(xiàn)報錯,我們再通過prechecks參數來進一步驗證環(huán)境。
cd kolla-ansible/tools
#準備環(huán)境
./kolla-ansible –i ../ansible/inventory/multimode bootstrapservers
#驗證環(huán)境
./ kolla-ansible –i ../ansible/inventory/multimode prechecks
在上述的環(huán)境都準備好之后就可以通過kollaansible進行部署了,過程很簡單,只需執(zhí)行一條命令,然后等待即可,不需要人為參與。
cd kolla-ansible/tools
./kolla-ansible –i ../ansible/inventory/multimode deploy
待執(zhí)行完畢后不出現(xiàn)錯誤,那么整個部署就完成了,可以在瀏覽器訪問管理界面http://172.16.6.100,進行一系列的管理操作。登錄名為admin,密碼存儲在passwords.yml里 面 的keystone_admin_password項中。
至此,整個OpenStack部署完成。容易出錯的地方就是前期的環(huán)境部署,主要是因為系統(tǒng)有些軟件包與pip安裝的docker某些組件版本沖突,因此盡量最小化安裝OS。