Ubuntu16安装OpenStack

文章目录
  1. 1. 前言
  2. 2. 目标
  3. 3. 环境准备
    1. 3.1. 更换sources.list(可选)
    2. 3.2. 时间同步
    3. 3.3. devstack下载
    4. 3.4. 创建stack用户
    5. 3.5. 更换pip源(可选)
    6. 3.6. 编译安装
    7. 3.7. 再次安装
    8. 3.8. 测试使用
    9. 3.9. 网络问题
    10. 3.10. 测试访问
    11. 3.11. 卸载devstack
  4. 4. 后记

前言

《VirtualBox中安装OpenStack》一文中,已经成功安装过openstack。如今,确定了研究方向就是OpenStack。第一步要做的,就是在实体机安装配置OpenStack。

由于版本更新,devstack目前只支持ubuntu16,而机房服务器使用的都是ubuntu14.04,很尴尬。尝试了旧的newton、mitaka、liberty,但是devstack依赖的keystone项目中没有了这三个分支,失败;尝试了新的pike、queens,但是ubuntu14中缺少相应的包,失败。

找到了DevStack 安装 grizzly-eol 版本 OpenStack一文,以为在local.conf中把分支改为tag就可以了。然而,报错接连不断,解决了N个小怪,随便出来个大BOSS就我拦住了。

最终,把系统换成了Ubuntu16,计划使用devstack安装最新版Queens,主要参考DevStack官方文档《优雅安装OpenStack》使用devstack安装OpenStack 双节点部署

目标

本文的目标是搭建一个 all-in-one OpenStack,所有核心服务都安装在ccrfox105节点上,节点IP为172.16.0.105。

核心服务包括:身份认证服务keystone,镜像服务glance,计算服务nova(默认使用KVM虚拟化),网络服务neutron,仪表板horizon。也需要包含一些支持服务,例如:SQL数据库,消息队列和NTP。

环境准备

更换sources.list(可选)

参考《Ubuntu更换源列表》

1、备份源列表文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

2、编辑源列表文件
sudo vim /etc/apt/sources.list

修改为:

1
2
3
4
5
6
7
8
9
10
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse  
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse

3、更新资源包
sudo apt-get update

时间同步

1、同步时区
执行命令sudo dpkg-reconfigure tzdata,然后选择Asia,Shanghai。

2、安装时间同步工具

1
2
3
sudo apt-get install ntpdate
sudo ntpdate cn.pool.ntp.org
date

devstack下载

1、安装git
sudo apt-get install git

2、下载devstack并切换到queens分支
git clone https://git.openstack.org/openstack-dev/devstack -b stable/queens

创建stack用户

方法一:
1、执行创建用户脚本
sudo devstack/tools/create-stack-user.sh

2、将devstack目录放到/opt/stack中并设置权限
sudo mv devstack /opt/stack

sudo chown -R stack:stack /opt/stack

3、切换到stack用户
sudo su - stack

方法二:
1、添加stack用户
sudo useradd -s /bin/bash -d /opt/stack -m stack

2、给stack用户添加sudo权限
echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack

3、将devstack目录放到/opt/stack中并设置权限
sudo mv devstack /opt/stack

sudo chown -R stack:stack /opt/stack

4、切换到stack用户
sudo su - stack

更换pip源(可选)

参考《python pip更换国内源》

1、安装python
sudo apt-get install python

2、创建pip.conf
mkdir ~/.pip && vim ~/.pip/pip.conf

写入内容如下:

1
2
3
4
5
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host = http://mirrors.aliyun.com/pypi/simple/

编译安装

1、拷贝local.conf
cd devstack && cp samples/local.conf ./

2、修改local.conf密码配置为:

1
2
3
4
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD

同时在最后添加:

1
2
3
GIT_BASE=http://git.trystack.cn
NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git
SPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git

3、拷贝local.sh
cp samples/local.sh ./

4、执行安装
./stack.sh

安装报错:E: Unable to locate package libsystemd-dev。
(1)安装libsystemd-dev,sudo apt install libsystemd-dev,没有找到libsystemd-dev这个包。

(2)查找libsystemd-dev,sudo apt search libsystemd-dev,果然没有找到libsystemd-dev。

(3)猜测是sources.list的锅,改成原sources.list,问题解决。

然后报错pip版本太低,升级却失败,删除.pip目录,问题解决。。。

接下来,顺利安装,最后报错:

1
2
3
4
5
6
2018-06-27 00:47:54.156 | More than one SecurityGroup exists with the name 'default'.
2018-06-27 00:47:55.193 | More than one SecurityGroup exists with the name 'default'.
2018-06-27 00:47:55.246 | ++./stack.sh:main:1390 err_trap
2018-06-27 00:47:55.254 | ++./stack.sh:err_trap:551 local r=1
2018-06-27 00:47:55.261 | stack.sh failed: full log in /opt/stack/logs/stack.sh.log.2018-06-27-082830
2018-06-27 00:47:55.264 | Error on exit

参考如何修改默认OpenStack安全组中的规则,查看securitygroup规则,openstack security group list

在多租户OpenStack环境中,存在多个名为“default”的安全组。在这种情况下,请使用安全组ID而不是安全组名称。云管理员可以使用OpenStack安全组列表来显示所有安全组及其当前分配的名称。

再次安装

我觉得上面的安装好像失败了,打算重装。
1、先在devstack目录中,执行卸载

1
2
./unstack.sh
./clean.sh

2、再次安装
./stack.sh

最后还是报同样的错误。不管了,测试下看看。

测试使用

1、访问 http://172.16.0.105/dashboard ,用户名输入admin,密码输入secret,登录控制台。

2、项目,网络,创建网络和路由

3、项目,计算,创建实例

报错:

1
Error: Failed to perform requested operation on instance "vm1", the instance has an error status: Please try again later [Error: Host 'ccrfox105' is not mapped to any cell].

我们查看一下openstack的服务是否正常:

1
2
3
openstack service list
openstack endpoint list
openstack compute service list

提示:Missing value auth-url required for auth plugin password
解决办法:进入devstack目录,执行

1
2
source openrc voidking project
source openrc admin admin

虽然Missing value auth-url required for auth plugin password的问题解决了,但是还是无法创建实例。

参考OpenStack应用、报错,执行nova-manage cell_v2 discover_hosts,问题解决。

网络问题

实例创建成功了,也分配了浮动IP为172.24.4.7,但是从ccrfox105上却ping不通实例。参考Openstack创建实例–horizon篇,进行如下设置:

1、项目,网络,安全组,创建安全组。

2、管理规则,添加出口入口icmp规则和tcp规则。

3、实例的安全组选择新建的规则。

然后,再次ping 172.24.4.7,网络就通了。

测试访问

1、项目,计算,实例,实例名称,日志。即可看到cirros系统的用户名和密码。

2、然后在ccrfox105上,ssh登录cirros系统。

卸载devstack

如果devstack安装失败或者不再需要,那么可以对它进行卸载。

执行./unstack.sh./clean.sh,卸载openstack。然后删除stack用户,删除/opt/stack目录。

或者,干脆重装系统,因为卸载后会有很多遗留问题。

后记

至此,完成了单节点OpenStack的安装,也进行了简单地创建实例和测试,nice。

接下来有两个计划,一个是尝试OpenStack更多的操作和设置,以便熟悉这个平台。另一个是使用devstack安装多节点OpenStack,或者手动安装多节点Openstack。计划搭建一个Controller节点和两个Compute节点。

在安装时,自作聪明地更换了sources.list和pip.conf,以为可以加速安装,没想到却给自己挖了坑,同学们引以为鉴啊。