前言

每次安装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