环境

通过OpenStack-Ansible安装All-in-one (AIO) 用于:

  • 开发环境
  • 理解OpenStack服务是如何组合在一起的
  • 一个简单的实验环境

尽管这种方式不适合在生产部署,但是比较适合实验开发环境。

最小配置:

  • 8 vCPU’s
  • 50GB root部分
  • 8GB RAM

推荐的服务器配置:

  • CPU/主板 支持硬件辅助虚拟化
  • 8核心CPU
  • 80G root空间,或者60G空盘。如果使用第二块盘,需要配置bootstrap_host_data_disk_device参数。
  • 16GB 内存

可以在虚机中进行AIO安装进行,但是如果你的虚机不支持嵌套虚拟化的话,性能将会很差。如果是生产环境,推荐使每个角色进行多节点部署。

创建一个AIO

概述

下面是创建AIO的步骤,如果要自定义构建,则需要配置好第一步:

  1. 准备主机环境
  2. ansible 启动脚本和所需的roles
  3. AIO配置的启动脚本
  4. 运行Playbook

准备主机环境

当在一个新服务器上创建AIO版本的时候,建议升级系统包到最新版本,并且重启到新内核。

注:

  1. 使用root权限运行
  2. 在重启之前,确保SELINUX处于关闭。/etc/sysconfig/selinux应该被置为SELINUX=disabled。CentOS/RHEL中OpenStack-Ansible目前不支持SELinux。
  3. 如果你是在连接受限的情况下安装,需要看一下连接受限情况的相关手册再继续。
## Ubuntu / Debian
# apt-get update
# apt-get dist-upgrade
# reboot
## CentOS
# dnf upgrade
# dnf install git-core
# systemctl stop firewalld
# systemctl mask firewalld
# reboot

Ansible启动脚本和需要的角色

复制OpenStack-Ansiblerepo并且切换到gen种方式不适合在生产部署,但是比较适合实验开发环境。

最小配置:

  • 8 vCPU’s
  • 50GB root部分
  • 8GB RAM

推荐的服务器配置:

  • CPU/主板 支持硬件辅助虚拟化
  • 8核心CPU
  • 80G root空间,或者60G空盘。如果使用第二块盘,需要配置bootstrap_host_data_disk_device参数。
  • 16GB 内存

可以在虚机中进行AIO安装进行,但是如果你的虚机不支持嵌套虚拟化的话,性能将会很差。如果是生产环境,推荐使每个角色进行多节点部署。

创建一个AIO

概述

下面是创建AIO的步骤,如果要自定义构建,则需要配置好第一步:

  1. 准备主机环境
  2. ansible 启动脚本和所需的roles
  3. AIO配置的启动脚本
  4. 运行Playbook

准备主机环境

当在一个新服务器上创建AIO版本的时候,建议升级系统包到最新版本,并且重启到新内核。

注:

  1. 使用root权限运行
  2. 在重启之前,确保SELINUX处于关闭。/etc/sysconfig/selinux应该被置为SELINUX=disabled。CentOS/RHEL中OpenStack-Ansible目前不支持SELinux。
  3. 如果你是在连接受限的情况下安装,需要看一下连接受限情况的相关手册再继续。
## Ubuntu / Debian
# apt-get update
# apt-get dist-upgrade
# reboot
## CentOS
# dnf upgrade
# dnf install git-core
# systemctl stop firewalld
# systemctl mask firewalld
# reboot

Ansible启动脚本和需要的角色

复制OpenStack-Ansiblerepo并且切换到repo的根目录。

# git clone https://opendev.org/openstack/openstack-ansible \
    /opt/openstack-ansible
# cd /opt/openstack-ansible

下一步切换到要部署的适用的branch/tag中。从一个分支的head进行部署可能会导致安装有问题。如果是用于测试,最好先使用最新的标记的版本。

# # 列出所有目前的标签.
# git tag -l

## 找出稳定分支和最新标签
# git chec kout master
# git describe --abbrev=0 --tags

# # 取回最新标签
# git checkout master

注:Wallaby版本只和Debian 10 (buster), Ubuntu 18.04 (Bionic Beaver), Ubuntu 20.04 (Focal Fossa) 还有CentOS 8兼容。目前无法在CentOS Stream上安装.许多关键依赖项来自于EPEL资源库,并且不能用于CentOS Stream主机. 注意一下在CentOS 8上部署的生命周期问题。

下一步就是使用ansible启动脚本和roles来搭建环境。
运行以下ansible启动脚本和所需的roles:

