一台空白 CentOS 7.9,装 OpenStack 前必须打好的六块地基——每一步都有「应该看到什么」

一、部署概述

项目值
部署主机10.10.10.160(localhost.localdomain)
操作系统CentOS 7.9.2009,4 vCPU / 15 GB 内存 / 58 GB 磁盘
网卡ens33,静态 IP 10.10.10.160
内网 yum 源http://10.10.10.10/centos/7.9.2009/(离线内网源)
本篇目标完成部署前的全部系统基线配置

上篇回顾:(一)入门概览与选型——我们确定了 Packstack + CentOS 7.9 + Train 的技术路线,并交代了本环境“无 KVM”的特殊设定。

先说一个扎心的统计:我复盘自己 OpenStack 部署失败的经历,一大半栽在环境准备不干净,而不是 OpenStack 本身。主机名解析错了、时间漂了、yum 源不可达——这些“低级问题”会以非常“高级”的报错形式出现在部署阶段。本篇的每一步看起来平淡,但跳过任何一步,第(三)篇的一键部署就会用各种诡异的报错教你重来。

二、开工前必读:新手最容易踩的 6 个坑

先把坑列出来。这 6 个坑全部来自真实踩坑,后面每一篇都会回收这些伏笔。

#坑一句话解法
1实例显示 ACTIVE 不等于真跑起来了看 console.log 有没有内核输出,virsh dominfo 看 CPU time 是否在涨
2Glance 镜像可能只有 273 字节那是 302 跳转页面被当成镜像存了,openstack image show 看 size
3有些服务 systemctl 查出来是 unknown,不是故障nova-api / glance-api / keystone / placement-api 由 httpd 承载,单元名本身不存在
4默认安全组只放行“同组内”流量从外面 ping/SSH 实例全丢包?先给安全组加 icmp/22 规则
5VMware 虚拟机默认没有 KVM 硬件加速实例引导要 1~3 分钟是正常的;想快就开 VT-x
6命令参数写法有讲究openstack image set 不支持 --file;security group list 不支持 --name

建议把这张表截图存着,后面遇到问题先对号入座,能省下大量盲查时间。

三、1.1 主机名与解析

bash


hostnamectl set-hostname openstack
sed -i '/openstack/d' /etc/hosts
echo "10.10.10.160 openstack" >> /etc/hosts
ping -c 2 openstack

应该看到:ping openstack 有回包,且解析到 10.10.10.160。

为什么这一步如此重要:Keystone 在数据库里注册的服务端点(endpoint)很多是按主机名写的,本机解析不一致会直接导致 Keystone 端点解析失败——而 Keystone 是所有服务的认证入口,它一挂全线瘫痪。这是官方文档里写得最不起眼、后果却最严重的一步。

四、1.2 关防火墙 + SELinux

bash


systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
getenforce

应该看到:getenforce 输出 Permissive。

实验环境直接关最省事;生产环境不要一刀切,按端口清单放行(组件端口表:5000/8774/8778/9292/9696/8776/80,完整 12 端口清单见第七点五节)。

五、1.3 时间同步

bash


date # 先看时间对不对
yum install -y ntpdate && ntpdate 10.10.10.10 # 内网 NTP
# 建议同时配置 chrony 持久化,避免重启后又漂移
yum install -y chrony
systemctl restart chronyd && systemctl enable chronyd
chronyc sources

应该看到:chronyc sources 出现 ^* 开头(已同步)的源。

时间是分布式系统的生命线:Keystone 签发的 Token 带时效校验,机器之间差几十秒就会出现“刚签的 Token 被判过期”的 401;RabbitMQ 消息的时间戳错乱也会引发各种灵异问题。第(七)篇多节点部署时,这条规则会升级为“三台机器必须指向同一个时间源”。

六、1.4 内网 yum 源(CentOS 7 EOL 必做)

CentOS 7 已停止维护,官方源 404,必须切换内网/vault 源。完整配置(整段复制粘贴):

bash


# 6.1 备份旧源
mkdir -p /etc/yum.repos.d/bak-$(date +%F)
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak-$(date +%F)/ 2>/dev/null
# 6.2 写入内网源(节选,完整 11 个仓库段见文末提示)
cat > /etc/yum.repos.d/local.repo <<'EOF'
[local-base]
name=Local CentOS 7.9 - base
baseurl=http://10.10.10.10/centos/7.9.2009/base
enabled=1
gpgcheck=0
[local-updates]
name=Local CentOS 7.9 - Updates
baseurl=http://10.10.10.10/centos/7.9.2009/updates
enabled=1
gpgcheck=0
[local-openstack-train]
name=Local CentOS 7.9 - OpenStack Train
baseurl=http://10.10.10.10/centos/7.9.2009/openstack-train
enabled=1
gpgcheck=0
[epel]
name=Extra Packages for Enterprise Linux 7
baseurl=http://10.10.10.10/centos/7.9.2009/epel
failovermethod=priority
enabled=1
exclude=qpid-proton* leatherman*
gpgcheck=0
[puppetlabs-pc1]
name=Puppet Labs PC1 Repository el 7
baseurl=http://10.10.10.10/centos/7.9.2009/puppetlabs-pc1
enabled=1
gpgcheck=0
EOF
# 6.3 重建缓存并验证
yum clean all
yum makecache fast
yum list available openstack-packstack

应该看到:makecache 无 404;最后能列出 openstack-packstack 包。

