由於項目中需要使用OpenDaylight(Oxygen)替換OpenStack(Otaca)中的neutron-openvswitch-agent,能找到的一些資料都是比較舊的版本,官網上的文檔也一直沒有更新,導致中間踩了很多坑,特此記錄一下兩者對接的過程
首先是環境,此次對接使用的opendaylight版本是0.8.3的版本,OpenStack使用的阿里鏡像中的Ocata版本
對接必須確認opendaylight中feature:
odl-netvirt-openstack
已安裝
由於在部署Openstack時沒有分離出網絡節點,故控制節點與網絡節點為同一主機
在控制節點上進行如下操作:
1.在部署openstak的機器上確認實例:
nova list
2.清空實例
nova delete
3.查看子網
neutron subnet-list
4.查看路由
neutron router-list
5.查看路由接口
neutron router-port-list
6.刪除路由接口
neutron router-interface-delete
7.刪除子網
neutron subnet-delete
neutron net-list
8.刪除網絡
neutron net-delete
9.刪除路由
neutron router-delete
10.確認接口是否清空
neutron port-list
11.停止neutron相關服務
systemctl stop neutron-server
systemctl stop neutron-openvswitch-agent
systemctl disable neutron-openvswitch-agent
12.停止OVS並清空OVS的數據庫,再啟動OVS
systemctl stop openvswitch
rm -rf /var/log/openvswitch/*
rm -rf /etc/openvswitch/conf.db
systemctl start openvswitch
13.此時使用
ovs-vsctl show
查看ovs狀態時應該沒有任何的網橋
14.設置控制器全權控制OVS
ovs-vsctl set-manager tcp:${CONTROL_HOST}:6640
使用
ovs-vsctl show
命令后能看到opendaylight已經管理了OVS,並且生成了br-int的網橋。並且br-int也屬於odl管理
15.安裝ml2驅動:
yum install python-pip
pip install --upgrade distribute
git clone https://github.com/openstack/networking-odl -b stable/ocata
cd networking-odl
python setup.py install
16.修改/etc/neutron/plugins/ml2/ml2_conf.ini:
[ml2]
mechanism_drivers = opendaylight
#在文件最末加上
[ml2_odl]
password = admin
username = admin
#${CONTROL_HOST}這個值修改為odl的ip地址
url = http://${CONTROL_HOST}:8181/controller/nb/v2/neutron
17.將配置寫入neutron的數據庫中:
mysql -u root -p -e "drop database if exists neutron_ml2;"
mysql -u root -p -e "create database neutron_ml2 character set utf8;"
mysql -u root -p -e "grant all on neutron_ml2.* to 'neutron'@'%';"
neutron-db-manage --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf \
--config-file /etc/neutron/plugin.ini upgrade head
18.啟動neutron服務:
systemctl start neutron-server
19.可以通過odl查看是否有網絡(有結果返回即配置成功,若返回錯誤信息則需要檢查odl是否安裝了相應的組件)
curl -u admin:admin http://${CONTROL_HOST}:8181/controller/nb/v2/neutron/networks
20. openstack啟用odl控制
neutron-odl-ovs-hostconfig --datapath_type=system
在計算節點進行如下操作:
1.關閉計算節點的openvswitch agent
systemctl stop neutron-openvswitch-agent
systemctl disable neutron-openvswitch-agent
2.將計算節點的ovs中所有網橋以及管理地址清空
systemctl stop openvswitch
rm -rf /var/log/openvswitch/*
rm -rf /etc/openvswitch/conf.db
systemctl start openvswitch
3.設置控制器全權控制OVS
ovs-vsctl set-manager tcp:${CONTROL_HOST}:6640
驗證:
ovs-vsctl show
4.安裝openstack-odl驅動
yum install python-pip
pip install --upgrade distribute
git clone https://github.com/openstack/networking-odl -b stable/ocata
cd networking-odl
python setup.py install
5.openstack啟用odl控制(官方文檔未添加這一命令,但是必須運行,否則neutron仍然會使用openvswitch進行網絡組建,導致虛擬機無法啟動)
neutron-odl-ovs-hostconfig --datapath_type=system
此時opendaylight與open stack已經對接完成,可以正常建立虛擬機了
不過對接完成后在建立虛擬機時會出現Openstack已經分配好ip,但虛擬機實例內部網卡沒有ip的情況,此問題暫未解決(使用cirros鏡像測試)