前言
每次安装openstack,都是一个重复踩坑的过程,虽然越踩就越深刻,不过还是记录下文档吧。
环境
- 系统:CentOS 7
- 网卡:enp7s0,enp8s0
- SELinux: permissive/disabled**(重要)**
安装packstack
首先根据我之前文章的方法进行配置,使用CentOS7.2(1511)版本的软件源,然后安装openstack源。
yum -y install centos-release-openstack-mitaka
安装完源之后,根据配置vault软件源的方法,对openstack的源进行修改(因为eol了),配置好之后开始安装packstack。
yum -y install openstack-packstack
安装配置openstack
主要就是修改配置文件,当然,不修改也行,默认是all in one模式安装,密码随机生成。
生成安装配置文件
该文件包含了数据库的密码,ip,以及openstack各组件的参数,所有设置都在这个文件修改。
# 文件名(answer.conf),可自行定义,配置完后建议保留备份。
packstack --gen-answer-file=answer.conf
配置网络
默认配置好像是为vxlan模式,具体作用我并不了解,所以先把我知道的写下来。
生成配置时,默认使用网卡一的ip(DEFROUTE?)作为管理ip,如果是dhcp获取的,在安装前注意替换成静态ip(or 主机名?)。
注意,安装需要连接网络,替换静态ip若无法联网,则无法安装。
-
如果只有两块网卡,可以在管理网卡,通过配置网卡别名方式联网。(配置多个ip)
-
如果有三块网卡,那更好办了,直接使用网卡三来联网。
vlan模式
网卡一(enp7s0)用作管理网络,网卡二(enp8s0)用作数据网络(在vlan模式,可以通过trunk方式转发到交换机)。
# ...无关内容...
# Comma-separated list of network-type driver entry points to be
# loaded from the neutron.ml2.type_drivers namespace. ['local',
# 'flat', 'vlan', 'gre', 'vxlan']
CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vlan
# Comma-separated, ordered list of network types to allocate as
# tenant networks. The 'local' value is only useful for single-box
# testing and provides no connectivity between hosts. ['local',
# 'vlan', 'gre', 'vxlan']
CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vlan
# Comma-separated ordered list of networking mechanism driver entry
# points to be loaded from the neutron.ml2.mechanism_drivers
# namespace. ['logger', 'test', 'linuxbridge', 'openvswitch',
# 'hyperv', 'ncs', 'arista', 'cisco_nexus', 'mlnx', 'l2population',
# 'sriovnicswitch']
CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=openvswitch
# Comma-separated list of physical_network names with which flat
# networks can be created. Use * to allow flat networks with arbitrary
# physical_network names.
CONFIG_NEUTRON_ML2_FLAT_NETWORKS=*
# Comma-separated list of <physical_network>:<vlan_min>:<vlan_max> or
# <physical_network> specifying physical_network names usable for VLAN
# provider and tenant networks, as well as ranges of VLAN tags on each
# available for allocation to tenant networks.
CONFIG_NEUTRON_ML2_VLAN_RANGES=default:10:1000
# ...无关内容...
# Comma-separated list of bridge mappings for the OpenStack
# Networking Open vSwitch plugin. Each tuple in the list must be in
# the format <physical_network>:<ovs_bridge>. Example: physnet1:br-
# eth1,physnet2:br-eth2,physnet3:br-eth3
CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=default:br-ex
# Comma-separated list of colon-separated Open vSwitch
# <bridge>:<interface> pairs. The interface will be added to the
# associated bridge. If you desire the bridge to be persistent a value
# must be added to this directive, also
# CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS must be set in order to create
# the proper port. This can be achieved from the command line by
# issuing the following command: packstack --allinone --os-neutron-
# ovs-bridge-mappings=ext-net:br-ex --os-neutron-ovs-bridge-interfaces
# =br-ex:eth0
CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:enp8s0
配置密码
密码的配置相对简单,搜索**_PW**配置项,进行修改即可。
horizon(dashboard)的密码验证是调用keystone的,所以要修改管理页面的密码,直接修改keystone的密码即可。
安装依赖
这些都是openstack未明确指出的依赖,不安装无法正常配置openstack。
yum -y install mariadb-libs libvirt-client qemu-kvm
开始安装
执行以下命令即可。
packstack --answer-file=answer.conf
执行完之后,不报错的话,那就是安装完成了。
访问Dashboard
你以为安装完成就结束了?不信你访问dashboard试试看。
访问不了对吧,是的没错,这也是openstack的坑。(起码我用rdo装mitaka是这样的)
错误解决
无法访问dashboard
打开**/etc/httpd/conf.d/15-horizon_vhost.conf**,在VirtualHost容器内添加:
WSGIApplicationGroup %{GLOBAL}
无法创建实例
关闭selinux。(你一定没细心看本文。)
结语
我使用过很多脚本安装过openstack,有openshit,onestack等等,还有devstack。
然而却没有任何一个能安装成功,正常使用的。
唯独rdo的packstack成功了,在我看来,openstack的安装也是一大难题,坑点太多了,rdo真的是解决了一个大难题,虽然还有一点小坑就是了。
补充
后来又遇到了一些问题,导致无法正常安装,解决方法如下。
ERROR : Error appeared during Puppet run: x.x.x.x_provision.pp
在网上没有找到有关资料,经过一番研究,据我理解应该是openstack应用某些默认规则失败,比如网段冲突什么的。
解决方法简单粗暴,关闭这个provision的测试开关就好。(据猜测应该不影响使用)
# Specify 'y' to provision for demo usage and testing. ['y', 'n']
CONFIG_PROVISION_DEMO=n
# Specify 'y' to configure the OpenStack Integration Test Suite
# (tempest) for testing. The test suite requires OpenStack Networking
# to be installed. ['y', 'n']
CONFIG_PROVISION_TEMPEST=n