手搓 OpenStack 部署 实战

前言

所有的自动化部署都来源于手搓,你能完全理解OpenStack,编写Ansible 自动化部署脚本都不是问题。

OpenStack Epoxy 是 OpenStack 的第 31 个版本,其版本号为 2025.1,于 2025 年 4 月 2 日正式发布。

Epoxy 版本默认使用 Keystone V3 接口,需注意以下两点:

  1. 无需配置 auth_url = http://controller:35357(V2 接口,Epoxy 已废弃),auth_url统一使用 V3 接口地址 http://controller:5000/v3;

  2. 必须明确 user_domain_name 和 project_domain_name 为 Default(区分大小写,Epoxy 版本严格校验)

确保 V3 接口配置正确

  1. 虽然无需配置 35357 端口,但需确保 V3 接口的核心参数配置完整,避免因参数缺失导致认证异常:

  2. 必须包含 v3 路径:配置 auth_url 时,必须显式加上 /v3 后缀(即 http://controller:5000/v3),若省略 /v3(如写成 http://controller:5000),Epoxy 会默认尝试调用已废弃的 V2 接口,导致报错。

  3. 配合 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, Qpid, 和 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

相关推荐
XIAOHEZIcode1 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户03284722207017 小时前
如何搭建本地yum源(上)
运维
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉4 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦4 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw