
如果你正在考虑搭建自己的私有云或者想深入理解云计算的底层架构OpenStack 几乎是一个绕不开的名字。但很多人在第一步——基础准备环节就卡住了硬件配置到底要多高网络规划怎么才算合理操作系统选哪个版本这些看似琐碎的前置工作往往决定了整个搭建过程的成败甚至影响到后续的稳定性和扩展性。这篇文章不会直接带你敲安装命令而是聚焦于 OpenStack 搭建中最关键、也最容易被忽视的“基础准备环节”。我的核心判断是一个成功的 OpenStack 部署70%的功劳在于充分和正确的前期准备。跳过或草率对待这一步后续的安装过程将充满各种诡异的报错和难以排查的兼容性问题最终可能导致推倒重来。本文将为你拆解 OpenStack 基础准备的完整清单从硬件选型、网络规划、系统环境到依赖配置提供一个清晰、可落地的操作指南。无论你是为了学习、测试还是搭建生产环境读完本文你都能建立起一套可靠的准备框架避开那些新手必踩的“坑”。1. 这篇文章真正要解决的问题为什么基础准备如此重要很多教程一上来就让你执行packstack或devstack却很少解释为什么需要先做那些繁琐的配置。这导致初学者在遇到“网络无法连通”、“镜像上传失败”、“计算节点无法加入”等问题时毫无头绪。基础准备环节要解决的本质上是为 OpenStack 各核心服务Nova, Neutron, Glance, Cinder等创造一个能够稳定对话的底层平台。这个平台包括一致的运行时环境确保所有节点使用兼容的系统版本、内核、依赖库。可靠的网络通道为管理流量、实例流量、存储流量、外部网络流量规划好独立的、无冲突的网络路径。充足的资源池为虚拟化CPU、内存、存储磁盘空间、IOPS和网络带宽、网卡预留足够的硬件资源。正确的身份与权限配置无密码 SSH 访问、时间同步、主机名解析这是自动化部署和跨节点通信的基石。忽视这些就如同在松软的地基上盖楼。本文将把这些抽象的原则转化为具体的检查项和操作命令让你有的放矢。2. OpenStack 基础架构与核心概念在动手之前我们需要对 OpenStack 的典型架构和即将准备的环境有一个基本认识。OpenStack 是一个由多个独立服务项目组成的分布式系统最常见的简化部署模式是“控制节点 计算节点”。控制节点 (Controller Node) 大脑和中枢。运行着 API 服务Nova-api, Glance-api 等、调度器Nova-scheduler、数据库MariaDB、消息队列RabbitMQ和网络代理Neutron-server等。它负责接收用户指令、管理状态、调度资源。计算节点 (Compute Node) 干活的肌肉。主要运行 Nova-compute 服务负责创建和管理虚拟机实例Instance。它通过虚拟化技术如 KVM直接消耗物理的 CPU、内存和本地磁盘资源。网络节点 (Network Node, 可选) 在更复杂的网络模式如 Provider Networks 或自服务网络使用 DVR/L3 Agent中可能需要独立的网络节点来处理路由、NAT、DHCP 和浮动 IP 等高级网络功能。对于初学者或测试环境这些功能可以合并到控制节点上。需要理解的关键概念管理网络 (Management Network) 用于 OpenStack 各服务内部通信的网络如 Nova-compute 与 Nova-api 的通信。要求低延迟、高可靠通常使用一个独立的物理网段或 VLAN。数据网络 (Data Network/Tunnel Network) 用于虚拟机实例之间的数据传输特别是在使用 VXLAN 或 GRE 等 overlay 网络隧道时。对带宽要求高。外部网络 (External Network/Provider Network) 为虚拟机提供访问互联网或外部企业网络的能力。通常需要连接到物理交换机并可能涉及 VLAN 标签。存储网络 (Storage Network) 如果使用独立的存储节点如 Cinder 后端为 Ceph 或 NFS则需要一个专用于存储流量的网络以减少对管理网络和数据网络的干扰。我们的基础准备就是为这些角色和网络规划好它们的“座位”和“通道”。3. 环境规划与硬件准备这是准备环节中最具决定性的部分。我们将分场景讨论。3.1 场景选择从学习到生产All-in-One 单节点学习环境目标快速体验 OpenStack 核心功能学习基本操作。硬件建议一台性能较好的 PC 或服务器。建议至少16GB 内存4核 CPU支持虚拟化 VT-x/AMD-V100GB 以上空闲磁盘SSD 为佳。需要至少2 个网络接口一个用于管理/外部一个用于数据/实验如果只有一个网卡可以使用虚拟网桥或 VLAN 进行逻辑隔离但这会增加复杂度。软件CentOS 7/8 Stream、Rocky Linux 8/9、Ubuntu 20.04/22.04 LTS。多节点测试/开发环境目标模拟真实的多节点架构测试网络、存储分离等特性。硬件建议控制节点8核 CPU16-32GB 内存100GB 系统盘2-3 块网卡。计算节点8-16核 CPU核心数越多能创建的虚拟机越多32-64GB 内存200GB 磁盘用于虚拟机镜像和实例存储2-3 块网卡。网络强烈建议每个节点有3 张物理网卡分别用于管理、数据和外部网络。小型生产环境目标承载内部业务系统要求较高的稳定性和性能。硬件建议在测试环境基础上所有硬件应采用企业级服务器配置 RAID 卡保障系统盘可靠性网卡建议使用万兆10GbE或更高带宽特别是数据网络和存储网络。控制节点建议部署多个以实现高可用HA。3.2 硬件清单核对表无论哪种场景请在安装前核对以下项目组件最低要求 (All-in-One)推荐要求 (多节点测试)关键检查点CPU64位4核支持硬件虚拟化每节点8核以上支持虚拟化在BIOS中开启 Intel VT-x / AMD-V。通过 egrep -c (vmx内存8GB控制节点16GB计算节点32GB内存越大可同时运行的虚拟机越多。磁盘100GB 空闲空间系统盘100GB计算节点数据盘200GB建议使用 SSD 提升 IO 性能。检查磁盘类型和剩余空间lsblk和df -h。网卡2个物理接口或1个虚拟网桥每节点至少2个推荐3个物理接口确认网卡型号和驱动兼容性。使用ip link或lspci | grep -i ethernet查看。网络交换机家用路由器或简单交换机支持 VLAN 划分的千兆/万兆管理型交换机为管理、数据、外部网络规划不同的 VLAN 或物理端口。4. 操作系统安装与基础配置我们以目前最流行的Rocky Linux 8/9作为 CentOS 的替代为例Ubuntu 的步骤类似但命令不同。4.1 操作系统安装下载镜像从 Rocky Linux 官网下载最新版本的 ISO 镜像如 Rocky Linux 9.3。安装类型选择“Server with GUI”或“Minimal Install”。对于新手带图形界面可以方便后续使用浏览器访问 Horizon 仪表板。生产环境通常选择最小化安装。分区建议/boot1GB/boot/efi200MB (UEFI 系统需要)swap大小通常为物理内存的 1-2 倍但若内存很大64GB可适当减少或不用。/剩余所有空间或单独为/var、/home分区。对于 All-in-One一个大的/分区最简单。网络配置在安装界面为你的第一张网卡例如ens192配置一个静态 IP 地址。这个 IP 将作为节点的管理 IP。假设我们规划的管理网络是192.168.100.0/24网关为192.168.100.1。IP 地址192.168.100.10(控制节点示例)子网掩码255.255.255.0网关192.168.100.1DNS8.8.8.8或你的内部 DNS 服务器主机名设置一个有意义的主机名如controller、compute01。4.2 安装后的基础系统配置系统安装完成后以 root 用户登录进行以下关键配置。4.2.1 配置静态主机名解析OpenStack 服务之间通过主机名通信因此必须在每个节点的/etc/hosts文件中记录所有节点的主机名和 IP 对应关系。# 编辑 hosts 文件 vi /etc/hosts假设我们有一个控制节点和一个计算节点# 将文件内容修改或添加如下行请替换为你的实际管理IP和主机名 192.168.100.10 controller 192.168.100.20 compute01重要确保每个节点上的/etc/hosts文件内容一致。这是避免后续各种“未知主机”错误的关键。4.2.2 禁用 SELinux 和防火墙仅用于学习和测试在生产环境中需要精细配置 SELinux 策略和防火墙规则。但对于初次搭建和测试禁用它们可以极大简化问题排查。# 1. 设置 SELinux 为 permissive 模式重启后生效 setenforce 0 sed -i s/^SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config # 2. 停止并禁用 firewalld systemctl stop firewalld systemctl disable firewalld # 3. 如果你使用的是 Ubuntu默认是 ufw # ufw disable4.2.3 配置网络时间协议 (NTP)所有节点的时间必须高度同步否则会导致证书验证失败、数据库复制出错等诡异问题。# 安装 chrony dnf install chrony -y # 编辑配置文件指定时间服务器 vi /etc/chrony.conf在配置文件中添加或修改pool指令指向可靠的时间源例如pool 2.rocky.pool.ntp.org iburst然后启动并启用服务systemctl enable --now chronyd systemctl status chronyd chronyc sources # 查看同步状态4.2.4 启用 OpenStack 仓库Rocky Linux 默认不包含 OpenStack 仓库需要手动启用。对于 Rocky Linux 9 (对应 OpenStack Yoga 及之后版本)dnf install -y epel-release dnf config-manager --set-enabled crb dnf install -y python3-devel dnf install -y https://www.rdoproject.org/repos/rdo-release.el9.rpm安装完成后可以更新系统并查看可用的 OpenStack 版本包dnf update -y dnf search openstack5. 网络规划与配置实战这是准备环节最复杂的部分。我们以一个典型的三网卡多节点测试环境为例进行规划。5.1 网络规划示例假设我们有两台服务器每台有3个物理网卡ens192,ens224,ens256。节点主机名管理网络 (ens192)数据网络 (ens224)外部网络 (ens256)用途说明控制节点controller192.168.100.10/2410.0.0.10/24不配置IP (桥接)管理IP用于SSH、API。数据网络用于VXLAN隧道。外部网卡桥接到物理网络。计算节点compute01192.168.100.20/2410.0.0.20/24不配置IP (桥接)同上。管理网络一个普通的局域网用于 SSH、服务间 RPC 调用、数据库访问等。数据网络一个独立的二层网络专门用于计算节点之间、计算节点与控制节点之间传输 overlay 网络如 VXLAN的流量。需要确保所有节点的数据网卡在同一个二层广播域内即连接到同一个交换机且没有 VLAN 隔离或使用同一个 VLAN。外部网络这张网卡将用于创建 OpenStack 中的“提供商网络”Provider Network为虚拟机提供外部访问。它需要连接到可以上互联网或外部路由的物理网络。在节点上我们通常不为其配置 IP而是将其作为一个“桥接端口”加入 Linux 网桥如br-ex由 Neutron 来管理。5.2 配置网络接口我们需要为每个网卡配置网络连接。在 Rocky Linux 8/9 中推荐使用nmcli或直接编辑/etc/sysconfig/network-scripts/下的文件RHEL系传统方式。这里使用nmcli。在控制节点 (controller) 上操作配置管理网络 (ens192)nmcli con mod ens192 ipv4.addresses 192.168.100.10/24 nmcli con mod ens192 ipv4.gateway 192.168.100.1 nmcli con mod ens192 ipv4.dns 8.8.8.8 nmcli con mod ens192 ipv4.method manual nmcli con mod ens192 connection.autoconnect yes nmcli con up ens192配置数据网络 (ens224)nmcli con mod ens224 ipv4.addresses 10.0.0.10/24 nmcli con mod ens224 ipv4.method manual nmcli con mod ens224 connection.autoconnect yes # 注意数据网络通常不设网关和DNS nmcli con up ens224配置外部网络 (ens256) 外部网卡我们暂时不配 IP只需确保其状态为 up并记住其接口名。后续在安装 OpenStack Neutron 时会将其桥接到br-ex。nmcli con mod ens256 connection.autoconnect yes nmcli con up ens256在计算节点 (compute01) 上重复以上步骤将 IP 地址分别改为192.168.100.20和10.0.0.20。5.3 验证网络连通性配置完成后进行关键验证# 1. 检查 IP 配置 ip addr show # 2. 从控制节点 ping 计算节点的管理 IP ping -c 4 192.168.100.20 # 3. 从控制节点 ping 计算节点的数据网络 IP ping -c 4 10.0.0.20 # 4. 反向从计算节点 ping 控制节点 ping -c 4 192.168.100.10 ping -c 4 10.0.0.10必须确保管理网络和数据网络在节点间是互通的。如果不通检查网线、交换机 VLAN 配置、防火墙已禁用和 IP 地址设置。6. 配置 SSH 免密登录与软件仓库优化为了便于自动化部署工具如packstack在多节点间工作需要配置控制节点到所有节点包括自身的 SSH 免密登录。6.1 生成 SSH 密钥对在控制节点上操作ssh-keygen -t rsa -N -f /root/.ssh/id_rsa这会在/root/.ssh/目录下生成id_rsa私钥和id_rsa.pub公钥。6.2 分发公钥将公钥分发到所有节点包括控制节点自己# 将 YOUR_PASSWORD 替换为各节点的 root 密码 ssh-copy-id rootcontroller ssh-copy-id rootcompute01输入yes确认主机指纹然后输入对应节点的 root 密码。完成后尝试 SSH 登录应该不再需要密码。ssh rootcompute01 hostname应能直接返回compute01。6.3 优化软件仓库与安装基础工具为了提高后续安装组件的速度可以配置国内镜像源并安装一些常用工具。# 备份原有仓库文件 cp /etc/yum.repos.d/rdo-release.repo /etc/yum.repos.d/rdo-release.repo.bak # 使用 sed 替换仓库中的下载源为国内镜像例如替换为清华源 # 注意此步骤取决于具体的仓库文件内容操作前请先查看 rdo-release.repo 文件中的 baseurl。 # 以下是一个示例可能需要调整 sed -i s|https://trunk.rdoproject.org|https://mirrors.tuna.tsinghua.edu.cn/rdoproject|g /etc/yum.repos.d/rdo-release.repo # 安装常用工具 dnf install -y vim wget net-tools bash-completion7. 常见问题与排查思路 (基础准备阶段)在完成上述步骤时你可能会遇到以下问题问题现象可能原因排查方式解决方案ping不通其他节点的管理 IP1. 物理链路不通网线、交换机端口2. IP 地址或子网掩码配置错误3. 主机防火墙未关闭1.ip addr show检查 IP 配置。2.arp -a查看是否学到对方 MAC 地址。3.systemctl status firewalld确认防火墙已关闭。1. 检查网线、交换机。2. 核对/etc/sysconfig/network-scripts/下配置文件。3. 彻底禁用 firewalldsystemctl stop firewalld; systemctl disable firewalld。SSH 免密登录失败1./etc/hosts解析错误2. 公钥未正确追加到authorized_keys3./root/.ssh目录权限不对1.ssh -v rootcompute01查看详细连接过程。2. 检查目标节点/root/.ssh/authorized_keys文件内容。3. 检查目录权限ls -ld /root/.ssh应为700文件authorized_keys应为600。1. 确保所有节点/etc/hosts一致且正确。2. 手动复制公钥cat ~/.ssh/id_rsa.pub | ssh rootcompute01 cat .ssh/authorized_keys。3. 修正权限chmod 700 /root/.ssh; chmod 600 /root/.ssh/authorized_keys。时间不同步chronyc sources显示?1. NTP 服务器不可达2. 防火墙阻止 NTP 端口(123)3. 时区设置错误1.ping 时间服务器地址。2.chronyc tracking查看同步状态。3.timedatectl查看时区。1. 更换pool为cn.pool.ntp.org等国内源。2. 确认防火墙已关闭。3. 设置时区timedatectl set-timezone Asia/Shanghai。无法启用 OpenStack 仓库dnf search openstack无结果1. 仓库未正确启用或配置2. 网络问题无法访问仓库源1.dnf repolist all查看仓库列表。2.dnf clean all; dnf makecache。3. 检查/etc/yum.repos.d/下相关 repo 文件。1. 重新安装仓库 RPM 包。2. 检查并修正仓库配置文件中的baseurl或mirrorlist确保网络可达。3. 暂时禁用其他可能冲突的仓库。主机名修改后不生效1. 未同时修改/etc/hostname和/etc/hosts2. 网络服务未重启1.hostnamectl status查看当前主机名。2.cat /etc/hostname。1. 使用hostnamectl set-hostname controller永久修改。2. 同时更新/etc/hosts文件。3. 重启系统或网络服务systemctl restart systemd-hostnamed。8. 最佳实践与工程建议文档化一切将你的硬件配置、网络规划IP地址、VLAN ID、用途、主机名、所有执行的命令和遇到的错误及解决方案记录下来。这在你未来扩容、迁移或排错时是无价之宝。版本一致性确保所有节点使用完全相同的操作系统版本和内核版本。混合使用 CentOS 7 和 Rocky Linux 8 会带来难以预料的依赖问题。网络隔离如果条件允许将管理网络、数据网络、存储网络部署在独立的物理交换机或严格的 VLAN中。这能有效避免广播风暴和安全性问题也便于性能监控和故障隔离。资源预留不要在 OpenStack 控制节点上运行其他重负载服务。为其预留足够的 CPU 和内存资源特别是当你在控制节点上合并运行网络节点或存储服务时。快照与备份在开始安装 OpenStack 核心组件之前为每个节点的系统盘创建一个虚拟机快照如果使用虚拟化环境或至少备份关键配置文件如网络配置、/etc/hosts、/etc/sysconfig/下的文件。这让你在配置混乱时可以快速回退。逐步验证不要一次性做完所有准备就急着安装 OpenStack。完成每一步如网络配置、SSH免密、时间同步后都进行验证确保当前步骤是成功的再进行下一步。9. 总结与后续方向至此你已经完成了 OpenStack 搭建中最具挑战性的基础准备环节。我们系统性地梳理了从硬件选型、网络规划、操作系统安装到系统配置、网络配置和 SSH 集成的全过程。现在你的环境应该具备以下特征所有节点拥有固定的、可互通的管理 IP。规划了独立的数据网络用于内部流量。准备好了用于外部连接的物理网卡。节点间时间同步。控制节点可以免密 SSH访问所有节点。系统** SELinux 和防火墙已放通**测试环境。已配置好OpenStack 软件仓库。这个状态就像一个打扫干净、布线整齐的机房只等安装机柜和服务器了。接下来你就可以选择使用packstackRDO进行一键化部署或者使用openstack-ansible进行更灵活的自动化部署抑或是手动安装每一个服务来深入理解其架构。在后续的安装过程中你可能会遇到诸如数据库连接失败、消息队列错误、网络代理启动异常等问题。届时请记得回头检查本章节的基础准备是否完全到位尤其是网络连通性和主机名解析它们很可能是许多深层问题的根源。扎实的基础准备是 OpenStack 稳定运行的基石。建议你将本文的检查清单保存下来在今后任何类似的分布式系统部署前都可以作为参考。