三个细节值得注意:

  1. epel 段的 exclude=qpid-proton* leatherman* 是实测踩出来的——这两个包在 EPEL 与 OpenStack Train 源之间有版本冲突,不排除会装坏依赖
  2. 仓库里专门有 puppetlabs-pc1 段——Packstack 底层依赖 Puppet,这个源不可少
  3. 若报 Could not resolve host 或 Connection refused,是访问不到 10.10.10.10,先解决网络再继续,不要硬闯

七、1.5 资源基线确认

bash


free -g # 内存 15G;部署完成后约 7G used
df -h / # 磁盘 58G;部署完成后约 3.7G used
ls /dev/kvm # 本环境不存在 → 无 KVM
grep -oE 'vmx|svm' /proc/cpuinfo | head -1 || echo "无虚拟化指令集"
ip -4 addr show | grep inet # 记下 IP 和网卡名(ens33),后面全程要用

本环境无 /dev/kvm、cpuinfo 无 vmx/svm,实例将走 QEMU TCG 纯软件模拟。 这意味着实例引导极慢(几分钟只消耗几秒 CPU time 是正常的),第(四)(五)篇的排障都以此为大前提。如果宿主机能开 VT-x,强烈建议在虚拟机软件里勾选「虚拟化 Intel VT-x/EPT」。

内存经验值:控制节点 ≥ 8G(15G 更从容),纯计算节点 ≥ 4G。低于 8G 部署能过,但实例一跑起来内存就捉襟见肘。

七点五、进阶:生产环境不放行防火墙怎么办

实验环境直接关 firewalld 没问题,但如果你的环境不允许关,就需要按端口清单放行。OpenStack Train 单机所需的端口(按组件):

组件端口协议
Horizon80/443tcp
Keystone5000tcp
Nova API8774tcp
Placement8778tcp
Glance API9292tcp
Neutron API9696tcp
Cinder API8776tcp
RabbitMQ5672tcp
MariaDB3306tcp(仅限本机/可信网段)
memcached11211tcp(仅限本机/管理网)
VNC/SPICE 代理6080-6082tcp
geneve 隧道6081udp(★计算节点间流量,最容易漏)

bash


# 放行示例(在默认 zone 上)
for p in 80 443 5000 8774 8778 9292 9696 8776 5672 6080 6081; do
firewall-cmd --permanent --add-port=${p}/tcp
done
firewall-cmd --permanent --add-port=6081/udp
firewall-cmd --reload

最高频的遗漏是 6081/udp(geneve 隧道):控制面全通、实例网络不通,现象是实例拿不到 IP——因为隧道路过防火墙被丢了。3306 和 11211 不要对全网开放,数据库和缓存暴露是私有云被攻破的经典入口。

八、为什么是这六块地基(原理层)

每块地基背后都有它对应的 OpenStack 故障模式,理解了因果,才会真正重视:

地基不做的后果故障在日志里的长相
主机名解析Keystone 端点解析失败Could not resolve host: openstack
防火墙组件间端口不通,服务假活连接超时,但服务本身 active
SELinux服务写文件/绑定端口被拒Permission denied(明明 root)
时间同步Token 被判过期401,且时好时坏
yum 源依赖解析失败requires xxx 一大片
资源基线部署中 OOM、实例跑不动进程被 kill,日志戛然而止

特别注意 SELinux 那一行:新手最困惑的报错就是“我是 root 还权限拒绝”——因为 SELinux 是独立于 Linux 权限体系之外的一层强制访问控制(MAC),root 也拗不过它。实验环境设 Permissive(只告警不拦截)最省心;生产环境则应该学配置策略而不是直接关。

时间同步的两层含义

chronyc sources 出现 ^* 只说明“本机和 NTP 源同步了”,还有一层常被忽略:多台机器必须指向同一个源。哪怕两台机器各自同步成功,只要源不同,它们之间仍可能差几百毫秒到几秒——单机无所谓,多节点就会炸(第(七)篇详述)。

bash


# 在 B 机器上查与 A 机器的偏差(A 需开 chronyd 监听)
chronyc tracking | grep 'System time'

九、yum 源排错速查

内网源环境最常见的三类报错与处置:

报错原因处置
Could not resolve hostDNS/hosts 问题临时用 IP 直连 baseurl;检查 /etc/resolv.conf
Connection refused10.10.10.10 上的源服务没起联系源管理员,或 curl 试探 curl -I http://10.10.10.10/centos/7.9.2009/base/
404 Not Found仓库段 URL 路径写错逐段核对 baseurl 与服务器实际目录;yum repolist 看哪个源 0 个包

bash


# 快速定位是哪个源出问题:逐个禁用测试
yum repolist # 先看总包数
yum --disablerepo=* --enablerepo=local-base list available | head

经验:yum makecache 报错时,输出里第一个出现 ERROR 的仓库名就是元凶,不用全网搜报错。

十、小结:部署前检查清单

检查项验证命令通过标准
主机名与解析一致ping <主机名>有回包且 IP 正确
防火墙关闭systemctl is-active firewalldinactive
SELinux PermissivegetenforcePermissive
时间同步chronyc sources出现 ^* 源
内网源可达yum list available openstack-packstack列出包
资源基线free -g / df -h / ls /dev/kvm达标且 KVM 状态已知悉

这份清单建议存成文件,每次重装环境后跑一遍再开装。

下篇预告:(三)Packstack 单机一键部署与 10 步验证——地基打完,应答文件里 1200 行参数怎么改,nohup packstack 跑起来之后看什么。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