前言
所有的自动化部署都来源于手搓,你能完全理解OpenStack,编写Ansible 自动化部署脚本都不是问题。
OpenStack Epoxy 是 OpenStack 的第 31 个版本,其版本号为 2025.1,于 2025 年 4 月 2 日正式发布。
Epoxy 版本默认使用 Keystone V3 接口,需注意以下两点:
-
无需配置 auth_url = http://controller:35357(V2 接口,Epoxy 已废弃),auth_url统一使用 V3 接口地址 http://controller:5000/v3;
-
必须明确 user_domain_name 和 project_domain_name 为 Default(区分大小写,Epoxy 版本严格校验)
确保 V3 接口配置正确
-
虽然无需配置 35357 端口,但需确保 V3 接口的核心参数配置完整,避免因参数缺失导致认证异常:
-
必须包含 v3 路径:配置 auth_url 时,必须显式加上 /v3 后缀(即 http://controller:5000/v3),若省略 /v3(如写成 http://controller:5000),Epoxy 会默认尝试调用已废弃的 V2 接口,导致报错。
-
配合 V3 专属参数:使用 V3 接口时,需在配置中补充 V3 专属的域名参数(即使使用默认域名)
例如:
user_domain_name = Default(用户所属域名,默认是 Default)
project_domain_name = Default(项目所属域名,默认是 Default)若缺少这两个参数,Epoxy 无法识别 V3 接口的认证范围,会报 "域名不存在" 或 "认证范围无效" 错误。
|---------------|--------------|------------|----------------------------------------|
| 服务器IP | 主机名称 | 用途 | 部署的 Nova 组件 |
| 192.168.1.181 | controller | 控制节点 | Nova 控制组件(如 nova-api、nova-scheduler 等) |
| 192.168.1.182 | compute1 | 计算节点 | Nova 计算组件(如 nova-compute) |
| 192.168.1.183 | compute2 | 计算节点 | Nova 计算组件(如 nova-compute) |
一、每台服务器需要两块网卡
虚拟机:网桥网卡-管理网络
网段:192.168.1.x
虚拟机:NAT网卡-数据网络
网段:192.168.100.x
1、管理网络(Management Network)
管理网络用于 OpenStack 控制节点之间的通信和管理,通常需要保证网络的稳定性、安全性和可靠性。因此,选择合适的网络模式对于管理网络至关重要。
2、数据网络(Data Network)
数据网络用于 OpenStack 中的计算节点与虚拟机之间的流量,承载的是虚拟机的业务流量和外部网络连接,要求高带宽、低延迟和高吞吐量,因此在选择模式时,必须考虑高效的网络性能。
控制节点: controller
计算节点: compute1
二、每台主机都执行
1、添加hosts 解析
vim /etc/hosts
controller
192.168.1.181 controller
compute1
192.168.1.182 compute1
compute2
192.168.1.183 compute2
2、关闭防火墙以及selinux
所有节点都做
systemctl stop firewall
systemctl disable --now firewalld
setenforce 0
sed -i 's/SELINUX=/SELINUX=disabled/g' /etc/selinux/config
reboot
3、验证连通性
从*controller*节点,测试能否连接到 Internet:
ping -c 4 openstack.org
ping -c 4 compute1
ping -c 4 compute2
从 compute 节点,测试能否连接到 Internet:
ping -c 4 openstack.org
ping -c 4 controller
4、安装Chrony时间同步
一个在不同节点同步服务实现 :term:`NTP`的方案
控制节点执行:
yum -y install chrony
vim /etc/chrony.conf
加到末尾
注释掉或删除所有外网 NTP 服务器,比如:
server ntp.aliyun.com iburst
server time1.cloud.tencent.com iburst
关键配置:允许本机作为时间服务器,给内网客户端提供时间
#local stratum 10
允许内网哪些 IP 或网段来同步时间(根据你的内网网段修改,比如 192.168.0.0/24)
allow 192.168.1.0/24
如果你希望本机即使没有外部时间源,也仍然可以作为时间源(但精度会随时间漂移),可以启用本地时钟

systemctl restart chronyd
systemctl enable chronyd
其它节点:
安装chrony
yum install -y chrony
控制节点配置(作为时间服务器)sed -i 's/^server.*/server controller iburst/' /etc/chrony.conf
systemctl restart chronyd
systemctl enable chronyd
计算节点配置(同步控制节点时间)sed -i 's/^server.*/server controller iburst/' /etc/chrony.conf
systemctl restart chronyd
systemctl enable chronyd
验证操作:
chronyc sources
5、需启用 IP 转发,否则虚拟机的流量无法转发到物理网络
永久启用(重启后生效)
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
三、配置 OpenStack YUM 源 (所有节点)
OpenStack 2025.1(对应 Epoxy 相关版本)
安装CentOS SIG仓库,用于获取OpenStack epoxy版本的包
yum install -y centos-release-openstack-epoxy (2025.1)
对应的文档:
https://docs.openstack.org/install-guide/openstack-services.html#minimal-deployment-for-2025-1-epoxy
启用CRB仓库,提供额外的依赖包
yum config-manager --set-enabled crb
yum repolist enabled | grep crb
安装OpenStack客户端工具
yum install -y python3-openstackclient
安装crudini工具 在所有节点执行:
yum install -y crudini
crudini --version
更新系统并安装基础依赖包
yum update -y
yum install -y gcc python3-devel python3-pip libffi-devel openssl-devel \
mariadb-devel rabbitmq-server memcached openldap-devel curl wget
pip3 install --upgrade pip
安装字符编码检测依赖
pip3 install charset-normalizer
pip3 install chardet

yum install -y python3-chardet python3-charset-normalizer
yum -y install openstack-selinux
四、SQL数据库
大多数 OpenStack 服务使用 SQL 数据库来存储信息。 典型地,数据库运行在控制节点上。
安装软件包
yum install mariadb mariadb-server python3-PyMySQL
创建并编辑 /etc/my.cnf.d/openstack.cnf,然后完成如下动作:
在 [mysqld] 部分,设置 ``bind-address``值为控制节点的管理网络IP地址以使得其它节点可以通过管理网络访问数据库:
root@controller \~\]# vim /etc/my.cnf.d/openstack.cnf \[mysqld
bind-address = 192.168.1.181
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
配置OpenStack专属数据库参数
sudo tee /etc/my.cnf.d/openstack.cnf << EOF
mysqld
bind-address = 192.168.1.181 # 绑定控制节点IP
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096 # 支持高并发
collation-server = utf8_general_ci
character-set-server = utf8
query_cache_size = 0 # 关闭查询缓存(OpenStack推荐)
query_cache_type = 0
EOF
#启动数据库服务,并将其配置为开机自启:
systemctl enable mariadb.service
systemctl start mariadb.service
systemctl status mariadb.service
#为了保证数据库服务的安全性,运行``mysql_secure_installation``脚本。特别需要说明的是,为数据库的root用户设置一个适当的密码。
root@controller \~\]# mysql_secure_installation ****Admin2025**** \[root@controller \~\]# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \\g. Your MariaDB connection id is 10 Server version: 10.5.27-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement. MariaDB \[(none)\]\> exit Bye ### ******五、消息队列**** ****RabbitMQ****** OpenStack 使用 [message queue](#message queue) 协调操作和各服务的状态信息。消息队列服务一般运行在****控制节点**** 上。OpenStack支持好几种消息队列服务包括 [RabbitMQ](http://www.rabbitmq.com "RabbitMQ"), [Qpid](http://qpid.apache.org "Qpid"), 和 [ZeroMQ](http://zeromq.org "ZeroMQ")。不过,大多数发行版本的OpenStack包支持特定的消息队列服务。本指南安装 RabbitMQ 消息队列服务,因为大部分发行版本都支持它。如果你想安装不同的消息队列服务,查询与之相关的文档。 #### ****5.1、安装**** ****rabbitmq**** > \[root@controller \~\]# yum install -y rabbitmq-server #### ****5.2、**** ****启动消息队列服务并将其配置为随系统启动:**** > systemctl enable rabbitmq-server.service > > systemctl start rabbitmq-server.service > > systemctl status rabbitmq-server.service #### ****5.3、添加 openstack 用户:**** > \[root@controller yum.repos.d\]# rabbitmqctl add_user openstack Admin2025 > > Adding user "openstack" ... > > Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more. #### ****5.4、给\`\`openstack\`\`用户配置写和读权限:**** > \[root@controller \~\]# rabbitmqctl set_permissions openstack ".\*" ".\*" ".\*" > > Setting permissions for user "openstack" in vhost "/" ... #### 5.5、启用管理插件(可选,可视化查看队列) > rabbitmq-plugins enable rabbitmq_management ### ******六、认证缓存 Memcached****** 认证服务****认证缓存使用Memcached缓存令牌**** 。缓存服务memecached运行在****控制节点****。在生产部署中,我们推荐联合启用防火墙、认证和加密保证它的安全。 #### ****6.1 安装缓存**** > yum install memcached python3-memcached #### ****6.2、**** ****编辑/etc/sysconfig/memcached文件并完成 以下行动****: 配置服务以使用该服务的管理IP地址 控制器节点。这是通过其他节点实现访问 管理网络: > \[root@controller \~\]# vim /etc/sysconfig/memcached > > OPTIONS="-l 127.0.0.1,::1,controller" 注意 更改现有行OPTIONS="-l 127.0.0.1,::1"。 |-------------------------------------------------------------------------------------------------------------------------| | # 配置监听控制节点IP > sed -i 's/OPTIONS="-l 127.0.0.1,::1"/OPTIONS="-l 127.0.0.1,::1,192.168.1.181"/' /etc/sysconfig/memcached | #### ****6.3、启动Memcached服务,并且配置它随机启动。**** > systemctl enable memcached.service > > systemctl start memcached.service > > systemctl status memcached.service ### ******七、安装ETC****** OpenStack 服务可能会使用 Etcd,这是一个分布式的可靠键值存储 用于分布式密钥锁定、存储配置以及跟踪服务 实时性及其他场景。 OpenStack 服务可能会使用 Etcd,这是一个分布式的可靠键值存储 用于分布式密钥锁定、存储配置以及跟踪服务 实时性及其他场景。 等端服务在****控制器节点上运行****。 #### 7.1、安装软件 > \[root@controller \~\]# yum install etcd -y #### 7.2、编辑/etc/etcd/etcd.conf 文件并设置 ETCD_INITIAL_CLUSTER, ETCD_INITIAL_ADVERTISE_PEER_URLS, ETCD_ADVERTISE_CLIENT_URLS, ETCD_LISTEN_CLIENT_URLS ****控制器的管理IP地址 通过管理网络启用其他节点的访问节点****: > #\[member
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.181:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.181:2379"
ETCD_NAME="controller"
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.181:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.181:2379"
ETCD_INITIAL_CLUSTER="controller=http://192.168.1.181:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
7.3、启动 etcd 服务:
systemctl enable etcd
systemctl start etcd
systemctl status etcd