最近在学习 OpenStack,于是在虚拟机上使用DevStack
部署了一个 All-In-One 的版本(也就是把所有的组件都放在了一个节点上),用于学习和测试。
Prerequisite
- VMware Workstation 15 Pro(也可使用
VirtualBox
或KVM
) - Ubuntu 16.04.5-server-amd64.iso(也可以使用其它Linux版本,只是OpenStack官网推荐Ubuntu。使用server版本可以节省内存等消耗。)
Ubuntu虚拟机至少分配4G内存。
Pre-Installation
安装好虚拟机后,一般来说只会用默认的账号登录,为了方便后续安装,可以先切换到root
用户
设置root密码:
1 | sudo passwd root |
设置密码后,可以切换到root:
1 | su root |
以下操作在 root 用户下进行。
IP设置
如果部署多节点,需要设置 Ubuntu 静态 IP 。Ubuntu 下配置静态的方法可以参考Ubuntu 设置静态 IP。
对于单节点,使用DHCP影响不大。
工具安装
git
1 | apt install git -y |
其它的大部分工具,如pip等,DevStack会在安装过程中自动检测并安装
环境设置
DevStack的运行需要一个拥有 sudo 权限的非 root 用户。这里创建一个名为stack
的用户:
1 | useradd -s /bin/bash -d /opt/stack -m stack |
赋权:
1 | echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers |
Configuration
接下来的安装过程,使用创建好的stack
用户:
1 | su stack |
下载DevStack
下载 DevStack 到 stack 用户的根目录下,我这里使用的是 queens 版本:
1 | cd |
也可以直接使用最新版本(master 分支):
1 | git clone https://git.openstack.org/openstack-dev/devstack |
具体的版本可以在这个链接查看。
配置local.conf
首先要确认虚拟机的IP,如果是设置了静态IP,使用静态IP即可;如果使用DHCP,则需要查看IP。
1 | ifconfig |
在输出里,可以看到ubuntu的IP以及对应网卡名称。例如,我的IP是192.168.99.10,子网掩码255.255.255.0,对应的网卡是ens33。
local.conf
是整个过程中非常重要的文件。这里仅做最简单的配置,配置文件的详细内容可以参考OpenStack官方文档。
1 | cd devstack |
输入以下内容(也可以直接下载我的文件并替换 IP 即可):
1 | [[local|localrc]] |
FLOATING_RANGE
设置为本地网络中未被使用的IP地址范围,例如192.168.99.224/27,代表192.168.99.225~192.168.99.254,这些IP要和虚拟机IP地址在一个子网。FIXED_RANGE
和FIXED_NETWORK_SIZE
用于限定之后 OpenStack 运行的实例可用的网络地址空间。FLAT_INTERFACE
设置为上一步查看到的网卡名称。ADMIN_PASSWORD
是管理员密码,即之后自动创建的OpenStack用户 admin 和 demo 的密码。DATABASE_PASSWORD
是 OpenStack 的 MySQL 管理员密码。RABBIT_PASSWORD
是 RabbitMQ(OpenStack 的消息队列)密码。SERVICE_PASSWORD
是 OpenStack 各个服务 (Nova, Glance,等)用于Keystone验证的密码。LOGFILE
设置了stack.sh
运行日志路径。
Installation
接下来,只需要运行一个脚本就能开始下载和安装了:
1 | ./stack.sh |
部署 OpenStack 是一个很需要耐心的过程,这不只是因为它本身安装时间较长,更是因为国内的网络问题以及容易出现一些各种各样的错误。但是大部分问题都是可以通过Google解决的,还有一些错误通过./unstack.sh && ./stack.sh
就消失了。进行每一步的过程中,多使用 VMware 的快照功能,减少重复操作和错误恢复的时间。
Congratulation
如果你能看到以下输出,就已经成功部署了 OpenStack
在浏览器输入http://192.168.99.10/dashboard
使用admin/secret
就可以登陆了
Troubleshooting
安装并升级pip
./stack.sh
默认是会检测和安装pip的,也可以提前完成,减少错误发生的可能性。
1 | apt install python-pip -y |
如果 pip 版本太旧,进行升级:
1 | pip install --upgrade pip |
如果升级 pip 后报错 ImportError: cannot import name main
,需要修改 /usr/bin/pip
1 | from pip import main |
配置pip源
如果 pip 安装 python module 过程中经常出现网络错误,可以修改 pip 源(在 stack
用户下)
1 | mkdir ~/.pip |
修改为豆瓣源:
1 | [global] |
ipv6 错误
在 VMware 界面,编辑 -> 虚拟网络编辑器 -> 更改设置
选中 VMnet8 网卡,并启用 IPV6 选项。
文件下载失败
安装过程中,会下载很多的文件,国内网络原因可能导致一些文件下载失败。一般来说有3种解决方案:
- 修改源,一般用于修改 ubuntu 源或者 pip 源。
- 在宿主机科学上网,再设置虚拟机使用 proxy 通过宿主机的代理进行连接。
- 在宿主机科学上网下载好文件后,传输到虚拟机。传输可以使用 scp,也可以直接利用 VMware 等提供的共享文件夹功能,放入虚拟机。
例如,我在安装过程中,无法下载 etcd-v3.1.10-linux-amd64.tar.gz
,查看 log 找到其下载地址,下载到宿主机之后,放在 E:\vmfiles
中,然后开启共享文件夹:
一般共享文件夹位于 /mnt/hgfs/
下。在 log 日志中,找到这个文件应该放置的位置,例如 /opt/stack/devstack/files
,复制到里面即可:
1 | cp /mnt/hgfs/vmfiles/etcd-v3.1.10-linux-amd64.tar.gz /opt/stack/devstack/files |
重新运行
1 | ./unstack.sh && ./stack.sh |
本文为博主原创文章,转载请注明出处。