
这类工具最值得先看的不是功能列表而是能不能在普通环境里稳定跑起来。OpenStack 的搭建尤其是基础准备环节是决定后续所有组件能否顺利部署和稳定运行的关键。很多人一上来就照着文档敲命令结果卡在系统版本、网络配置或者依赖问题上浪费大量时间。这篇文章不是简单罗列步骤而是以一个踩过多次坑的部署者视角帮你理清在真正动手安装 OpenStack 之前必须完成的、且最容易出错的准备工作。无论你是想学习 OpenStack 架构还是计划在生产环境进行测试部署把基础打牢后续的 Nova、Neutron、Cinder 等核心服务安装才会事半功倍。我建议先从最小样例开始也就是单节点All-in-One的测试环境。但即便是单节点基础准备也丝毫不能马虎。下面我会按实际落地顺序把基础准备拆解成几个必须清晰定义的环节硬件与虚拟化选择、操作系统与网络规划、系统环境初始化、以及最后的预检查清单。每个环节我都会解释“为什么”要这么做以及如果跳过或做错会导致后面出现哪些典型问题。1. 先明确硬件、虚拟化与操作系统的选择这不是随便选的很多人觉得基础准备就是装个系统其实第一步的决策就决定了后续的复杂度和成功率。你需要根据学习、测试还是生产的目的来选择不同的底层架构。1.1 物理机、虚拟机还是云主机资源规划是首位OpenStack 可以部署在物理服务器上即所谓的裸机部署也可以部署在虚拟机里。对于初学者和功能测试在虚拟机中部署是最高效的方式。虚拟机部署推荐给初学者和测试你需要一台性能较好的物理机作为宿主机。在这台宿主机上通过 VMware Workstation、VirtualBox 或 KVM 创建虚拟机来安装 OpenStack。这种方式资源隔离好搭建和销毁环境方便。宿主机建议配置CPU 至少 4 核 8 线程内存 16GB 以上固态硬盘。因为虚拟机需要占用大量资源。虚拟机配置为 OpenStack 控制节点计算节点合一的虚拟机分配至少 4 个 vCPU、8GB 内存和 50GB 磁盘空间。如果资源允许分配更多内存和 CPU 会让体验更流畅。物理机部署用于生产或深度测试直接使用物理服务器。这需要服务器支持 CPU 虚拟化技术Intel VT-x 或 AMD-V并且通常在 BIOS 中默认是开启的但部署前务必确认。物理机部署能提供最好的性能但硬件成本高且环境准备更复杂。云主机部署注意在公有云提供的普通云主机VPS上嵌套虚拟化部署 OpenStack 通常不可行因为云厂商禁用了嵌套虚拟化。所以“VPS搭建教程”这类关键词对于 OpenStack 部署基本不适用不要在这个方向上浪费时间。为什么先定这个因为资源不足是后续安装失败最常见的原因。计算节点Nova需要虚拟化支持网络节点Neutron可能创建大量虚拟网卡控制节点运行数据库和消息队列。资源不够服务可能根本起不来或者运行极其缓慢。1.2 操作系统版本不是越新越好稳定兼容是关键OpenStack 社区对主流 Linux 发行版有明确的版本支持。盲目使用最新版本的系统可能会遇到依赖包版本冲突、驱动不支持等问题。首选 Ubuntu Server LTS对于大多数用户尤其是新手Ubuntu 20.04 LTS (Focal)或Ubuntu 22.04 LTS (Jammy)是最佳选择。OpenStack 社区的文档、安装工具如 DevStack, OpenStack-Ansible对 Ubuntu 的支持最全面遇到问题也最容易找到解决方案。CentOS/RHEL/Rocky Linux企业环境中常见。如果你熟悉 RHEL 系可以选择CentOS Stream 8/9或Rocky Linux 8/9。需要注意的是从 OpenStack Yoga 版本开始对 CentOS 7 的支持已结束。版本锁定确定好系统版本后在整个安装过程中尽量不要中途升级系统内核或关键库如 Python、MySQL除非明确知道是为了解决某个兼容性问题。我的经验是直接使用 Ubuntu 22.04 LTS Minimal 镜像进行安装减少不必要的桌面组件占用资源。在安装系统时记得勾选“安装 OpenSSH server”方便后续远程操作。1.3 网络规划这是 OpenStack 最复杂也最容易出错的部分网络规划必须在安装系统之前就想好因为安装系统时就需要配置网络。对于单节点All-in-One测试环境我推荐使用“双网卡”方案虽然单网卡也能工作但双网卡更清晰更接近生产逻辑。网卡1 (管理网/API网络)用于 OpenStack 各组件之间的内部通信以及我们通过命令行或 Dashboard 对 OpenStack 的管理。这个网络需要配置静态 IP并且主机名要能正确解析通过/etc/hosts文件。示例IP: 192.168.100.10, 网关: 192.168.100.1网卡2 (外部网络/Provider Network)用于虚拟机实例Instance访问外网互联网。这个网络在部署 OpenStack 前在宿主机层面可能只是一个没有 IP 的“桥接”或“混杂模式”网卡。它的作用是为 Neutron 提供物理出口。示例在 Ubuntu 中你可以把它配置为一个没有 IP 的桥接接口或者保持 DHCP 获取一个 IP 也行但重点是其物理连接要通往外网路由器。为什么提前规划因为 OpenStack 安装工具如 DevStack 的local.conf会要求你填写这些网络接口的名字如eth0,ens33和网段。如果装完系统才发现网卡名不对或IP冲突回头修改会很麻烦可能涉及重命名网卡规则netplan或NetworkManager。2. 系统安装后的初始化不只是更新软件包操作系统安装完毕并配置好静态 IP 和主机名后不要急着运行 OpenStack 安装脚本。以下几个初始化操作能避免 80% 的后续依赖错误。2.1 配置主机名与 hosts 文件OpenStack 组件严重依赖主机名进行通信。即使只有一个节点也必须设置。# 1. 设置主机名例如 ‘openstack’ sudo hostnamectl set-hostname openstack # 2. 编辑 /etc/hosts确保能解析自己将 192.168.100.10 替换为你的管理网IP echo “192.168.100.10 openstack” | sudo tee -a /etc/hosts验证分别执行hostname和hostname -f都应该返回openstack。执行ping openstack应该能 ping 通自己的 IP。2.2 禁用防火墙和 SELinux/AppArmor仅用于测试在生产环境中需要精细配置防火墙规则和 SELinux/AppArmor 策略。但在学习和测试环境中为了简化问题通常先禁用它们。Ubuntu (UFW):sudo ufw disableCentOS/Rocky (Firewalld):sudo systemctl stop firewalld sudo systemctl disable firewalldSELinux (RHEL系):sudo setenforce 0 sudo sed -i ‘s/^SELINUXenforcing/SELINUXpermissive/’ /etc/selinux/configAppArmor (Ubuntu):sudo systemctl stop apparmor sudo systemctl disable apparmor注意这只是为了搭建过程顺利。一旦环境稳定你应该学习如何为 OpenStack 服务配置正确的安全策略。2.3 更新系统并安装基础工具# Ubuntu/Debian sudo apt update sudo apt upgrade -y sudo apt install -y net-tools tree curl wget vim git python3-pip # CentOS/Rocky sudo dnf update -y sudo dnf install -y net-tools tree curl wget vim git python3-pip安装net-tools是为了使用ifconfig等传统命令方便查看网络。tree能让你更直观地查看目录结构。2.4 配置 NTP 时间同步OpenStack 所有节点的时间必须同步否则会导致认证失败、数据库同步出错等诡异问题。# Ubuntu 使用 chrony sudo apt install -y chrony sudo systemctl restart chrony sudo systemctl enable chrony # 检查同步状态 chronyc sources验证chronyc sources输出中应该有一个或多个服务器标记为^*表示已成功同步。3. 关键依赖与服务准备数据库、消息队列和 MemcachedOpenStack 是一个由多个独立服务组成的集合这些服务需要共享数据库和通过消息队列通信。在手动安装或使用某些自动化工具前需要先部署它们。3.1 安装与配置 MariaDB/MySQL大多数 OpenStack 服务使用 SQL 数据库存储信息。# Ubuntu sudo apt install -y mariadb-server python3-pymysql # 创建配置文件允许远程连接为了其他节点即使单节点也建议配置 sudo vim /etc/mysql/mariadb.conf.d/99-openstack.cnf在99-openstack.cnf文件中添加以下内容[mysqld] bind-address 0.0.0.0 default-storage-engine innodb innodb_file_per_table on max_connections 4096 collation-server utf8_general_ci character-set-server utf8然后重启并加固数据库sudo systemctl restart mysql sudo systemctl enable mysql sudo mysql_secure_installation # 运行上述命令后会提示设置 root 密码、移除匿名用户、禁止 root 远程登录等。 # 对于测试环境可以按需选择。但一定要记住设置的 root 密码。3.2 安装与配置 RabbitMQ 消息队列OpenStack 服务使用 AMQP 协议通过消息队列进行异步通信。# Ubuntu sudo apt install -y rabbitmq-server sudo systemctl enable rabbitmq-server sudo systemctl start rabbitmq-server # 添加 openstack 用户密码设为 ‘openstack’生产环境请用强密码 sudo rabbitmqctl add_user openstack openstack # 设置 openstack 用户对所有 vhost 的配置、读、写权限 sudo rabbitmqctl set_permissions openstack “.*” “.*” “.*”验证sudo systemctl status rabbitmq-server显示为active (running)。3.3 安装与配置 MemcachedKeystone身份认证服务使用 Memcached 来缓存令牌。# Ubuntu sudo apt install -y memcached python3-memcache # 编辑配置文件允许监听所有地址以便其他服务访问 sudo sed -i ‘s/^-l 127.0.0.1/-l 0.0.0.0/’ /etc/memcached.conf sudo systemctl restart memcached sudo systemctl enable memcached4. 最后的预检查清单动手安装前的“体检”在运行任何 OpenStack 安装命令如devstack/stack.sh或openstack-ansible之前花 10 分钟按照这个清单检查一遍能极大提高成功率。4.1 网络连通性与解析检查# 1. 检查 IP 配置是否正确 ip addr show # 确认管理网卡有正确的静态 IP。 # 2. 检查网关和外部网络连通性 ping -c 4 192.168.100.1 # 你的网关 ping -c 4 8.8.8.8 # 测试外网连通性 # 3. 检查主机名解析 ping -c 4 openstack # 应该解析到你的管理网 IP getent hosts openstack4.2 服务状态检查# 检查关键依赖服务是否都在运行 sudo systemctl status mysql sudo systemctl status rabbitmq-server sudo systemctl status memcached # 状态都应为 active (running)4.3 资源与依赖检查# 1. 检查虚拟化支持对于计算节点是必须的 egrep -c ‘(vmx|svm)’ /proc/cpuinfo # 输出大于 0 则表示 CPU 支持虚拟化。 # 2. 检查磁盘空间 df -h / # 确保根分区有足够空间建议剩余 20GB。 # 3. 检查 Python3 版本 python3 --version # OpenStack 新版本通常要求 Python 3.8。 # 4. 检查时间同步 chronyc sources | grep ‘^\^\*’ # 应该有一行输出表示已同步。4.4 环境变量与工具准备如果你打算使用 DevStack需要提前下载git clone https://opendev.org/openstack/devstack cd devstack然后根据你的网络规划仔细编写local.conf文件。这是 DevStack 的配置文件定义了密码、网络接口、启用哪些服务等。一个最小化的单节点配置示例[[local|localrc]] # 通用配置 ADMIN_PASSWORDsecret DATABASE_PASSWORD$ADMIN_PASSWORD RABBIT_PASSWORD$ADMIN_PASSWORD SERVICE_PASSWORD$ADMIN_PASSWORD # 网络配置 - 使用你规划好的网卡名 HOST_IP192.168.100.10 # 你的管理网 IP FLAT_INTERFACEeth1 # 你的外部网络物理接口名如 ens34 FIXED_RANGE10.0.0.0/24 FLOATING_RANGE192.168.100.128/25 # 从你的外部网络划出一个子网给浮动IP # 启用基础服务 enable_plugin heat https://opendev.org/openstack/heat enable_plugin magnum https://opendev.org/openstack/magnum最重要的一点不要一上来就运行./stack.sh。先确保你的local.conf配置尤其是HOST_IP和FLAT_INTERFACE100% 正确。一个错误的 IP 或接口名会导致整个网络栈部署失败。我个人更建议先把单节点All-in-One的基础准备做扎实。这个方案真正落地时最该盯住的不是 OpenStack 本身的功能列表而是宿主机的资源、操作系统的兼容性、网络的规划以及数据库、消息队列这些底层服务是否就绪。很多安装失败追根溯源都是基础环节的某个小疏忽。当你按照上面的清单全部检查通过后再运行安装脚本你会发现整个过程会顺利得多。即使遇到错误排查范围也会大大缩小通常集中在 OpenStack 组件自身的配置上而不是环境问题。