OpenStack-Train 迁移至 openEuler 指导
软件介绍
OpenStack 简介
OpenStack 是一个社区,也是一个项目。它提供了一个部署云的操作平台或工具集,为组织提供可扩展的、灵活的云计算。
作为一个开源的云计算管理平台,OpenStack 由nova、neutron、glance、keystone、horizon等几个主要的组件组合起来完成具体工作。OpenStack 支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack 通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供 API 进行集成。
适配版本
本文使用“Train”版本进行适配,OpenStack Train版本于2019年10月16日发布,是部署最广泛的开源云基础设施软件的第20个版本。
DevStack 介绍
DevStack 是一组模块化脚本,运行这些脚本可以使开发人员快速轻松部署 OpenStack。这些脚本可以在裸机或虚拟机的单个节点上运行,也可以部署到多个节点。
DevStack 默认会安装 OpenStack 的核心服务,用户也可以修改配置文件来部署其他服务。通常,DevStack 从 git master 中拉取核心服务,也可以修改配置文件从稳定分支(stable branch)(如 stable/pike)克隆。
所有服务均从源安装,我们可以从devstack.github获取源。
本文使用 DevStack 脚本进行安装部署和测试,采用单机“All In One”模式,按照 CPU 架构不同,可以安装在 x86 或者 ARM 上。两者主要的安装步骤相同,仅有部分命令或者步骤有差异,具体差异点本文会有详细描述。
环境配置
建议部署环境内存大于 2 G。
软件平台
软件名称 | 版本号 | 安装方法 | 备注 |
---|---|---|---|
openEuler | 20.03-LTS-SP1 | iso | x86可以选择虚拟机或物理机部署,ARM只能在物理机部署 |
gcc | 7.3.0 | 见必要库和依赖安装 | |
python3 | 3.7.9 | 见必要库和依赖安装 | |
bash | 5.0 | 见必要库和依赖安装 | |
devstack | Latest | 见修改 devstack 脚本和安装配置 | 详见devstack |
必要依赖包
软件名称 | 版本号 | 安装方法 |
---|---|---|
python3-systemd | 234 | 见必要库和依赖安装 |
pcp-system-tools | 4.1.3 | 见必要库和依赖安装 |
haproxy | 2.0.14 | 见必要库和依赖安装 |
httpd httpd-devel | 2.4.43 | 见必要库和依赖安装 |
memcached | 1.5.10 | 见必要库和依赖安装 |
python3-devel | 3.7.9 | 见必要库和依赖安装 |
libffi-devel | 3.3.7 | 见必要库和依赖安装 |
open-iscsi-devel | 2.1.1 | 见必要库和依赖安装 |
libxml2 libxml2-devel python3-libxml2 | 2.9.10 | 见必要库和依赖安装 |
python3-lxml | 4.2.3 | 见必要库和依赖安装 |
libxslt libxslt-devel | 1.1.34 | 见必要库和依赖安装 |
edk2-ovmf(x86) edk2-aarch64(ARM) edk2-devel python3-edk2-devel | 202002 | 见必要库和依赖安装 |
qemu qemu-guest-agent | 4.1.0 | 见必要库和依赖安装 |
libvirt* python3-libvirt | 6.2.0 | 见必要库和依赖安装 |
rabbitmq-server | 3.7.23 | 见必要库和依赖安装 |
python3-copr | 1.105 | 见必要库和依赖安装 |
python3-uWSGI | 2.0.19 | 见必要库和依赖安装 |
python3-mod_wsgi | 4.6.4 | 见必要库和依赖安装 |
python3-sqlalchemy python3-sqlalchemy-utils | 1.2.19 | 见必要库和依赖安装 |
python3-scss | 1.3.5 | 见必要库和依赖安装 |
openeuler-lsb | 5.0 | 见必要库和依赖安装 |
mariadb-server | 10.3.9 | 见必要库和依赖安装 |
系统配置
关闭防火墙
执行以下命令,停止防火墙。
# systemctl stop firewalld.service
执行以下命令,关闭防火墙。
# systemctl disable firewalld.service
修改SELINUX为disabled
执行以下命令,关闭 SELINUX。
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
# setenforce 0
软件编译
必要库和依赖安装(本地yum源)
说明:
本节内容可以通过执行自动化脚本prep_install.sh实现,详见附录。
执行以下命令,安装脚本执行过程中所需的必要库和依赖。
# yum -y install tar git bash
# yum -y install python3-systemd
# yum -y install libffi-devel
# yum -y install open-iscsi-devel
# yum -y install libxml2-devel
# yum -y install python3-lxml python3-libxml2 libxslt libxslt-devel
# yum -y install pcp-system-tools
# yum -y install haproxy
# yum -y install qemu qemu-guest-agent
# yum -y install libvirt* python3-libvirt
# yum -y install httpd httpd-devel
# yum -y install memcached
# yum -y install mariadb-server
# yum -y install rabbitmq-server
# yum -y install python3-uWSGI
# yum -y install python3-mod_wsgi
# yum -y install python3-copr
# yum -y install python3-scss
# yum -y install gcc-c++
# yum -y install python3-devel
# yum -y install python3-sqlalchemy python3-sqlalchemy-utils
# yum -y install openeuler-lsb
利用 yum 源,安装 uefi 相关库,按照 CPU 架构不同,命令分别如下。
- x86 架构
# yum -y install edk2-ovmf edk2-devel python3-edk2-devel
- ARM 架构
# yum -y install edk2-aarch64 edk2-devel python3-edk2-devel
创建执行用户
使用root用户登录待安装主机,执行以下命令创建 stack 用户来执行脚本。
# useradd -s /bin/bash -d /home/stack -m stack
执行以下操作,为 stack 用户设置 root 用户权限,后续操作使用 stack 用户操作。
# chmod +w /etc/sudoers # vi /etc/sudoers //在sudoers文件的“root ALL=(ALL) ALL”下面,加入如下内容:stack ALL=(ALL) NOPASSWD: ALL # chmod -w /etc/sudoers
下载 devstack 脚本
切换 stack 用户,执行以下命令,下载 devstack 脚本文件:
# su - stack
# git clone https://opendev.org/OpenStack/devstack
以下操作均使用 stack 用户执行。
修改主机相关环境
说明:
本节内容可以通过执行自动化脚本prep_install.sh实现,详见附录。
执行
sudo vi /etc/httpd/conf/httpd.conf
命令,使用管理员权限在/etc/httpd/conf/httpd.conf
文件中增加如下配置,使之可以加载第三方插件服务,插入位置见下图。LoadModule wsgi_module modules/mod_wsgi_python3.so
执行如下命令,修正 yum 安装 edk2.x86_64 (ARM 架构的安装 edk2.aarch64)相关库时的bug,注意目录及文件相关权限。
x86 架构
# cd /usr/share # sudo mkdir OVMF && sudo chmod -R 755 OVMF # cd OVMF # sudo ln -s ../edk2/ovmf/OVMF_CODE.fd OVMF_CODE.fd # sudo ln -s ../edk2/ovmf/OVMF_VARS.fd OVMF_VARS.fd
ARM 架构
# cd /usr/share # sudo mkdir AAVMF && chmod -R 755 AAVMF # cd AAVMF # sudo ln -s ../edk2/aarch64/QEMU_EFI-pflash.raw AAVMF_CODE.fd # sudo ln -s ../edk2/aarch64/vars-tmplate-pflash.raw AAVMF_VARS.fd
在
/etc/libvirt/qemu.conf
文件中增加如下配置,增加 qemu 对 uefi 的支持。x86 架构
nvram = ["/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd","/usr/share/edk2/ovmf/OVMF_CODE.fd:/usr/share/edk2/ovmf/OVMF_VARS.fd"]
ARM 架构
nvram = ["/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd","/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw"]
修改devstack脚本和相关配置
执行以下命令,创建
local.conf
文件。# cd /home/stack/devstack # touch local.conf
编辑
local.conf
文件,配置如下内容。x86 架构
[[local|localrc]] HOST_IP=172.168.132.11 ///主机ip ADMIN_PASSWORD=a123456 ///各模块服务密码 DATABASE_PASSWORD=d123456 RABBIT_PASSWORD=r123456 SERVICE_PASSWORD=s123456 disable_service tempest ///默认关闭测试模块的加载 GIT_BASE=http://git.trystack.cn ///国内git源,用来下载OpenStack组件 NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git SPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git LOGFILE=$DEST/logs/stack.sh.log
ARM 架构
[[local|localrc]] HOST_IP=192.168.122.8 ///主机ip ADMIN_PASSWORD=a123456 ///各模块服务密码 DATABASE_PASSWORD=d123456 RABBIT_PASSWORD=r123456 SERVICE_PASSWORD=s123456 disable_service tempest ///默认关闭测试模块的加载 GIT_BASE=http://git.trystack.cn ///国内git源,用来下载OpenStack组件 NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git SPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git DOWNLOAD_DEFAULT_IMAGES=False ///修改mirros镜像地址,默认下载aarch64镜像 IMAGE_URLS="https://github.com/cirros-dev/cirros/releases/download/0.5.1/cirros-0.5.1-aarch64-disk.img" ETCD_DOWNLOAD_LOCATION=https://mirrors.huaweicloud.com/etcd/v3.3.12/etcd-v3.3.12-linux-arm64.tar.gz ///改用huaweicloud,减少脚本耗时 LOGFILE=$DEST/logs/stack.sh.log
说明:
本节以下内容可以通过执行自动化脚本prep_install.sh实现,详见附录。
编辑
/home/stack/devstack/stackrc
文件,修改下图所示字段值为 stable/train,指定待安装的 OpenStack 的版本。devstack 维护的平台暂不包含 openEuler,执行以下命令,适配 openEuler 版本安装方法。
# cd /home/stack/devstack # sed -i "/\# Git Functions/i\\function is_openeuler {\n\tif [[ -z \"\$os_VENDOR\" ]]; then\n\tGetOSVersion\n\tfi\n\n\t[[ \"\$os_VENDOR\" =~ (openEuler) ]]\n}\n" functions-common # sed -i "s/elif is_fedora/elif is_fedora || is_openeuler/g" functions-common # sed -i "/DISTRO=\"f\$os_RELEASE\"/a\ \ \ \ elif [[ \"\$os_VENDOR\" =~ (openEuler) ]]; then\n\tDISTRO=\"openEuler-\$os_RELEASE\"" functions-common # grep -nir "is_fedora" | grep -v functions-common | cut -d ":" -f1 | sort | uniq | for line in `xargs`;do sed -i "s/is_fedora/is_fedora || is_openeuler/g" $line;done
由于脚本文件中默认的 python-libvirt 版本不适配,需编辑
/home/stack/devstack/lib/nova_plugins/functions-libvirt
文件,注释掉安装 python-libvirt 相关代码。python-libvirt 已在openEuler-20.03-LTS-SP1 的 yum 源中手动安装。编辑
/home/stack/devstack/inc/python
文件,修改cmd_pip
参数,参数值修改为使用国内源,如下图所示。修改
/home/stack/devstack/inc/python
文件,默认安装 glance 组件。修改
/home/stack/devstack/lib/neutron_plugins/services/l3
文件,在图示位置添加如下配置。# source openrc admin admin
修改
/home/stack/devstack/stackrc
文件,修改VIRTUALENV_CMD
参数值。修改完成后,保存退出,并执行以下命令:
# pip3 install virtualenv
执行 devstack 脚本安装 OpenStack
以stack用户,执行以下命令,运行 stack.sh 脚本,进行 OpenStack 单机版安装。
# cd /home/stack/devstack
# FORCE=yes ./stack.sh
安装过程大约需要十几分钟,x86架构安装成功显示信息与ARM架构一致,此处以安装ARM架构为例,安装成功页面如下图所示。
软件运行
devstack.sh 若执行成功,会在当前主机内,根据 local.conf 文件中的配置信息,安装指定的子模块,若 local.conf 中没有指定模块,则会安装所有子模块。
以 stack 用户执行以下命令,使用管理员登录 OpenStack 客户端。
# source openrc admin admin
获取相关资源列表
- 执行以下命令,可以获取镜像资源列表。
# openstack image list
- 执行以下命令,可以获取网络资源列表。
# openstack network list
- 执行以下命令,可以获取虚拟机配置类型列表。
# openstack flavor list
- 执行以下命令,可以获取镜像资源列表。
启动一个实例
使用查询到的资源,执行以下命令创建虚拟机。
x86 架构
# openstack server create --image cirros-0.5.1-x86_64-disk --flavor 1 vm
ARM 架构
# openstack server create --image cirros-0.5.1-aarch64-disk.img --flavor 1 vm
执行如下命令,查看虚拟机状态。
# openstack server list //查看虚拟机状态
软件卸载
分别执行以下命令,卸载并清理 devstack 生成的文件及环境配置。
# cd /home/stack/devstack # ./unstack.sh # ./clean.sh
删除 devstack。
# cd /home/stack # rm -rf devstack # rm -rf /opt/stack
FAQ
openstack project list 因为网络问题有概率性失败
问题现象
脚本执行 openstack project list
命令报错。
问题原因
网络原因,执行完命令 source openrc admin admin
后,需要等待一段时间,再执行命令 openstack project list
才生效。
解决方法
参考下图修改 /home/stack/devstack/lib/neutron\_plugins/services/l3
文件。
devstack@q-meta.service 服务概率性启动失败
问题现象
命令 sudo systemctl start devstack@q-meta.service
执行失败。
问题原因
执行 systemctl enable devstack@q-meta.service
命令后,要等待一段时间。
解决方法
服务 enable 后,等待 30s 再启动。
参考下图修改 /home/stack/devstack/functions-common
文件。
mariadb 服务启动失败
问题现象
mariadb 服务启动失败。
问题原因
mysql_install_db 数据库创建失败,提示gssapi插件报错、inodb建立失败、galgare地址失效等问题。
解决方法
由于没有使用到 gssapi插件,执行如下命令,卸载 mariadb-gssapi-server 包。
# ./unstack.sh ./clean.sh && FORCE=yes ./stack.sh
neutron 服务启动失败
问题现象
neutron 服务启动过程中,有概率启动失败。
问题原因
网络波动,导致network节点搭建失败。
解决方法
执行如下命令,重新执行脚本。
# ./unstack.sh && FORCE=yes ./stack.sh
pip引导失败
问题现象
pip 引导失败,控制台报错信息为 “ERROR: Links are not allowed as constraints”。
问题原因
pip 社区更新至20.3,版本不适配。
解决方法
删除/opt/stack/requirement下旧的python 虚拟运行环境,参考社区解决方案 ,使用补丁修改 devstack 源码。 在 /home/stack/devstack 目录下,执行如下命令:
# wget https://github.com/openstack/devstack/commit/7a3a7ce87.patch
# sudo yum install patch -y
# patch -p1 < 7a3a7ce87.patch
附录
自动化脚本 prep_install.sh点击prep_install.sh获取。
将脚本存放到/home/stack
目录,执行命令 bash -x prep_install.sh
即可完成必要库和依赖安装、修改主机相关环境和修改devstack脚本和相关配置的部分操作。