1 环境准备
准备三台机器,分别作为OpenStack的controller和compute节点、OpenDayLight节点,另外把controller作为本次的部署节点。其中controller和compute节点各两张网卡,odl节点只需一张网卡,且odl节点提前装好opendaylight。操作系统为centos7.4.
主机必须满足以下最低要求:
- 8GB内存
- 40GB磁盘空间
ip | host |
192.168.2.214 | controller |
192.168.2.158 | compute |
192.168.2.215 | odl |
1.1 关闭Selinux
vi /etc/sysconfig/selinux
更改为SELINUX=disabled
1.2 关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
1.3 设置主机名,hosts文件
vi /etc/hosts
192.168.2.214 controller
192.168.2.158 compute
192.168.2.215 odl
1.4 修改网卡名字
适用于centos,其他系统请另行百度
多节点部署需要将所有机器的网卡名统一,本文将controller和compute节点的第一张网卡改为eth0,第二张网卡改为eth1
vi /etc/default/grub (添加net.ifnames=0)
GRUB_CMDLINE_LINUX=”crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap net.ifnames=0 rhgb quiet”
grub2-mkconfig -o /boot/grub2/grub.cfg
vi /etc/udev/rules.d/70-persistent-ipoib.rules(添加pci设备信息)
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", ATTR{address}=="74:27:ea:6f:0f:e9", NAME="eth0"
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", ATTR{address}=="00:15:17:8e:fd:dc", NAME="eth1"
ATTR{address}为网卡的mac地址
1.5 重启机器
2 安装docker
在controller和compute节点执行以下步骤
2.1 加入Docker的源
tee /etc/yum.repos.d/docker.repo << 'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
2.2 通过yum安装docker
sudo yum install docker-engine
2.3 设置Docker
mkdir /etc/systemd/system/docker.service.d
tee /etc/systemd/system/docker.service.d/kolla.conf << 'EOF'
[Service]
MountFlags=shared
EOF
2.4 配置docker加速
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://6d9f25d8.m.daocloud.io
该脚本可以将 –registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。适用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1,其他版本可能有细微不同。
2.5 重启相关服务
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
3 配置免密登陆
controller节点执行
ssh-keygen
ssh-copy-id controller
ssh-copy-id compute
ssh-copy-id odl
4 部署OpenStack
在controller和compute节点执行以下操作
4.1 安装依赖
操作之前,确保pip软件包管理器已安装并升级到最新版本。
yum install epel-release
yum install python-pip
pip install -U pip
yum install python-devel libffi-devel gcc openssl-devel libselinux-python
4.2 安装ansible
yum install ansible
添加以下内容
vi /etc/ansible/ansible.cfg
[defaults]
host_key_checking=False
pipelining=True
forks=100
在controller节点执行以下操作
4.3安装kolla
git clone https://github.com/openstack/kolla
git clone https://github.com/openstack/kolla-ansible
复制相关文件
cp -r kolla-ansible/etc/kolla /etc/kolla/
cp kolla-ansible/ansible/inventory/* .
4.4 配置库存文件
下一步是准备我们的库存文件。库存是我们指定节点角色和访问凭证的完整文件。
Kolla-Ansible自带all-in-one和multinode示例库存文件。它们之间的区别在于前者是部署单节点OpenStack。这里我们属于多节点部署,所以编辑multinode文件:
[control]
controller
[network]
controller
[inner-compute]
[external-compute]
compute
[compute:children]
inner-compute
external-compute
[monitoring]
controller
[storage]
确认配置是否正确
ansible -m ping all
4.5 配置密码
我们部署中使用的密码存储在/etc/kolla/passwords.yml 文件中。现在所有的密码都是空白的,必须手动填写或通过运行随机密码生成器来填充:
cd kolla-ansible/tools
./generate_passwords.py
4.6 配置globals.yml文件
进行如下配置:
# Kolla options
kolla_base_distro: "centos"
kolla_install_type: "source"
openstack_release: "pike"
network_interface: "eth0"
neutron_external_interface: "eth1"
kolla_internal_vip_address: "192.168.2.250"
# Neutron - Networking Options
neutron_plugin_agent: "opendaylight"
# OpenDaylight
enable_opendaylight_qos: "yes"
enable_opendaylight_l3: "yes"
# OpenStack options
enable_opendaylight: "yes"
默认情况下,enable_haproxy:”yes” 因此需要将kolla_internal_vip_address设置为管理网络下未被使用的IP
4.7 配置模板文件
cd /root/kolla-ansible/ansible/roles/neutron/templates
vi ml2_conf.ini.j2
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = opendaylight_v2
extension_drivers = qos,port_security
[ml2_odl]
url = http://192.168.2.215:8080/controller/nb/v2/neutron
username = admin
password = admin
port_binding_controller = pseudo-agentdb-binding
url中的ip改成odl的ip,username和password为odlweb界面的账号密码
通过修改这个模板配置文件,可以让以后生成的容器中的配置文件设置成这个样子
4.8 检查依赖
-i 指定刚才修改的库存文件
cd kolla-ansible/tools
./kolla-ansible -i ~/multinode bootstrap-servers
4.9 预部署检查
./kolla-ansible -i ~/multinode prechecks
4.10 部署
./kolla-ansible -i ~/multinode deploy
4.11 集成opendaylight
controller节点
docker stop neutron_server
controller和compute节点
进入openvswitch_db容器,删除db文件
docker exec -ti openvswitch_db /bin/bash
rm -f /var/lib/openvswitch/conf.db
退出openvswitch_db并重启,然后进入openvswitch_vswitchd容器
docker restart openvswitch_db
docker exec -ti openvswitch_vswitchd /bin/bash
此时ovs应该是空的,执行ovs-vsctl show
可以看到类似如下信息
9f3b38cb-eefc-4bc7-828b-084b1f66fbfd
配置odl
ovs-vsctl set-manager tcp:192.168.2.215:6640
CONTROL_HOST是你安装的opendaylight所在的地址,如我的为192.168.2.215
ovs-vsctl set Open_vSwitch . other_config:local_ip=192.168.2.214
local_ip为你各个节点的ip,如我的controller是192.168.2.214,computr是192.168.2.158
验证
ovs-vsctl show
结果
195cf810-2589-42b4-a6c7-ad0004baf580
Manager "tcp:192.168.2.215:6640"
is_connected: true
Bridge br-int
Controller "tcp:192.168.2.215:6653"
is_connected: true
fail_mode: secure
Port br-int
Interface br-int
type: internal
验证
ovs-vsctl get Open_vSwitch . other_config
结果
{local_ip="192.168.2.214"}/{local_ip="192.168.2.158"}
controller节点
docker start neutron_server
进入mariadb容器
docker exec -ti mariadb /bin/bash
kolla部署openstack的时候没有设置mariadb的密码,系统随机生成了一个密码,我们要先找到这个密码
vi /etc/my.cnf
找到wsrep_sst_auth所在的行 root:后面的就是随机密码
wsrep_sst_auth = root:ju5ROOhqyUFiJhu1rVGkqzV7UmbpPg7sbKmNGRFa
进入mysql
mysql -u root -p
输入刚才找到的密码
清空neutron库
DROP DATABASE IF EXISTS neutron;
CREATE DATABASE neutron CHARACTER SET utf8;
退出mysql,退出mariadb容器,然后再进入到neutron_server容器
docker exec -ti neutron_server /bin/bash
重新生成数据
/var/lib/kolla/venv/bin/neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
重启neutron_server容器
docker restart neutron_server
至此集成结束
5 使用OpenStack
OpenStack需要一个openrc文件,其中设置了admin用户的凭证
kolla-ansible post-deploy
. /etc/kolla/admin-openrc.sh
安装基本的OpenStack客户端
pip install python-openstackclient python-glanceclient python-neutronclient
脚本创建网络、镜像等
. kolla-ansible/tools/init-runonce
参考资料
http://docs.opendaylight.org/projects/netvirt/en/latest/openstack-guide/openstack-with-netvirt.html#installing-opendaylight-on-an-existing-openstack
https://weibo.com/ttarticle/p/show?id=2313501000014220157340847224&display=0&retcode=6102
http://docs.opendaylight.org/projects/netvirt/en/latest/openstack-guide/openstack-with-netvirt.html#installing-opendaylight-on-an-existing-openstack