# scripts/bootstrap-ansible.sh

注:你在使用ANSIBLE脚本构建PYTHON扩展功能的时候(例如pycrypto),可能会遇到以下报错:

configure: error: cannot run C compiled programs.

原因可能在于是由于与/tmp关联的文件系统使用了noexec挂载标志,可以通过运行以下命令来检查该标志:

# mount | grep $(df /tmp | tail -n +2 | awk '{print $1}') | grep noexec

你也可以指定一个没有此挂载选项的备用路径:

# TMPDIR=/var/tmp scripts/bootstrap-ansible.sh

启动AIO配置

为了使所有服务启动,主机必须要配置适当的磁盘分区,安装包,网络配置和OpenStack开发配置。
默认AIO启动脚本会以一些默认的配置值去部署一些列的OpenStack服务,以满足一些环境要求和构建开发测试系统。可以查看bootstrap-host role defaults默认文件来了解一些变量的配置。开发人员可以选择更改引导方式。当你希望AIO使用第二块磁盘或者使用相同roles去启动多节点的开发环境时,这些信息将很有用。

启动脚本已经将环境变量BOOTSTRAP_OPTS作为一个附加选项传递给启动进程中。比如,如果你希望将启动脚本在第二块盘(/dev/sdb)上进行重分区,可以执行以下命令,这也将会导致设备上的数据被擦除:

# export BOOTSTRAP_OPTS="bootstrap_host_data_disk_device=sdb"

其他的选项都可以通过空格简单的连接起来执行,比如:

# export BOOTSTRAP_OPTS="bootstrap_host_data_disk_device=sdb"
# export BOOTSTRAP_OPTS="${BOOTSTRAP_OPTS} bootstrap_host_data_disk_fs_type=xfs"

如果你安装时没有网络连接或者没有默认路由,你需要手动指定一个接口或者出向的连接。

# export BOOTSTRAP_OPTS="bootstrap_host_public_interface=eth1"

对于默认的AIO方案,可以通过执行以下命令进行配置:

# scripts/bootstrap-aio.sh

在合适的bootstrap-aio默认服务之上添加OpenStack服务,可以复制以.aio为扩展名的conf.d文件到/etc/openstack_deploy中,然后将扩展名改为.yml文件。例如要启动openstack的Telemetry服务:

# cd /opt/openstack-ansible/
# cp etc/openstack_deploy/conf.d/{aodh,gnocchi,ceilometer}.yml.aio /etc/openstack_deploy/conf.d/
# for f in $(ls -1 /etc/openstack_deploy/conf.d/*.aio); do mv -v ${f} ${f%.*}; done

可以在运行启动脚本和运行前更改这些SCENARIO环境变量。关键词aio会确保一系列基础OPENSTACK配置会被部署(cinder块存储, glance镜像服务, horizon面板, neutron网络服务, nova计算服务)。关键词lxcnspawn能够被用于设置容器后端,而关键词metal会在没有容器的情况下部署所有的服务。为了部署其他的服务,请将conf.d文件的名字(去掉.yml.aio扩展名)添加到SCENARIO环境变量中。每个关键字都应该用下划线限定,以下命令会实施一个带有barbican(key管理服务), cinder, glance, horizon, neutron, 和nova的AIO。它将会设置cinder存储后端为ceph并且会使用LXC作为容器后端。

# export SCENARIO='aio_lxc_barbican_ceph'
# scripts/bootstrap-aio.sh

注:如果metalaio关键词在一起使用的话,horizon不会被部署,因为haproxy和horizon的监听端口是冲突的。

如果要在默认配置基础上添加其他更适用的global overrides,需要编辑/etc/openstack_deploy/user_variables.yml的内容。为了了解可以替换roles,playbook和组变量中列出的默认值的各种方法,请参阅override默认配置
如果想用个性化配置而不是使用AIO引导程序,详细说明请参阅《 Deployment Guide 》

运行Playbook

最后,运行Playbook

# cd /opt/openstack-ansible/playbooks
# openstack-ansible setup-hosts.yml
# openstack-ansible setup-infrastructure.yml
# openstack-ansible setup-openstack.yml

这个安装过程可能需要一些时间,下面是正常情况下的时间消耗:

  • SSD盘的裸金属系统 ~ 30-50 分钟
  • SSD盘的虚拟机 ~ 45-60分钟
  • 机械盘的主机 ~ 90-120分钟
    一旦playbooks全部执行完毕,可以尝试在/etc/openstack_deploy/user_variables.yml中进行各种设置更改,并且只需要运行这一个playbook。
    例如,通过playbook运行keystone服务:
# cd /opt/openstack-ansible/playbooks
# openstack-ansible os-keystone-install.yml

重启AIO

由于AIO包括MariaDB/Galera的所有三个集群成员,因此在重新引导主机后必须重新初始化集群。
命令:

# cd /opt/openstack-ansible/playbooks
# openstack-ansible -e galera_ignore_cluster_state=true galera-install.yml

如果数据库集群启动失败,请查看Galera Cluster Recovery手册。

重建一个AIO

有时候需要删除所有容器重建AIO。但是一般无法完整地摧毁AIO。可以执行以下命令:

# # 移动到playbooks目录.
# cd /opt/openstack-ansible/playbooks

# # 摧毁所有容器
# openstack-ansible lxc-containers-destroy.yml

# # 停止所有本地不在容器里的服务
# for i in \
       $(ls /etc/init \
         | grep -e "nova\|swift\|neutron\|cinder" \
         | awk -F'.' '{print $1}'); do \
    service $i stop; \
  done

# # 卸载核心服务.
# for i in $(pip freeze | grep -e "nova\|neutron\|keystone\|swift\|cinder"); do \
    pip uninstall -y $i; done

# # 删除其余目录
# rm -rf /openstack /etc/{neutron,nova,swift,cinder} \
         /var/log/{neutron,nova,swift,cinder}

# # 删除PIP配置文件
# rm -rf /root/.pip

# # 移除APT包管理
# rm /etc/apt/apt.conf.d/00apt-cacher-proxy

删除AIO最好的方式就是重新安装系统,所以最好在虚拟机中或者云环境中创建。

AIO参考图里

这里有个基础图示去尝试展示AIO部署。
此图未按比例绘制,甚至没有100%准确,该图仅出于提供信息的目的而构建,仅供参考。

  ------->[ ETH0 == Public Network ]
          |
          V                        [  *   ] Socket Connections
[ HOST MACHINE ]                   [ <>v^ ] Network Connections
  *       ^  *
  |       |  |-------------------------------------------------------
  |       |                                                         |
  |       |---------------->[ HAProxy ]                             |
  |                                 ^                               |
  |                                 |                               |
  |                                 V                               |
  |                          (BR-Interfaces)<------                 |
  |                                  ^     *      |                 |
  *-[ LXC ]*--*----------------------|-----|------|----|            |
  |           |                      |     |      |  | |            |
  |           |                      |     |      |  | |            |
  |           |                      |     |      |  | |            |
  |           |                      |     |      V  * |            |
  |           *                      |     |   [ Galera x3 ]        |
  |        [ Memcached ]<------------|     |           |            |
  *-------*[ Rsyslog ]<--------------|--|  |           *            |
  |        [ Repos Server x3 ]<------|  ---|-->[ RabbitMQ x3 ]      |
  |        [ Horizon x2 ]<-----------|  |  |                        |
  |        [ Nova api ec2 ]<---------|--|  |                        |
  |        [ Nova api os ]<----------|->|  |                        |
  |        [ Nova console ]<---------|  |  |                        |
  |        [ Nova Cert ]<------------|->|  |                        |
  |        [ Cinder api ]<-----------|->|  |                        |
  |        [ Glance api ]<-----------|->|  |                        |
  |        [ Heat apis ]<------------|->|  | [ Loop back devices ]*-*
  |        [ Heat engine ]<----------|->|  |    \        \          |
  | ------>[ Nova api metadata ]     |  |  |    { LVM }  { XFS x3 } |
  | |      [ Nova conductor ]<-------|  |  |       *         *      |
  | |----->[ Nova scheduler ]--------|->|  |       |         |      |
  | |      [ Keystone x3 ]<----------|->|  |       |         |      |
  | | |--->[ Neutron agents ]*-------|--|---------------------------*
  | | |    [ Neutron server ]<-------|->|          |         |      |
  | | | |->[ Swift proxy ]<-----------  |          |         |      |
  *-|-|-|-*[ Cinder volume ]*----------------------*         |      |
  | | | |                               |                    |      |
  | | | -----------------------------------------            |      |
  | | ----------------------------------------- |            |      |
  | |          -------------------------|     | |            |      |
  | |          |                              | |            |      |
  | |          V                              | |            *      |
  ---->[ Compute ]*[ Neutron linuxbridge ]<---| |->[ Swift storage ]-