适用于 BC-Linux for Euler / openEuler 宿主机,支持有网/无网环境自适应,仅供测试学习,不要部署到生产环境。

一、这个脚本是干嘛的

在 5 台服务器上自动部署 OpenStack Flamingo (2025.2)(控制/网络/计算/存储),不需要你手动配 Docker、Registry、Kolla-Ansible、网络、存储。

你只需做三件事:

  1. 把离线包上传到控制节点

  2. 执行脚本

  3. 按提示输入 5 个节点的管理网 IP

剩下的全部自动完成。


二、为什么要写这个脚本

在我的测试环境BC-Linux21.10中部署 OpenStack Flamingo (2025.2) 时,遇到一堆官方文档没提到的问题,比如:(我是基于kolla-ansible Yoga模板搞的,可能走了弯路)

2.1 宿主机和容器镜像"不配套"

  • 宿主机是 BC-Linux for Euler(基于 openEuler)

  • 容器镜像是 CentOS Stream 10

  • 官方不支持这个组合,导致一堆兼容性问题

2.2 MariaDB 11.4 启动失败

CentOS Stream 10 容器里的 MariaDB 是 11.4 版本,但 OpenStack Yoga 官方只支持 10.x。mysqld_safe 命令被移除了,容器启动就报错。

2.3 Horizon 登录页 500

Horizon 容器启动时会执行 collectstaticcompress 生成 CSS/JS 文件,但生成的子目录默认权限是 750 root:root,Apache 工作进程(UID 48)进不去,一访问登录页就报 500。

2.4 Python 路径写死 3.6

kolla-ansible Yoga 模板里对 CentOS 写死了 python3.6,但 CentOS Stream 10 实际是 python3.12,导致 WSGI 脚本找不到。

2.5 Django 4.2 兼容性

CentOS Stream 10 容器里的 Django 是 4.2,但 Yoga 模板里还在用 Django 3.2 的语法(ugettext_lazyMemcachedCache),直接 ImportError。

2.6 Glance sanity check 403

Glance 的镜像列表检查使用 system-scoped token,但 Glance 中间件不支持,返回 403 Forbidden。


三、脚本怎么解决这些问题(思路可以参考)

3.1 镜像层修复(构建时)

在 Dockerfile 中直接修复容器镜像:

  • 创建 mysqld_safe → mariadbd-safe 软链接

  • collectstatic/compress 执行后注入 chmod -R a+rwX

  • 替换 python3.6python3.12

3.2 配置层修复(部署前)

修改 kolla-ansible 模板:

  • distro_python_version_map 增加 CS10 → 3.12 映射

  • local_settingsugettext_lazygettext_lazy

  • MemcachedCachePyMemcacheCache

  • openstack_glance_auth 改为 project-scoped

3.3 运行时兜底(部署后)

如果镜像层修复没生效(比如容器重启后权限丢失),脚本会在宿主机上直接写 overlay2 merged dir 覆盖权限,确保 Horizon 能正常访问 static 文件。


四、适用场景

场景 是否适用
宿主机是 BC-Linux for Euler 21.10/22.10
宿主机是 openEuler 20.03/22.03 LTS
容器镜像是 CentOS Stream 10
有外网,需要在线下载补齐
无外网,需要完全离线部署
5 节点(控制/网络/2计算/存储)
需要 Cinder LVM 后端

五、前置准备

5.1 虚拟机配置

节点 CPU 内存 系统盘 附加盘 网卡
控制节点 4C 8G ≥50G 2块
网络节点 2C 4G ≥30G 2块
计算节点1 4C 8G ≥30G 1块≥10G 2块
计算节点2 4C 8G ≥30G 1块≥10G 2块
存储节点 2C 4G ≥30G 2块≥10G 2块

附加盘会被 Cinder LVM 自动使用,盘上数据会被清除

5.2 离线包准备

包名 大小 是否必须手动准备 说明
kolla-37-tmp.tar.gz ~13GB 必须

37 个 OpenStack Flamingo Docker 镜像,没有就部署不了。在线拉不动。需要的话单独找我吧,太大了上传不了,或者可以考虑使用 kolla-build 自行构建,或寻找第三方镜像仓库的 Flamingo 备份。

