本文介紹如何在自己的PC環(huán)境搭建一個(gè)openstack實(shí)驗(yàn)環(huán)境。
1. 實(shí)驗(yàn)環(huán)境
硬件要求:
4核cpu
至少8G內(nèi)存敛瓷,建議16G,(如果使用8G內(nèi)存需要修改Vagrantfile,將os-ctl1的內(nèi)存改為5G野来,os-cpu1的內(nèi)存改為1G)
-
虛擬化軟件:
-
實(shí)驗(yàn)虛機(jī):
- os-ctl1: 192.168.56.15 (控制節(jié)點(diǎn),網(wǎng)絡(luò)節(jié)點(diǎn)踪旷,計(jì)算節(jié)點(diǎn)曼氛,除非針對(duì)該節(jié)點(diǎn)的特定用戶豁辉,否則下文將其稱為Allinone節(jié)點(diǎn)),默認(rèn)配置2個(gè)cpu舀患,8G內(nèi)存徽级。
- os-cpu1: 192.168.56.16 (計(jì)算節(jié)點(diǎn)),默認(rèn)配置2個(gè)cpu聊浅,1G內(nèi)存餐抢。
- os-net1: 192.168.56.17 (網(wǎng)絡(luò)節(jié)點(diǎn)),默認(rèn)配置1個(gè)cpu低匙,512M內(nèi)存旷痕。
為了區(qū)分實(shí)驗(yàn)用的虛機(jī)和實(shí)驗(yàn)過程中openstack創(chuàng)建的虛機(jī),下文將這兩臺(tái)虛機(jī)稱為宿主機(jī)顽冶,而openstack虛機(jī)稱為nova實(shí)例欺抗。
安裝和管理網(wǎng)絡(luò):192.168.56.0/24,該網(wǎng)絡(luò)為VirtualBox的Host-Only網(wǎng)絡(luò)强重,支持物理機(jī)和VirtualBox虛機(jī)間的互相訪問绞呈。
Openstack版本:Queens
2. 克隆項(xiàng)目并啟動(dòng)上述虛擬機(jī)
$ git clone https://github.com/lprincewhn/openstack.git
$ cd openstack
$ vagrant up
虛擬機(jī)啟動(dòng)完畢后可使用以下用戶登陸:
- root/vagrant
- vagrant/vagrantup
3. 安裝openstack
使用root用戶登陸os-ctl1,使用packstack來部署openstack竿屹。
Step 1 安裝Packstack
# yum install -y centos-release-openstack-queens
# yum install -y openstack-packstack
Packstack最簡(jiǎn)單的安裝方式是直接使用--allinone參數(shù)报强,但是在virtaulbox環(huán)境下,這種安裝方式有兩個(gè)問題:
- Packstack默認(rèn)使用設(shè)置了網(wǎng)關(guān)的網(wǎng)口所在網(wǎng)絡(luò)進(jìn)行安裝拱燃,即eth0秉溉,但是virtualbox中這個(gè)網(wǎng)口僅用于訪問外部網(wǎng)絡(luò),無法進(jìn)行虛機(jī)間通信碗誉,因此需要將ip從10.0.2.15修改為192.168.56.15召嘶。
- Packstack默認(rèn)創(chuàng)建demo租戶,如果要該demo正常工作哮缺,需要確保相關(guān)配置正確弄跌,如demo鏡像的下載URL,demo所需的網(wǎng)絡(luò)尝苇,為了避免這些配置工作铛只,可以修改配置,使其不創(chuàng)建demo糠溜。
Step 2 生成packsatack answer file
# packstack --allinone --gen-answer-file=allinone
Step 3 修改生成的配置文件
- 將其中的ip 10.0.2.15修改為主機(jī)名192.168.56.15
# vi allinone
# grep 192.168.56.15 allinone
CONFIG_CONTROLLER_HOST=192.168.56.15
CONFIG_COMPUTE_HOSTS=192.168.56.15
CONFIG_NETWORK_HOSTS=192.168.56.15
CONFIG_SSL_CERT_SUBJECT_CN=192.168.56.15
CONFIG_SSL_CERT_SUBJECT_MAIL=admin@192.168.56.15
CONFIG_AMQP_HOST=192.168.56.15
CONFIG_MARIADB_HOST=192.168.56.15
CONFIG_REDIS_HOST=192.168.56.15
- 取消安裝demo
# vi allinone
# grep CONFIG_PROVISION_DEMO allinone
CONFIG_PROVISION_DEMO=n
Step 4開始安裝
# packstack --answer-file=allinone
4. 打開Openstack Dashboard
在安裝用戶的所在目錄可以找到admin用戶的密碼淳玩,如:
# cat keystonerc_admin
unset OS_SERVICE_TOKEN
export OS_USERNAME=admin
export OS_PASSWORD='4be84115c3624a26'
export OS_AUTH_URL=http://192.168.56.15:5000/v3
export PS1='[\u@\h \W(keystone_admin)]\$ '
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3
然后通過URL在瀏覽器中打開dashboard:http://192.168.56.15。
5. 增加計(jì)算節(jié)點(diǎn)
有一些Openstack操作必須有多個(gè)計(jì)算節(jié)點(diǎn)才能進(jìn)行非竿,如實(shí)例遷移蜕着,跨宿主機(jī)的網(wǎng)絡(luò)通信等,因此本節(jié)將新增一個(gè)計(jì)算節(jié)點(diǎn)os-cpu1红柱。
拷貝一份之前的packstack answer file承匣,然后修改其中的兩個(gè)參數(shù):
- CONFIG_COMPUTE_HOSTS蓖乘,增加新的計(jì)算節(jié)點(diǎn)IP 192.168.56.16。
- EXCLUDE_SERVERS韧骗,為了避免影響已安裝的節(jié)點(diǎn)os-ctl1嘉抒,將其IP加入該參數(shù),使得packstack不會(huì)對(duì)該節(jié)點(diǎn)做任何操作袍暴。
# cp allinone addcpu
# diff allinone addcpu
86c86
< EXCLUDE_SERVERS=
---
> EXCLUDE_SERVERS=192.168.56.15
97c97
< CONFIG_COMPUTE_HOSTS=192.168.56.15
---
> CONFIG_COMPUTE_HOSTS=192.168.56.15,192.168.56.16
# packstack --answer-file=addcpu
這樣安裝第一次必定會(huì)失敗众眨,因?yàn)榘熏F(xiàn)有節(jié)點(diǎn)加入EXCLUDE_SERVERS后,packstack在安裝過程不會(huì)對(duì)其進(jìn)行任何修改容诬,即不會(huì)添加新增節(jié)點(diǎn)訪問現(xiàn)有節(jié)點(diǎn)的iptables規(guī)則。即新增的os-cpu1無法訪問控制節(jié)點(diǎn)上的mysql沿腰,rabbitmq等服務(wù)览徒,因此os-cpu1安裝完成后其服務(wù)無法正常啟動(dòng)。
針對(duì)這個(gè)問題颂龙,需要手動(dòng)添加一些規(guī)則到Allinone節(jié)點(diǎn)的iptables中习蓬。
通過比較兩個(gè)節(jié)點(diǎn)上已經(jīng)安裝的規(guī)則,可以找到需要添加的規(guī)則如下:
# iptables -I INPUT 2 -s 192.168.56.16/32 -p tcp -m multiport --dports 5671,5672 -m comment --comment "001 amqp incoming amqp_192.168.56.16" -j ACCEPT #訪問控制節(jié)點(diǎn)上的rabbitmq-server
# iptables -I INPUT 2 -s 192.168.56.16/32 -p tcp -m multiport --dports 3260 -m comment --comment "001 cinder incoming cinder_192.168.56.16" -j ACCEPT #訪問控制節(jié)點(diǎn)上的cinder服務(wù)
# iptables -I INPUT 2 -s 192.168.56.16/32 -p tcp -m multiport --dports 3306 -m comment --comment "001 mariadb incoming mariadb_192.168.56.16" -j ACCEPT #訪問控制節(jié)點(diǎn)上的mariadb
# iptables -I INPUT 2 -s 192.168.56.16/32 -p udp -m multiport --dports 4789 -m comment --comment "001 neutron tunnel port incoming neutron_tunnel_192.168.56.15_192.168.56.16" -j ACCEPT #訪問網(wǎng)絡(luò)節(jié)點(diǎn)上的neutron tunel
# iptables -I INPUT 2 -s 192.168.56.16/32 -p tcp -m multiport --dports 16509,49152:49215 -m comment --comment "001 nova qemu migration incoming nova_qemu_migration_192.168.56.15_192.168.56.16" -j ACCEPT #計(jì)算節(jié)點(diǎn)間進(jìn)行實(shí)例遷移時(shí)互相訪問
# service iptables save # 修改完畢后必須保存
重新運(yùn)行packstack:
# packstack --answer-file=addcpu
安裝完成后在Dashboard上已經(jīng)可以看到兩個(gè)計(jì)算節(jié)點(diǎn):
從上面防火墻規(guī)則可以看出措嵌,如果按照packstack安裝時(shí)默認(rèn)的防火墻規(guī)則配置方法躲叼,每增加一個(gè)計(jì)算節(jié)點(diǎn),都要在啟動(dòng)所有節(jié)點(diǎn)(包括控制企巢,網(wǎng)絡(luò)枫慷,計(jì)算節(jié)點(diǎn))上增加針對(duì)新節(jié)點(diǎn)IP的防火墻規(guī)則,配置復(fù)雜度隨著集群規(guī)模的擴(kuò)大以平方速度上升浪规。針對(duì)這個(gè)問題或听,一個(gè)可行的解決方案是:
使用packstack安裝完每個(gè)節(jié)點(diǎn)后,都手動(dòng)需修改這個(gè)節(jié)點(diǎn)的防火墻規(guī)則笋婿,將其針對(duì)具體節(jié)點(diǎn)的ACCEPT規(guī)則合并修改為針對(duì)整個(gè)管理網(wǎng)絡(luò)(即本文中的192.168.56.0/24)的規(guī)則誉裆,如下:
- 控制節(jié)點(diǎn)
# iptables -I INPUT 2 -s 192.168.56.0/24 -p tcp -m multiport --dports 5671,5672 -m comment --comment "001 amqp incoming amqp_192.168.56.0" -j ACCEPT #訪問控制節(jié)點(diǎn)上的rabbitmq-server
# iptables -I INPUT 2 -s 192.168.56.0/24 -p tcp -m multiport --dports 3260 -m comment --comment "001 cinder incoming cinder_192.168.56.0" -j ACCEPT #訪問控制節(jié)點(diǎn)上的cinder服務(wù)
# iptables -I INPUT 2 -s 192.168.56.0/24 -p tcp -m multiport --dports 3306 -m comment --comment "001 mariadb incoming mariadb_192.168.56.0" -j ACCEPT #訪問控制節(jié)點(diǎn)上的mariadb
- 網(wǎng)絡(luò)節(jié)點(diǎn)
# iptables -I INPUT 2 -s 192.168.56.0/24 -p udp -m multiport --dports 4789 -m comment --comment "001 neutron tunnel port incoming neutron_tunnel_192.168.56.0" -j ACCEPT #網(wǎng)絡(luò)節(jié)點(diǎn)和計(jì)算節(jié)點(diǎn)兩兩間的neutron tunel
- 計(jì)算節(jié)點(diǎn)
# iptables -I INPUT 2 -s 192.168.56.0/24 -p udp -m multiport --dports 4789 -m comment --comment "001 neutron tunnel port incoming neutron_tunnel_192.168.56.0" -j ACCEPT #網(wǎng)絡(luò)節(jié)點(diǎn)和計(jì)算節(jié)點(diǎn)兩兩間的neutron tunel
# iptables -I INPUT 2 -s 192.168.56.0/24 -p tcp -m multiport --dports 16509,49152:49215 -m comment --comment "001 nova qemu migration incoming nova_qemu_migration_192.168.56.0" -j ACCEPT #計(jì)算節(jié)點(diǎn)間進(jìn)行實(shí)例遷移時(shí)互相訪問
5. 增加網(wǎng)絡(luò)節(jié)點(diǎn)
拷貝一份之前的packstack answer file,然后修改其中的兩個(gè)參數(shù):
- CONFIG_NETWORK_HOSTS缸濒,增加新的計(jì)算節(jié)點(diǎn)IP 192.168.56.17足丢。
- EXCLUDE_SERVERS,為了避免影響已安裝的節(jié)點(diǎn)os-ctl1和os-cpu1庇配,將其IP加入該參數(shù)斩跌,使得packstack不會(huì)對(duì)這些節(jié)點(diǎn)做任何操作。
# cp addcpu addnet
# diff addcpu addnet
86c86
< EXCLUDE_SERVERS=192.168.56.15
---
> EXCLUDE_SERVERS=192.168.56.15,192.168.56.16
101c101
< CONFIG_NETWORK_HOSTS=192.168.56.15
---
> CONFIG_NETWORK_HOSTS=192.168.56.15,192.168.56.17
# packstack --answer-file=addnet
如果之前已經(jīng)把現(xiàn)有的兩個(gè)節(jié)點(diǎn)的防火墻策略修改為針對(duì)網(wǎng)絡(luò)放通讨永,則此時(shí)安裝就無需再次修改滔驶,可以直接成功。
6. 刪除計(jì)算節(jié)點(diǎn)和網(wǎng)絡(luò)節(jié)點(diǎn)
Openstack中還沒有提供刪除節(jié)點(diǎn)的接口卿闹,需要到數(shù)據(jù)庫中手動(dòng)清除揭糕。