OpenStack簡(jiǎn)介
OpenStack版本發(fā)展
OpenStack版本系列字母以A~Z命名,從2010年發(fā)布的第一個(gè)版本"Austin"到當(dāng)前穩(wěn)定版本"ocata"一共經(jīng)歷了15個(gè)版本,第16個(gè)版本"pike"正在開發(fā)中末贾。
這七年中OpenStack在不斷的更新迭代贪壳,雖然還未完全歩入商用化,但是已經(jīng)受到很多廠商的青睞,很多廠商基于OpenStack做公有云或私有云的云計(jì)算操作系統(tǒng)。容器的出現(xiàn)為OpenStack的發(fā)展又加了一管血,OpenStack與容器協(xié)作可以有效提高開發(fā)團(tuán)隊(duì)的速度和效率竖螃,尤其是在OpenStack私有云環(huán)境中。隨著容器與OpenStack結(jié)合逗余,容器的應(yīng)用范圍將會(huì)進(jìn)一步擴(kuò)大特咆,另一方面容器也將會(huì)對(duì)OpenStack市場(chǎng)深化產(chǎn)生助推作用。
OpenStack架構(gòu)
OpenStack 是一個(gè)開源云計(jì)算操作系統(tǒng)录粱,通過(guò)一個(gè)數(shù)據(jù)中心管理大量的計(jì)算腻格、存儲(chǔ)、網(wǎng)絡(luò)資源关摇。管理員通過(guò)dashboard高效地管控這些資源荒叶,用戶則通過(guò)web接口使用這些資源。
OpenStack支持多種類型的云環(huán)境输虱,試圖打造一個(gè)部署簡(jiǎn)單些楣、操作靈活、可大規(guī)模擴(kuò)展宪睹、標(biāo)準(zhǔn)統(tǒng)一的云計(jì)算管理平臺(tái)愁茁。OpenStack通過(guò)各種各樣的服務(wù)靈活地提供基礎(chǔ)設(shè)施即服務(wù)(IaaS)解決方案,并且每種服務(wù)都提供了API接口以便更加靈活的集成亭病。OpenStack的服務(wù)主要包括:
dashboard
a) horizon:提供了一個(gè)基于web的自服務(wù)門戶鹅很,與OpenStack底層服務(wù)交互,用戶無(wú)需通過(guò)命令罪帖,直接在dashboard界面上就能夠完成創(chuàng)建實(shí)例促煮、分配IP地址以及配置訪問(wèn)控制等操作邮屁。計(jì)算服務(wù)
a) nova:在OpenStack環(huán)境中計(jì)算實(shí)例的生命周期管理。按需響應(yīng)完成生成菠齿、調(diào)度佑吝、回收虛擬機(jī)等操作。除了管理虛擬機(jī)外還可以管理網(wǎng)絡(luò)绳匀,如分配網(wǎng)絡(luò)地址芋忿、vlan和隔離等。網(wǎng)絡(luò)服務(wù)
a) neutron:neutron之前被稱為quantum疾棵,主要負(fù)責(zé)為其它OpenStack服務(wù)提供網(wǎng)絡(luò)連接即服務(wù)戈钢,neutron基于插件架構(gòu)因此可以支持眾多的網(wǎng)絡(luò)提供商和技術(shù)∈嵌基于neutron服務(wù)殉了,用戶可以在openstack上建立負(fù)載平衡、VPN拟枚、route宣渗、配置網(wǎng)絡(luò)地址和網(wǎng)段等。存儲(chǔ)服務(wù):
a) 對(duì)象存儲(chǔ)swift: swift的實(shí)現(xiàn)方式像是一個(gè)文件服務(wù)器需要掛載目錄梨州,在這樣的方式下,swift將對(duì)象和文件寫到多個(gè)存儲(chǔ)裝置中田轧。swift上存儲(chǔ)的一般是圖片暴匠、文字和多媒體等,基于數(shù)據(jù)復(fù)制和可擴(kuò)展架構(gòu)的swift具有很高的容錯(cuò)性傻粘,當(dāng)一臺(tái)存儲(chǔ)裝置故障時(shí)每窖,其他存儲(chǔ)裝置中仍然保留著資料。
b) 塊存儲(chǔ)cinder:為運(yùn)行實(shí)例而提供的持久性塊存儲(chǔ)弦悉≈系洌可插拔驅(qū)動(dòng)的架構(gòu)有助于創(chuàng)建和管理塊存儲(chǔ)設(shè)備。管理員可以通過(guò)cinder創(chuàng)建volume稽莉、創(chuàng)建虛擬機(jī)快照等瀑志。共享服務(wù):
a) identity(keystone):為其他OpenStack服務(wù)提供認(rèn)證和授權(quán)服務(wù),為所有的OpenStack服務(wù)提供一個(gè)端點(diǎn)目錄污秆。keystone本身無(wú)法提供身份驗(yàn)證劈猪,但是可以集成各種其他目錄服務(wù)實(shí)現(xiàn)多種形式的身份驗(yàn)證。
b) image(glance):存儲(chǔ)和檢索虛擬機(jī)磁盤鏡像良拼,OpenStack計(jì)算服務(wù)會(huì)在部署實(shí)例時(shí)使用glance服務(wù)战得。
c) telemetry:為OpenStack云的計(jì)費(fèi)、基準(zhǔn)庸推、擴(kuò)展性以及統(tǒng)計(jì)等目的提供監(jiān)測(cè)和計(jì)量常侦。高層次服務(wù):
a) 編排:Orchestration服務(wù)支持多樣化的綜合的云應(yīng)用浇冰,通過(guò)調(diào)用OpenStack-native REST API和CloudFormation-compatible Query API,支持:term:HOT <Heat Orchestration Template (HOT)>
格式模板或者AWS CloudFormation格式模板聋亡。
OpenStack架構(gòu)圖如下所示:
- 位于最上面的dashboard是圖形用戶界面肘习,底層服務(wù)提供ui接口給dashboard,dashboard可以與底層服務(wù)交互從而為用戶提供web自服務(wù)杀捻。
- network不僅向dashboard提供ui井厌,還需要為compute服務(wù)提供網(wǎng)絡(luò)連接。
- compute被認(rèn)為是OpenStack的核心致讥,負(fù)責(zé)處理工作負(fù)載流程仅仆。compute服務(wù)不僅依賴network服務(wù)為其提供網(wǎng)絡(luò)連接,還需要block存儲(chǔ)服務(wù)提供volumes垢袱。此外compute服務(wù)會(huì)將鏡像存儲(chǔ)在鏡像服務(wù)中墓拜。
- image服務(wù)負(fù)責(zé)存儲(chǔ)和檢索虛擬機(jī)磁盤鏡像,compute服務(wù)會(huì)將鏡像存儲(chǔ)在image中请契,并且需要依賴image中的鏡像部署vm咳榜。
- image將disk文件存儲(chǔ)在object存儲(chǔ)中,vm通過(guò)restful API將對(duì)象數(shù)據(jù)存儲(chǔ)在swift中爽锥,cinder也可以將volumes備份到swift中涌韩。
- block存儲(chǔ)為compute服務(wù)提供volumes, 在VM看來(lái)block存儲(chǔ)提供的volume就像是虛擬硬盤氯夷,可以用來(lái)存儲(chǔ)數(shù)據(jù)
- identity為所有服務(wù)提供認(rèn)證和權(quán)限管理臣樱,簡(jiǎn)而言之,OpenStack上的每一個(gè)操作都需要通過(guò)keystone的審核腮考。
OpenStack Ocata版本安裝
1 安裝環(huán)境
從官網(wǎng)文檔獲悉雇毫,安裝一套o(hù)penstack環(huán)境至少需要兩臺(tái)虛擬機(jī),一臺(tái)作為controller節(jié)點(diǎn)踩蔚,一臺(tái)作為compute節(jié)點(diǎn)棚放,block存儲(chǔ)節(jié)點(diǎn)和object節(jié)點(diǎn)可以選擇性安裝。本次僅安裝controller節(jié)點(diǎn)和compute節(jié)點(diǎn)馅闽。
即使是搭建概念驗(yàn)證環(huán)境飘蚯,OpenStack也對(duì)環(huán)境有一定的要求,最低標(biāo)準(zhǔn)如下所示:
- Controller Node: 1 processor, 4 GB memory, and 5 GB storage
- Compute Node: 1 processor, 2 GB memory, and 10 GB storage
2 安裝準(zhǔn)備
2.1 設(shè)置hostname
- 編輯控制節(jié)點(diǎn)上的/etc/hosts文件捞蛋,修改控制器節(jié)點(diǎn)的hostname孝冒。
- 編輯計(jì)算節(jié)點(diǎn)上的/etc/hosts文件,修改計(jì)算節(jié)點(diǎn)的hostname拟杉。
2.2 設(shè)置網(wǎng)絡(luò)接口
1庄涡、將控制節(jié)點(diǎn)上的第二個(gè)網(wǎng)口設(shè)置為provide interface,無(wú)需為其分配IP搬设。編輯/etc/network/interface文件穴店,添加下面內(nèi)容后重啟控制節(jié)點(diǎn)撕捍。
auto ens192(第二塊網(wǎng)口名稱)
iface ens192 inet manual
up ip link set dev $IFACE up
down ip set dev $IFACE down
2、將計(jì)算節(jié)點(diǎn)上的第二個(gè)網(wǎng)口設(shè)置為provide interface泣洞,具體操作與上面相同忧风。
2.3 網(wǎng)絡(luò)時(shí)間協(xié)議NTP
在各個(gè)節(jié)點(diǎn)上安裝chrony,確保各個(gè)節(jié)點(diǎn)能夠準(zhǔn)確同步服務(wù)球凰。
控制節(jié)點(diǎn)
1狮腿、安裝chrony
apt install chrony
2、確保計(jì)算節(jié)點(diǎn)能夠連接控制上的chrony呕诉,在/etc/chrony/chrony.conf中添加:
server NTP_SERVER iburst
allowe 172.171.0.0/24(計(jì)算節(jié)點(diǎn)網(wǎng)段)
3缘厢、重啟NTP服務(wù)
service chrony restart
計(jì)算節(jié)點(diǎn)
1、安裝chrony
apt install chrony
2甩挫、確保計(jì)算節(jié)點(diǎn)能夠連接控制上的chrony贴硫,在/etc/chrony/chrony.conf中添加:
server NTP_SERVER iburst
注釋下述內(nèi)容 :
pool 2.debian.pool.ntp.org iburst
3、重啟NTP服務(wù)
service chrony restart
驗(yàn)證
1伊者、在控制節(jié)點(diǎn)上執(zhí)行下述命令英遭,結(jié)果中帶星號(hào)的是NTP當(dāng)前同步的地址。
chronyc sources
2亦渗、 在計(jì)算節(jié)點(diǎn)上執(zhí)行下述命令挖诸,結(jié)果中“Name/IP address”一欄顯示的應(yīng)該是控制節(jié)點(diǎn)的hostname。
chronyc sources
2.4 啟用openstack庫(kù)
在所有節(jié)點(diǎn)執(zhí)行下列操作法精,啟用openstack庫(kù):
apt install software-properties-common
add-apt-repository cloud-archive:ocata
apt update
apt dist-upgrade # 升級(jí)包
apt install python-openstackclient #安裝openstack客戶端
2.5安裝數(shù)據(jù)庫(kù)
1税灌、在控制節(jié)點(diǎn)安裝數(shù)據(jù)庫(kù)
apt install mariadb-server python-pymysql
2、創(chuàng)建/etc/mysql/mariadb.conf.d/99-openstack.cnf亿虽,并編輯內(nèi)容如下
bind-address = [controller-ip]
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
3、運(yùn)行mysql_secure_installation腳本來(lái)保證數(shù)據(jù)庫(kù)安全苞也,為root賬戶設(shè)置一個(gè)合適的密碼
mysql_secure_installation
2.6 安裝消息隊(duì)列服務(wù)
1洛勉、使用RabbitMQ消息隊(duì)列服務(wù),在controller安裝消息隊(duì)列服務(wù)
apt install rabbitmq-server
2如迟、添加用戶收毫,用合適的密碼替代‘RABBIT_PASS’。
rabbitmqctl add_user openstack RABBIT_PASS
3殷勘、用戶權(quán)限配置
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
2.7 安裝memcache
1此再、認(rèn)證服務(wù)的認(rèn)證機(jī)制使用Memcached來(lái)緩存token,一般運(yùn)行在控制節(jié)點(diǎn)上玲销。在控制節(jié)點(diǎn)上執(zhí)行:
apt install memcached python-memcache
2输拇、編輯/etc/memcached.conf,將”-i 127.0.0.1“中的IP改成控制節(jié)點(diǎn)IP贤斜。
3策吠、重啟memcache服務(wù)
service memcached restart
3 認(rèn)證服務(wù)
用戶使用OpenStack時(shí)逛裤,通常第一個(gè)接觸的服務(wù)就是認(rèn)證服務(wù),只有經(jīng)過(guò)認(rèn)證服務(wù)認(rèn)證猴抹,用戶才能使用其他OpenStack服務(wù)带族。另外認(rèn)證服務(wù)還可以和一些外部用戶管理系統(tǒng)(如LDAP)進(jìn)行集成。認(rèn)證服務(wù)的主要組成包括:
- Server:通過(guò)RESTful接口提供認(rèn)證蟀给、授權(quán)服務(wù)的中央服務(wù)器蝙砌;
- Drivers:集成到中央服務(wù)器中,負(fù)責(zé)獲取OpenStack外部倉(cāng)庫(kù)中的認(rèn)證信息跋理。
- Modules:運(yùn)行于使用認(rèn)證服務(wù)的OpenStack組件的地址空間中择克,負(fù)責(zé)攔截服務(wù)請(qǐng)求,提取用戶證書后發(fā)往中央服務(wù)器請(qǐng)求授權(quán)薪介。
認(rèn)證服務(wù)安裝在控制節(jié)點(diǎn)祠饺,以下就是具體安裝步驟。
3.1 先決條件
1汁政、使用root用戶進(jìn)入數(shù)據(jù)庫(kù)道偷,創(chuàng)建keystone數(shù)據(jù)庫(kù),并賦予適當(dāng)?shù)臋?quán)限:
mysql -u root -p
> CREATE DATABASE keystone;
> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
其中 'KEYSTONE_DBPASS'是自己設(shè)置的密碼记劈,由于安裝過(guò)程中設(shè)置的密碼較多勺鸦,建議設(shè)置成易記的密碼。
3.2安裝配置組件
1目木、安裝keystone
apt install keystone
2换途、編輯/etc/keystone/keystone.conf:
[database]
connection=mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
#KEYSTONE_DBPASS是創(chuàng)建keystone數(shù)據(jù)庫(kù)時(shí)設(shè)置的密碼
[token]
provider=fernet
3、同步認(rèn)證服務(wù)數(shù)據(jù)庫(kù)
su -s /bin/sh –c "keystone-manage db_sync" keystone
4刽射、初始化Fernet key倉(cāng)庫(kù)
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
5军拟、bootstrap認(rèn)證服務(wù)
keystone-manage bootstrap --bootstrap-password ADMIN_PASS --bootstrap-admin-url http://controller:35357/v3/ --bootstrap-internal-url http://controller:5000/v3/ --bootstrap-public-url http://controller:5000/v3/ --bootstrap-region-id RegionOne
其中‘ADMIN_PASS’是admin用戶的密碼,請(qǐng)自行定義誓禁。
3.3. 配置Apache HTTP服務(wù)器
1懈息、 編輯/etc/apache2/apache2.conf,添加
ServerName controller
3.4 完成安裝
1摹恰、 重啟Apache服務(wù)辫继,刪除默認(rèn)的SQL數(shù)據(jù)庫(kù)
service apache2 restart
rm -f /var/lib/keystone/keystone.db
2、 配置管理員帳號(hào)
$ export OS_USERNAME=admin
$ export OS_PASSWORD=ADMIN_PASS
$ export OS_PROJECT_NAME=admin
$ export OS_USER_DOMAIN_NAME=Default
$ export OS_PROJECT_DOMAIN_NAME=Default
$ export OS_AUTH_URL=http://controller:35357/v3
$ export OS_IDENTITY_API_VERSION=3
ADMIN_PASS是bootstrap認(rèn)證服務(wù)時(shí)設(shè)置的密碼俗慈。
3姑宽、Identity service為其他OpenStack服務(wù)提供認(rèn)證服務(wù),而認(rèn)證服務(wù)需要domains, projects, users和roles闺阱。因此安裝好keystone后先創(chuàng)建service項(xiàng)目:
openstack project create --domain default --description "Service Project" service
4炮车、一般的操作無(wú)需使用admin用戶,創(chuàng)建一個(gè)demo項(xiàng)目和用戶,作為普通用戶使用示血。
#創(chuàng)建一個(gè)demo項(xiàng)目
openstack project create --domain default --description "Demo Project" demo
#創(chuàng)建一個(gè)demo 用戶
openstack user create --domain default --password-prompt demo
6棋傍、創(chuàng)建user角色,并且將user角色添加到demo項(xiàng)目和用戶中:
openstack role create user
openstack role add --project demo --user demo user
認(rèn)證服務(wù)到此安裝完成难审,在安裝其他服務(wù)前先驗(yàn)證認(rèn)證服務(wù)瘫拣。
3.5. 驗(yàn)證操作
1、安全起見告喊,禁用暫時(shí)的認(rèn)證令牌機(jī)制麸拄。編輯/etc/keystone/keystone-paste.ini,將[pipeline:public_api]黔姜、 [pipeline:admin_api]拢切、 [pipeline:api_v3] sections 中的admin_token_auth刪除。
2秆吵、取消設(shè)置臨時(shí)的OS_AUTH_URL和 OS_PASSWORD環(huán)境變量
unset OS_AUTH_URL OS_PASSWORD:
unset OS_AUTH_URL OS_PASSWORD
3淮椰、admin用戶請(qǐng)求認(rèn)證token
openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue
4、demo用戶請(qǐng)求認(rèn)證token
openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name demo --os-username demo token issue
3.6. 創(chuàng)建腳本
1纳寂、創(chuàng)建openstack客戶端環(huán)境腳本admin-openrc:
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS #admin用戶的密碼
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
2主穗、為demo用戶創(chuàng)建demo-openrc腳本:
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS #demo用戶的密碼
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
3、加載admin-openrc文件毙芜,作為admin用戶運(yùn)行客戶端忽媒,請(qǐng)求認(rèn)證token:
. admin-openrc
openstack token issue
4 鏡像服務(wù)
鏡像服務(wù)是IaaS的核心服務(wù),可以接受disk鏡像或server鏡像的API請(qǐng)求腋粥,也可以接受終端用戶和OpenStack計(jì)算組件的metadata定義晦雨,并且支持存儲(chǔ)鏡像到多種類型的倉(cāng)庫(kù)中,包括OpenStack的對(duì)象存儲(chǔ)中隘冲。用戶可以使用鏡像服務(wù)發(fā)現(xiàn)闹瞧、注冊(cè)、獲取虛擬機(jī)鏡像展辞,而且可以通過(guò)鏡像服務(wù)提供的rest api查詢虛擬機(jī)鏡像的metadata并獲取鏡像夹抗。鏡像服務(wù)的主要組件包括:
- glance-api:接收鏡像API的調(diào)用,諸如鏡像發(fā)現(xiàn)纵竖、恢復(fù)、存儲(chǔ)杏愤。
- glance-registry:存儲(chǔ)靡砌、處理、獲取鏡像的metadata珊楼,鏡像的metadata中包含鏡像的大小通殃、類型等信息。
- Database:存儲(chǔ)鏡像metadata,可以根據(jù)喜好選擇數(shù)據(jù)庫(kù)画舌,通常用戶會(huì)選用MySQL 或 SQLite堕担。
- Storage repository for image files:支持多種類型的倉(cāng)庫(kù),包括普通文件系統(tǒng)曲聂、對(duì)象存儲(chǔ)霹购、RADOS塊設(shè)備、VMware datastore以及HTTP朋腋。需要注意齐疙,其中一些倉(cāng)庫(kù)僅支持只讀方式使用。
- Metadata definition service:為廠商旭咽、admin贞奋、服務(wù)、用戶提示的通用API穷绵,用于自定義metadata轿塔,定義的metadata可以用于各種各樣的資源,例如鏡像仲墨、卷勾缭、配額等。
鏡像服務(wù)也安裝在控制節(jié)點(diǎn)上宗收,以下是鏡像服務(wù)的具體安裝過(guò)程漫拭。
4.1. 先決條件
1、 進(jìn)入數(shù)據(jù)庫(kù)混稽,創(chuàng)建glance數(shù)據(jù)庫(kù)采驻,并賦權(quán)限
mysql -u root -p
> CREATE DATABASE glance;
> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
將'GLANCE_DBPASS'替換成自定義的密碼。
2匈勋、 導(dǎo)入admin證書礼旅,獲取admin權(quán)限。
. admin-openrc
3洽洁、 創(chuàng)建glance用戶痘系,并設(shè)置密碼
openstack user create --domain default --password-prompt glance
4、 添加管理員角色到glance用戶和service項(xiàng)目中
openstack role add --project service --user glance admin
5饿自、添加glance服務(wù)實(shí)體
openstack service create --name glance --description "openstack image" image
6汰翠、添加image服務(wù)api endpoint
openstack endpoint create --region RegionOne image public http://controller:9292
openstack endpoint create --region RegionOne image internal http://controller:9292
openstack endpoint create --region RegionOne image admin http://controller:9292
4.2. 安裝配置組件
1、安裝glance
apt install glance
2昭雌、編輯/etc/glance/glance-api.conf文件
[database]
connection=mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
#glance數(shù)據(jù)庫(kù)密碼
[keystone_authtoken]
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=glance
password=GLANCE_PASS #glance用戶密碼
[paste_deploy]
flavor = keystone
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
3复唤、編輯/etc/glance/glance-registry.conf
[database]
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
#glance數(shù)據(jù)庫(kù)密碼
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = GLANCE_PASS #glance用戶密碼
[paste_deploy]
flavor = keystone
3、更新鏡像服務(wù)數(shù)據(jù)庫(kù)
su -s /bin/sh -c "glance-manage db_sync" glance
4烛卧、重啟鏡像服務(wù)
service glance-registry restart
service glance-api restart
4.3. 驗(yàn)證操作
1佛纫、以admin用戶身份運(yùn)行客戶端,并下載cirros鏡像
. admin-openrc
wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
2、以qcow2格式上傳鏡像到鏡像服務(wù)呈宇,設(shè)置為public確保其他服務(wù)可以使用該鏡像好爬。
openstack image create "cirros" --file cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --public
3、查看上傳好的鏡像
openstack image list
5 計(jì)算服務(wù)
5.1. 安裝配置控制節(jié)點(diǎn)
5.1.1 先決條件
1甥啄、進(jìn)入mysql存炮,創(chuàng)建數(shù)據(jù)庫(kù)nova_api、nova型豁、nova_cell0僵蛛,并賦予一定的權(quán)限。
create database nova_api;
create database nova;
create database nova_ce110;
grant all privileges on nova_api.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
grant all privileges on nova_api.* to 'nova'@'%' identified by 'NOVA_DBPASS';
grant all privileges on nova.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
grant all privileges on nova.* to 'nova'@'%' identified by 'NOVA_DBPASS';
grant all privileges on nova_ce110.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
grant all privileges on nova_ce110.* to 'nova'@'%' identified by 'NOVA_DBPASS';
其中'NOVA_DBPASS'是自定義的數(shù)據(jù)庫(kù)密碼迎变。操作完成后則退出數(shù)據(jù)庫(kù)充尉。
2、創(chuàng)建計(jì)算服務(wù)證書
#以admin身份運(yùn)行客戶端
. admin-openrc
#創(chuàng)建nova用戶
openstack user create --domain default --password-prompt nova
#將admin角色添加到nova用戶
openstack role add --project service --user nova admin
#創(chuàng)建nova服務(wù)體
openstack service create --name nova --description "openstack compute" compute
3衣形、創(chuàng)建Compute API service endpoints:
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
4驼侠、創(chuàng)建placement服務(wù)用戶,并自行設(shè)置密碼
openstack user create --domain default --password-prompt placement
5谆吴、添加placement用戶到service項(xiàng)目中倒源,并賦予admin角色。
openstack role add --project service --user placement admin
創(chuàng)建placement api實(shí)體
openstack service create --name placement --description "placement api" placement
創(chuàng)建placement api服務(wù)endpoint
openstack endpoint create --region RegionOne placement public http://controller:8778
openstack endpoint create --region RegionOne placement internal http://controller:8778
openstack endpoint create --region RegionOne placement admin http://controller:8778
5.1.2安裝配置組件
1句狼、安裝nova組件
apt install nova-api nova-conductor nova-consoleauth nova-novncproxy nova-scheduler nova-placement-ap
2笋熬、編輯/etc/nova/nova.conf文件
[api_database]
connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
#NOVA_DBPASS是nova數(shù)據(jù)庫(kù)的密碼
[database]
connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova
[DEFAULT]
transport_url=rabbit://openstack:RABBIT_PASS@controller
#RABBIT_PASS是在rabbitmq中創(chuàng)建的openstack帳號(hào)對(duì)應(yīng)的密碼
[api]
auth_strategy=keystone
[keystone_authtoken]
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=nova
password=NOVA_PASS
#NOVA_PASS是nova用戶對(duì)應(yīng)的密碼
[DEFAULT]
my_ip=10.0.0.11
use_neutron=True
firewall_driver=nova.virt.firewall.NoopFirewallDriver
#注釋掉[default]中的log_dir
[vnc]
enabled=true
vncserver_listen=$my_ip
vncserver_proxyclient_address=$my_ip
[glance]
api_servers=http://controller:9292
[oslo_concurrency]
lock_path=/var/lib/nova/tmp
[placement]
os_region_name=RegionOne
project_domain_name=Default
project_name=service
auth_type=password
user_domain_name=Default
auth_url=http://controller:35357/v3
username=placement
password=PLACEMENT_PASS
#PLACEMENT_PASS是placement用戶對(duì)應(yīng)的密碼
3、更新nova-api數(shù)據(jù)庫(kù)
su -s /bin/sh -c "nova-manage api_db sync" nova
報(bào)錯(cuò)如下所示:
解決方法:
編輯/etc/nova/nova.conf文件腻菇,注釋[database]和[api_database]中“connection=sqlite:////var/lib/nova/nova.sqlite”胳螟。再次執(zhí)行更新數(shù)據(jù)庫(kù)命令。
4筹吐、注冊(cè)cell0數(shù)據(jù)庫(kù)
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
5糖耸、創(chuàng)建cell1 cell
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
6、 更新nova數(shù)據(jù)庫(kù)
su -s /bin/sh -c "nova-manage db sync" nova
7丘薛、確認(rèn)cell0和cell1注冊(cè)成功
nova-manage cell_v2 list_cells
8嘉竟、重啟計(jì)算服務(wù)
service nova-api restart
service nova-consoleauth restart
service nova-scheduler restart
service nova-conductor restart
service nova-novncproxy restart
5.2. 安裝配置計(jì)算節(jié)點(diǎn)
5.2.1. 安裝配置組件
1、安裝nova組件
apt install nova-compute
2洋侨、編輯/etc/nova/nova.conf文件
[DEFAULT]
transport_url=rabbit://openstack:RABBIT_PASS@controller
#RABBIT_PASS是在rabbitmq中創(chuàng)建的openstack帳號(hào)對(duì)應(yīng)的密碼
[api]
auth_strategy=keystone
[keystone_authtoken]
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=nova
password=NOVA_PASS
#NOVA_PASS是 nova用戶的密碼
[DEFAULT]
my_ip=MANAGEMENT_INTERFACE_IP_ADDRESS
use_neutron=True
firewall_driver=nova.virt.firewall.NoopFirewallDriver
#MANAGEMENT_INTERFACE_IP_ADDRESS是計(jì)算節(jié)點(diǎn)上管理網(wǎng)絡(luò)的IP舍扰。
#注釋掉[default]中的log_dir
[vnc]
enabled=true
vncserver_listen=0.0.0.0
vncserver_proxyclient_address=$my_ip
novncproxy_base_url=http://controller:6080/vnc_auto.html
[glance]
api_servers=http://controller:9292
[oslo_concurrency]
lock_path=/var/lib/nova/tmp
[placement]
os_region_name=RegionOne
project_domain_name=Default
project_name=service
auth_type=password
user_domain_name=Default
auth_url=http://controller:35357/v3
username=placement
password=PLACEMENT_PASS
#PLACEMENT_PASS是placement用戶的密碼
3、檢查硬件是否支持虛擬化希坚,返回值大于0則硬件支持虛擬化边苹,否則需要進(jìn)行額外的配置。
egrep -c '(vmx|svm)' /proc/cpuinfo
當(dāng)返回值為0時(shí)吏够,表明硬件不支持虛擬機(jī),則編輯/etc/nova/nova-compute.conf文件,將libvirt類型從kvm改成qemu锅知。
4播急、重啟服務(wù)
service nova-compute restart
5.2.2. 添加計(jì)算節(jié)點(diǎn)到cell數(shù)據(jù)庫(kù)
在控制節(jié)點(diǎn)執(zhí)行以下操作步驟
1、獲取admin權(quán)限售睹,確認(rèn)數(shù)據(jù)庫(kù)中有計(jì)算節(jié)點(diǎn)
. admin-openrc
openstack hypervisor list
2桩警、發(fā)現(xiàn)計(jì)算節(jié)點(diǎn),新增計(jì)算節(jié)點(diǎn)時(shí)都需要執(zhí)行該操作昌妹。
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
5.2.3. 確認(rèn)操作
1捶枢、確認(rèn)操作也在控制節(jié)點(diǎn)執(zhí)行,獲取admin權(quán)限飞崖,查看服務(wù)組件烂叔,應(yīng)該運(yùn)行著4個(gè)服務(wù),“nova-consoleauth”固歪、“nova-scheduler”蒜鸡、“nova-conductor”在控制節(jié)點(diǎn),"nova-compute"在計(jì)算節(jié)點(diǎn)牢裳。
. admin-openrc
openstack compute service list
nova-conductor服務(wù)起不來(lái)逢防,查看日志發(fā)現(xiàn)一直報(bào)錯(cuò):“AccessRefused: (0, 0): (403) ACCESS_REFUSED - Login was refused using authentication mechanism AMQPLAIN”。
解決方法:分析發(fā)現(xiàn)可能是因?yàn)閛penstack用戶創(chuàng)建不成功蒲讯,查看rabbitmqctl中的用戶忘朝,發(fā)現(xiàn)確實(shí)沒(méi)有用戶,重新創(chuàng)建openstack用戶判帮。
#查看rabbitmq中的用戶
rabbitmqctl list_users
#添加用戶局嘁,RABBIT_PASS是openstack用戶的密碼,須與之前配置的保持一致
rabbitmqctl add_user openstack RABBIT_PASS
#再次查看rabbitmq中的用戶
rabbitmqctl list_users
創(chuàng)建用戶后脊另,重啟nova服務(wù)导狡,再次執(zhí)行以上步驟確認(rèn)nova服務(wù)安裝完成。
2偎痛、列出認(rèn)證服務(wù)中的API endpoints旱捧,確認(rèn)認(rèn)證服務(wù)的連接性
openstack catalog list
3、列出鏡像踩麦,確認(rèn)鏡像服務(wù)的連接性
openstack image list
4枚赡、檢查cells和placement api正常運(yùn)行
nova-status upgrade check
6 網(wǎng)絡(luò)服務(wù)
neutron允許創(chuàng)建、插入其他OpenStack服務(wù)管理的接口設(shè)備谓谦,采用插件式結(jié)構(gòu)因此可以容納各種類型的網(wǎng)絡(luò)設(shè)備和軟件贫橙,提供了OpenStack架構(gòu)和部署的靈活性。neutron主要包括以下模塊:
- neutron-server:接收和路由API請(qǐng)求到合適的OpenStack網(wǎng)絡(luò)插件反粥。
- OpenStack網(wǎng)絡(luò)插件和代理:負(fù)責(zé)插卢肃、拔port疲迂,創(chuàng)建網(wǎng)絡(luò)和子網(wǎng),以及提供IP地址莫湘。
- 消息隊(duì)列:通常安裝OpenStack的時(shí)候都會(huì)遇到尤蒿,負(fù)責(zé)在neutron-server和各種各樣的代理進(jìn)程之間路由信息,也可以作為數(shù)據(jù)庫(kù)存儲(chǔ)一些插件的網(wǎng)絡(luò)狀態(tài)幅垮。
6.1. 安裝配置控制節(jié)點(diǎn)
6.1.1. 先決條件
1腰池、登錄數(shù)據(jù)庫(kù),創(chuàng)建neutron數(shù)據(jù)庫(kù)忙芒,并賦予權(quán)限:
create database neutron;
#NEUTRON_DBPASS是數(shù)據(jù)庫(kù)密碼示弓,自行定義即可
grant all privileges on neutron.* to 'neutron'@'localhost' identified by 'NEUTRON_DBPASS';
grant all privileges on neutron.* to 'neutron'@'%' identified by 'NEUTRON_DBPASS';
2沥曹、獲取admin權(quán)限蝶防,創(chuàng)建網(wǎng)絡(luò)服務(wù)相關(guān)credentials:
. admin-openrc
#創(chuàng)建neutron用戶
openstack user create --domain default --password-prompt neutron
#添加admin角色到neutron用戶
openstack role add --project service --user neutron admin
#創(chuàng)建neutron服務(wù)體
openstack service create --name neutron --description "openstack networking" network
3、創(chuàng)建網(wǎng)絡(luò)服務(wù)api endpoint:
openstack endpoint create --region ReginOne network public http://controller:9696
openstack endpoint create --region ReginOne network internal http://controller:9696
openstack endpoint create --region ReginOne network admin http://controller:9696
部署Self-service 網(wǎng)絡(luò)
部署網(wǎng)絡(luò)服務(wù)有兩種選擇:
1)采用簡(jiǎn)單的結(jié)構(gòu)部署網(wǎng)絡(luò)服務(wù)悼做,僅支持實(shí)例連接provider 網(wǎng)絡(luò)(外部網(wǎng)絡(luò))甘桑,不支持私有網(wǎng)絡(luò)拍皮、路由服務(wù)、浮動(dòng)IP等跑杭。另外铆帽,只有admin或其他管理員用戶才能管理provide網(wǎng)絡(luò);
2)選項(xiàng)2在選項(xiàng)1的基礎(chǔ)上添加了三層服務(wù)德谅,支持實(shí)例連接私有網(wǎng)絡(luò)爹橱。普通用戶可以管理自己的私有網(wǎng)絡(luò),以及連接公網(wǎng)和私有的路由器窄做。另外愧驱,外部網(wǎng)絡(luò)可以借助浮動(dòng)IP地址訪問(wèn)私有網(wǎng)絡(luò)。
本次安裝中椭盏,選擇選項(xiàng)2:部署Self-service networks组砚。
1、在控制節(jié)點(diǎn)安裝服務(wù)組件掏颊。
apt install neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent
2糟红、編輯/etc/neutron/neutron.conf文件
[database]
connection=mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
#NEUTRON_DBPASS是neutron數(shù)據(jù)庫(kù)密碼
[DEFAULT]
core_plugin=ml2
service_plugins=router
allow_overlapping_ips=true
[DEFAULT]
transport_url=rabbit://openstack:RABBIT_PASS@controller
auth_strategy=keystone
#RABBIT_PASS是在rabbitmq中創(chuàng)建的openstack帳號(hào)對(duì)應(yīng)的密碼
[keystone_authtoken]
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=neutron
password=NEUTRON_PASS
#NEUTRON_PASS是neutron用戶密碼
[DEFAULT]
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[nova]
auth_url=http://controller:35357
auth_type=password
project_domain_name=default
user_domain_name=default
region_name=RegionOne
project_name=service
username=nova
password=NOVA_PASS
#NOVA_PASS是nova用戶密碼
3、配置ML2插件乌叶,編輯/etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
#配置支持的網(wǎng)絡(luò)類型
type_drivers=flat,vlan,vxlan
#self-service網(wǎng)絡(luò)支持vxlan
tenant_network_types=vxlan
mechanism_drivers=linuxbridge,l2population
#注釋掉type_drivers的值
[ml2]
extension_drivers=port_security
[ml2_type_flat]
flat_networks=provider
[ml2_type_vxlan]
vni_ranges=1:1000
[securitygroup]
enable_ipset=true
4盆偿、配置Linux bridge代理,編輯/etc/neutron/plugins/ml2/linuxbridge_agent.ini:
[linux_bridge]
#映射provider虛擬網(wǎng)絡(luò)到provider物理網(wǎng)絡(luò)接口准浴,PROVIDER_INTERFACE_NAME是第二塊網(wǎng)卡名稱
physical_interface_mappings=provider:PROVIDER_INTERFACE_NAME
#OVERLAY_INTERFACE_IP_ADDRESS是物理網(wǎng)絡(luò)接口的IP地址
[vxlan]
enable_vxlan=true
local_ip=OVERLAY_INTERFACE_IP_ADDRESS
l2_population=true
[securitygroup]
enable_security_group=true
firewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
5事扭、配置三層代理,編輯/etc/neutron/l3_agent.ini
[DEFAULT]
interface_driver=linuxbridge
6乐横、配置DHCP代理求橄,編輯/etc/neutron/dhcp_agent.ini
[DEFAULT]
interface_driver=linuxbridge
dhcp_driver=neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata=true
7今野、配置metadata agent,編輯/etc/neutron/metadata_agent.ini
#METADATA_SECRET是metadata proxy的密碼罐农,自行定義
[DEFAULT]
nova_metadata_ip=controller
metadata_proxy_shared_secret=METADATA_SECRET
8腥泥、配置計(jì)算服務(wù)使用網(wǎng)絡(luò)服務(wù),編輯/etc/nova/nova.conf
#NEUTRON_PASS是neutron用戶的密碼啃匿,METADATA_SECRET是metadata proxy的密碼
[neutron]
url=http://controller:9696
auth_url=http://controller:35357
auth_type=password
project_domain_name=default
user_domain_name=default
region_name=RegionOne
project_name=service
username=neutron
password=NEUTRON_PASS
service_metadata_proxy=true
metadata_proxy_shared_secret=METADATA_SECRET
9、更新數(shù)據(jù)庫(kù)
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
10蛆楞、重啟計(jì)算API服務(wù)和網(wǎng)絡(luò)服務(wù)
service nova-api restart
service neutron-server restart
service neutron-linuxbridge-agent restart
service neutron-dhcp-agent restart
service neutron-metadata-agent restart
#選擇網(wǎng)絡(luò)服務(wù)二溯乒,還需要重啟3層服務(wù)
service neutron-l3-agent restart
6.2. 安裝配置計(jì)算節(jié)點(diǎn)
計(jì)算節(jié)點(diǎn)負(fù)責(zé)處理實(shí)例的連接和安全組。
6.2.1. 安裝配置組件
1豹爹、安裝組件
apt install neutron-linuxbridge-agent
2裆悄、配置通用組件,編輯/etc/neutron/neutron.conf
[database]
[DEFAULT]
transport_url=rabbit://openstack:RABBIT_PASS@controller
[DEFAULT]
auth_strategy=keystone
[keystone_authtoken]
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=neutron
password=NEUTRON_PASS
6.2.2.部署Self-service網(wǎng)絡(luò)
1臂聋、在計(jì)算節(jié)點(diǎn)上也配置網(wǎng)絡(luò)選項(xiàng)2:Self-service networks光稼,編輯/etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
#PROVIDER_INTERFACE_NAME是底層provider物理網(wǎng)絡(luò)接口,網(wǎng)卡2的名稱
physical_interface_mappings=provider:PROVIDER_INTERFACE_NAME
#OVERLAY_INTERFACE_IP_ADDRESS是物理網(wǎng)絡(luò)地址孩等,即計(jì)算節(jié)點(diǎn)的IP地址
[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
2艾君、配置計(jì)算服務(wù)使用網(wǎng)絡(luò)服務(wù),編輯/etc/nova/nova.conf
[neutron]
url=http://controller:9696
auth_url=http://controller:35357
auth_type=password
project_domain_name=default
user_domain_name=default
region_name=RegionOne
project_name=service
username=neutron
password=neutron
3肄方、完成安裝冰垄,重啟計(jì)算服務(wù)
service nova-compute restart
service neutron-linuxbridge-agent restart
4、驗(yàn)證安裝权她,在控制節(jié)點(diǎn)執(zhí)行:
. admin-openrc
openstack extension list --network
查看neutron服務(wù)的agent是否都啟動(dòng)虹茶,理論上控制節(jié)點(diǎn)上有4個(gè)agent,計(jì)算節(jié)點(diǎn)上各有1個(gè):
. admin-openrc
openstack network agent list
7 Dashboard
7.1. 安裝配置
1隅要、將 Dashboard安裝在控制節(jié)點(diǎn)上蝴罪,執(zhí)行以下命令安裝組件:
apt install openstack-dashboard
2、編輯/etc/openstack-dashboard/local_settings.py
OPENSTACK_HOST="controller"
##所有主機(jī)都可以訪問(wèn)
ALLOWED_HOSTS=‘*’
SESSION_ENGINE='django.contrib.sessions.backends.cache'
CACHES={
'default': {
'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION':'controller:11211',
}
}
#啟用第三版認(rèn)證API
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
#配置為支持域
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
#配置API版本
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 2,
}
#通過(guò)dashboard創(chuàng)建的用戶的默認(rèn)域?yàn)閐efault
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
#通過(guò)dashboard創(chuàng)建的用戶默認(rèn)角色為user
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
3步清、重新加載web 服務(wù)器配置
service apache2 reload
7.2. 驗(yàn)證
1要门、登錄http://controller/horizon,查看dashboard頁(yè)面尼啡,確認(rèn)dashboard安裝成功暂衡。默認(rèn)域?yàn)閐efault,可以使用admin用戶登錄崖瞭,也可以實(shí)驗(yàn)demo用戶登錄狂巢。
訪問(wèn)horizon,報(bào)錯(cuò)500书聚,網(wǎng)上解決方法如下
cd /var/lib/openstack-dashboard/
ls –ltrh
chown www-data:www-data /var/lib/openstack-dashboard/secret_key
ls –ltrh
service apache2 reload
2唧领、horizon頁(yè)面出來(lái)藻雌,輸入用戶名和密碼,報(bào)錯(cuò)如下:
查看/var/log/apache2/error.log日志斩个,錯(cuò)誤信息“RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable”
解決方法:
1)胯杭、修改/etc/openstack-dashboard/local_settings.py,
將‘SESSION_ENGINE = 'django.contrib.sessions.backends.cache'改成
’SESSION_ENGINE = 'django.contrib.sessions.backends.file'
2)受啥、重新加載web 服務(wù)器配置
service apache2 reload
3做个、登錄控制面板后創(chuàng)建flavor、創(chuàng)建實(shí)例滚局,訪問(wèn)實(shí)例控制器居暖,發(fā)現(xiàn)無(wú)法連接。因?yàn)関nc地址是127.0.0.1,而不是controller IP藤肢。
解決方法:
1)太闺、修改controller上的/etc/nova/nova.conf
novncproxy_base_url=http://$my_ip:6080/vnc_auto.html
2)、修改computer上的/etc/nova/nova.conf
novncproxy_base_url=http://172.171.3.20:6080/vnc_auto.html
3)嘁圈、重啟nova相關(guān)服務(wù)
#控制節(jié)點(diǎn)
service nova-api restart
service nova-consoleauth restart
service nova-scheduler restart
service nova-conductor restart
service nova-novncproxy restart
#計(jì)算節(jié)點(diǎn)
service nova-compute restart
安裝參考文檔鏈接:
http://www.10tiao.com/html/625/201703/2652502241/1.html
http://www.10tiao.com/html/625/201703/2652502241/3.html
https://docs.openstack.org/ocata/install-guide-ubuntu/InstallGuide.pdf
http://wangzhijian.blog.51cto.com/6427016/1912487
http://wangzhijian.blog.51cto.com/6427016/1913082?utm_source=tuicool&utm_medium=referral
https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/neutron.html