然后,需要注意的是,我又看了下我之前kolla-build构建的openstack组件镜像,因为下载了kolla 21.1.0,然后又是基于CS10的容器系统,貌似应该是基于Flamingo (2025.2)版本的容器镜像,太新了,根本不可能运行在BC-Linux21.10系统版本上,但是阴差阳错缺部署成功了,就当学习了,也许是因为OpenStack 核心服务(Keystone、Glance、Nova 等)从 Yoga 到 Flamingo 的基础启动逻辑、数据库连接、AMQP 通信机制没有发生根本性断裂。因为用的Yoga 模板,Flamingo 的代码拿到 Yoga 模板生成的配置文件,大部分选项还能认得,只是有些废弃了、有些新增了。但是这个跨度有点大,跨了大概7个版本迭代。Yoga (Y) → Zed (Z) → Antelope (A) → Bobcat (B) → Caracal (C) → Dalmatian (D) → Epoxy (E) → Flamingo (F),就很神奇,后面有空我再重新用kolla 14.x去构建一套yoga版本镜像再更新吧。

kolla-ansible-yoga.tar.gz ~5MB 推荐 kolla-ansible 源码,无网时必须提前准备
openstack-kolla-1.0.0.tar.gz ~20KB 推荐 ansible-collection-kolla,无网时必须提前准备
container-rpms/ ~50MB 推荐 openssh-server、cronie、crontabs 等,用于重建 keystone-ssh/fernet/horizon-fixed 镜像,无网时必须提前准备
registry-2.tar ~20MB 推荐 Docker Registry 镜像,脚本自动 docker pull,无网时必须提前准备
RPM/wheel ~500MB 推荐 宿主机依赖,有网时自动下载,无网时必须提前准备
OpenStack 版本 kolla 版本 官方来源
Yoga 14.x(14.0.0 ~ 14.12.0) https://releases.openstack.org/teams/kolla.html
 
Zed 15.x
Bobcat (2023.2) 17.x
Caracal (2024.1) 18.x
Dalmatian (2024.2) 19.x
Epoxy (2025.1) 20.x
Flamingo (2025.2) 21.x(21.0.0, 21.1.0, 21.2.0)

说明

  • 只有 kolla-37-tmp.tar.gz 是真正必须提前准备的

  • 上传到 /root//opt/offline//data/offline/ 任一目录即可,脚本自动搜索


六、使用方法

6.1 有网环境

# 上传离线包后执行
bash OpenStack-install-v1.0.sh

# 按提示输入 5 个节点管理网 IP
# 业务网 IP 自动推导(管理网网段+100),支持手动覆盖
# 等待 40-120 分钟完成

6.2 无网环境

# 直接执行,脚本自动检测无外网 + 离线源完整 → 自动跳过阶段一
bash OpenStack-install-v1.0.sh

6.3 强制跳过阶段一

bash OpenStack-install-v1.0.sh --skip-phase1

七、部署完成后

# 查看管理员密码
cat /etc/kolla/passwords.yml | grep keystone_admin_password

# 登录 Horizon
# URL: http://<VIP>/
# 账号: admin
# 密码: 上面查到的密码

# 验证核心服务
source /etc/kolla/admin-openrc.sh
openstack service list
openstack compute service list
openstack network agent list
openstack volume service list
openstack image list

八、注意事项

  1. 宿主机和容器发行版不匹配:37个容器镜像是我自己在云主机香港节点现做的,有可能是非官方支持组合,只是脚本通过兼容性修复使其运行。可以通过这个脚本学习一下到底有哪些坑。可以自行研究基于 Rocky 9 或 openEuler 官方构建镜像,估计就没那么多问题需要修复了。

  2. 业务网网卡不要配 IP:由 Neutron br-ex 网桥接管,手动配 IP 会导致冲突。

  3. 附加盘数据会被清除:Cinder LVM 会自动创建卷组。


九、版本信息

  • 版本:v1.0

  • 适用系统:BC-Linux for Euler 21.10/22.10、openEuler 20.03/22.03 LTS

  • OpenStack 版本Flamingo (2025.2)

  • 容器镜像:CentOS Stream 10(通过兼容性修复运行)

  • 内核要求:≥4.19

十、下载链接:https://download.csdn.net/download/fxqice/93260850

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