手搓 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](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

相关推荐
忧郁的橙子.3 小时前
二十一、kubernetes 1.29 之 运维 03
运维
鸢尾掠地平3 小时前
DNS的正向、反向解析的服务配置知识点及实验
运维·服务器·网络
by__csdn3 小时前
nvm命令使用,nvm国内镜像,nvm命令for Linux/Mac
linux·运维·macos
su3174 小时前
rap2部署
linux·运维·服务器
敲不响的键盘4 小时前
Nginx Location匹配与Proxy_pass匹配规则
运维·nginx
草莓熊Lotso4 小时前
Linux 基础开发工具入门:软件包管理器的全方位实操指南
linux·运维·服务器·c++·人工智能·网络协议·rpc
Jewel Q5 小时前
PowerShell 和 CMD
运维
Mr_Xuhhh5 小时前
GUI自动化测试--自动化简单示例
运维·服务器·自动化
羑悻的小杀马特5 小时前
零成本自建私人知识库教学,Leanote+Cpolar 内网穿透,手机电脑随时同步,无需云服务器,效率翻倍!
运维·服务器·coplar·leanote