xbzb头像
packstack 装 OpenStack 为什么卡 40 分钟?CentOS Stream 8 双节点部署全过程封面图

packstack 装 OpenStack 为什么卡 40 分钟?CentOS Stream 8 双节点部署全过程

用 packstack 装 OpenStack,最劝退的不是配置,而是「一条命令下去,屏幕上一条斜杠转了四十分钟,不知道它死了还是活着」。这篇把 Victoria 双节点装完的全过程拆成五步、九个命令族,重点讲清三件事:模板机为什么要清 machine-id、应答文件里哪四行必须改、以及那段 40 分钟的等待到底在干什么。文中命令均标注英文全称(如 nmcli = NetworkManager command line),完整清单见文末《附:命令英文全称速查表》。

packstack 部署模型:一份 answers.txt 决定装哪些服务与装到哪些主机,packstack 按文件在 controller 与 compute 上逐条执行 Puppet 清单

本文概要:

项目内容
文章主题从模板机准备到登录 Horizon 的完整双节点安装链路,含应答文件四行改动、NetworkManager 冲突处理与 40 分钟卡点解释
所属类别云计算 → 私有云平台 → OpenStack 部署(CentOS Stream 8 + packstack)
知识关键字packstack · answers.txt · Puppet · NetworkManager · chrony · machine-id · br-ex · OVN · Horizon · nmcli · hostnamectl

主线按「先做什么 → 用什么命令 → 怎么验证 → 出问题怎么退」走。第一、二章定环境和总体步骤,第三到第七章是照着敲的实操链,第八章把本篇出现过的命令按族归类做成速查表,第九章是装完之后最常见的五个故障。想先看「为什么慢」,直接跳到第六章末尾那段。

一、开装之前:两台机器、一张网卡、一个网段

先把边界定死。这套实验的资源清单很少,但每一样都有坑:

资源版本 / 规格说明
系统镜像CentOS-Stream-8-20240603.0-x86_64-dvd1.isominimal 安装即可,不要选带 GUI 的
镜像站阿里云 centos-vault 的 8-streamCentOS 8 已 EOL,官方源失效,只能用 vault
虚拟化平台VMware Workstation 17.5也可用 KVM 宿主,但网卡名会不同
OpenStackVictoria(2020.2)对应 cloud/x86_64/openstack-victoria/ 仓库

两台虚拟机规格完全相同,这不是随便定的:

主机名CPU内存磁盘网卡IP
controller4 核8G100G1 张,NAT192.168.108.10
compute4 核8G100G1 张,NAT192.168.108.11

内存按自己机器情况调,但 controller 不能低于 6G——它要同时跑 MariaDB、RabbitMQ、七个服务的 API,4G 会在 Puppet 阶段直接 OOM。

1.1 网络规划:只有一个网段

项目值备注
网段192.168.108.0/24VMware 的 VMnet8(NAT)
网关192.168.108.2Windows 宿主下是 .2
DNS192.168.108.2与网关同址
DHCP开启装系统时装包用,装完改为静态

⚠️ 注意:Linux 宿主机上跑 VMware,NAT 网关是 192.168.108.1 而不是 .2。照抄 .2 的结果是「能 ping 通同网段,但出不了外网」,表现为 yum 全部超时。

/etc/hosts 两条必须写(两台机器都要一致):

# 两台机器内容完全相同,这是 packstack 认主机的基础
192.168.108.10  controller
192.168.108.11  compute
双节点实验拓扑:物理机 Windows + VMware 的 NAT 网络 192.168.108.0/24,controller 192.168.108.10 跑控制面全套服务,compute 192.168.108.11 只跑 nova-compute 与 OVN 网桥

两台机器的分工从这张图上就能读出重点:controller 是重活全包的(数据库、消息队列、七个 API),compute 特别瘦(只有 nova-compute 和网络 Agent)。所以后面绝大多数命令都在 controller 上执行,compute 上只需要改身份、装 NTP、关 NetworkManager。

二、五步装完:先看总览,再看细节

五步部署流程:准备模板机、克隆并改身份、生成应答文件、关 NetworkManager、执行安装,底部为三项验收动作
步骤做什么关键命令谁执行
1准备模板机(换源、装包、关 SELinux、清身份)yum / sed / vim模板机
2克隆两台并改主机名、IP、时钟hostnamectl / nmcli / chronyc两台各自
3装 packstack 并生成、修改应答文件packstack --gen-answer-filecontroller
4关掉 NetworkManagersystemctl stop/disable/mask两台各自
5按应答文件执行安装packstack --answer-filecontroller

这份清单只用来看「要干几件事」。每步为什么这么做、命令每个参数什么意思,都在下面各章展开,清单里不重复。

三、第 1 步:把模板机做出来,8 件事一次做完

模板机的意义是「把重复配置做一遍,之后全靠完整克隆」。如果两台机器各自装一遍,配置一定会走样;先做一台干净模板,克隆出来的两台天然一致。

模板机准备流程:换 yum 源、装基础包、改系统设置、清身份痕迹,关机拍快照后完整克隆出 controller 与 compute

3.1 换 yum 源:CentOS 8 已 EOL,只能用 vault

CentOS Stream 8 的官方源已经归档,mirrorlist.centos.org 早就解析不到。必须整段换成阿里云的 vault 路径:

# 1 先清空旧源,避免旧的 mirrorlist 干扰
[root@localhost ~]# rm -rf /etc/yum.repos.d/*

# 2 写入 openstack.repo(这里给最关键的三个仓库,其余见下表)
[root@localhost ~]# cat <<EOF > /etc/yum.repos.d/openstack.repo
[centos-openstack-victoria]
name=CentOS 8 - OpenStack victoria
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/cloud/x86_64/openstack-victoria/
gpgcheck=0
enabled=1

[baseos]
name=CentOS Stream 8 - BaseOS
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/BaseOS/x86_64/os/
gpgcheck=0
enabled=1

[appstream]
name=CentOS Stream 8 - AppStream
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/AppStream/x86_64/os/
gpgcheck=0
enabled=1
EOF

# 3 刷新缓存,看到元数据下载完才算通
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache

其余仓库按同一模板追加,把 [名称] 和 baseurl 换掉即可。packstack 装 Victoria 时实际会用到这九个:

仓库段名baseurl 路径段为什么需要
extras / extras-commonextras/x86_64/os/、extras/x86_64/extras-common/EPEL 类依赖
powertoolsPowerTools/x86_64/os/编译与运行时库
highavailabilityHighAvailability/x86_64/os/Pacemaker 相关包
resilientstorageResilientStorage/x86_64/os/集群存储依赖
centos-ceph-pacificstorage/x86_64/ceph-pacific/Cinder/Swift 的部分依赖
centos-rabbitmq-38messaging/x86_64/rabbitmq-38/消息队列
centos-nfv-openvswitchnfv/x86_64/openvswitch-2/OVN/OVS 网络后端
nfv / rtNFV/x86_64/os/、RT/x86_64/os/OVN 与实时内核依赖

gpgcheck=0 是为了省事。生产环境应改为 gpgcheck=1 并配好 gpgkey,否则等于放弃了包完整性校验。

3.2 装基础包:四件套够用

# bash-completion 给 openstack 命令补全,vim 改配置,open-vm-tools 支持关机同步,chrony 对时
[root@localhost ~]# yum install -y bash-completion vim open-vm-tools net-tools chrony.x86_64

# 让补全立刻生效,不必重新登录
[root@localhost ~]# source /usr/share/bash-completion/bash_completion

chrony 必须在模板机就装上,因为第 4 步要用它做主从对时;OpenStack 对时间极其敏感,Token 有效期、消息队列的心跳都靠时钟,两台机器差超过几秒就会出现「莫名其妙认证失败」。

3.3 补齐 hosts、关 SELinux、改网卡

# hosts 两条,两台机器最后要完全一致
[root@localhost ~]# echo '192.168.108.10 controller' >> /etc/hosts
[root@localhost ~]# echo '192.168.108.11 compute' >> /etc/hosts

# 关 SELinux:把 SELINUX= 那一行整行替换成 disabled
[root@localhost ~]# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config

# 网卡先保持 DHCP,克隆完再改静态
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-ens160

ifcfg-ens160 模板机阶段只要四行:

TYPE=Ethernet
BOOTPROTO=dhcp
NAME=ens160
DEVICE=ens160
ONBOOT=yes

⚠️ 注意:sed 改的是配置文件,不重启不生效。模板机马上要关机,所以无所谓;但如果你是在一台正在用的机器上改,必须 reboot 或 setenforce 0 临时生效,否则 SELinux 继续拦着,装完 OpenStack 会出现服务起不来、日志里全是 Permission denied。

3.4 清身份痕迹:模板机最容易漏的一步

克隆出来的机器如果带着母机的身份,会出两类问题:SSH 主机密钥相同(连过去一直告警),machine-id 相同(DHCP 客户端标识重复、systemd 认为自己是同一台机)。

# 删掉 SSH 主机密钥,每台机器首次启动会自己重新生成
[root@localhost ~]# cd /etc/ssh/
[root@localhost ssh]# rm -rf ssh_host_*

# 清空 machine-id(注意是清空内容,不是删文件)
[root@localhost ~]# cat /dev/null > /etc/machine-id
[root@localhost ~]# cat /etc/machine-id

第二条 cat /etc/machine-id 是验证:没有任何输出才算清空成功。如果还有一串 32 位十六进制,说明重定向写错了文件。

3.5 关机、拍快照

# 正常关机,让快照是干净的文件系统状态
[root@localhost ~]# poweroff

关机后在 Workstation 里对这台 openstack_template 拍快照。这张快照是「干净基线」:后面任何一步装崩了,还原它重来,不用重装系统。

四、第 2 步:完整克隆两台,然后只改三样

用完整克隆(Full Clone),不要用链接克隆——链接克隆共享母盘,一台写坏会影响另一台,实验里排查问题时非常容易被误导。

克隆完两台分别开机,第一件事是确认 CPU 虚拟化已开启:

  • 两台虚拟机的设置里勾选「虚拟化 Intel VT-x/EPT 或 AMD-V/RVI」;
  • 否则后面 nova-compute 起虚拟机时报 KVM is not available,虚拟机永远停在 ERROR。

4.1 改主机名

# controller 上
[root@localhost ~]# hostnamectl set-hostname controller
# compute 上
[root@localhost ~]# hostnamectl set-hostname compute

hostnamectl 改完提示符不会立刻变,exit 重登或 bash 起个新 shell 就正常了。

4.2 改静态 IP

controller(192.168.108.10):

[root@controller ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=none                    # 这行从 dhcp 变更为 none
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.108.10
NETMASK=255.255.255.0
GATEWAY=192.168.108.2
DNS1=192.168.108.2
# 重载连接配置再启用,两步都要做
[root@controller ~]# nmcli connection reload ens160
[root@controller ~]# nmcli connection up ens160

compute(192.168.108.11):同样改 ifcfg-ens160,只把 IPADDR 换成 192.168.108.11,其余完全一致;重载命令换成在 compute 上执行:

[root@compute ~]# nmcli connection reload ens160
[root@compute ~]# nmcli connection up ens160

# 验证:能看到 inet 192.168.108.11 和默认路由就对了
[root@compute ~]# ip addr show ens160
[root@compute ~]# ip route

⚠️ 注意:nmcli connection reload 只是让 NetworkManager 重读文件,不会应用;必须再 up 一次。另外两台机器的 IP 千万别配成同一个——克隆机的 DHCP 客户端标识如果没清(第 3.4 步),两台一起开机会抢同一个地址,症状是「一会儿这台通、一会儿那台通」。

4.3 配 NTP:controller 对公网,compute 对 controller

controller:

[root@controller ~]# vim /etc/chrony.conf
# 第 3 行注释掉默认的 centos 池,第 4 行加阿里云 NTP
# pool 2.centos.pool.ntp.org iburst
server ntp.aliyun.com iburst

# 第 22~24 行:允许同网段客户端来对时(默认是注释掉的)
# Allow NTP client access from local network.
#allow 192.168.0.0/16
allow 192.168.108.0/24
[root@controller ~]# systemctl restart chronyd
[root@controller ~]# systemctl enable chronyd

# 验证:出现 ^* 开头的那一行才算对上
[root@controller ~]# chronyc sources -v
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 203.107.6.88                  2   6    17    45   -479us[-1323us] +/-   27ms

compute: 改成指向 controller,不需要对公网。

[root@compute ~]# vim /etc/chrony.conf
# pool 2.centos.pool.ntp.org iburst
server controller iburst

[root@compute ~]# systemctl restart chronyd
[root@compute ~]# systemctl enable chronyd
[root@compute ~]# chronyc sources -v
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^? controller                    0   7     0     -     +0ns[   +0ns] +/-    0ns

^? 的意思是「暂时不可用」,刚配完出现是正常的——Reach 是 0,表示还没收到过包。等十几秒再执行一次,变成 ^* 就成功了。如果一直 ^?,先回 controller 上确认它自己是 ^*,再检查 allow 网段和 udp 123 是否被防火墙拦住。

4.4 关机拍快照

两台都 poweroff 后各拍一张快照(如 01-installed-base)。这张快照是「装 OpenStack 之前的干净状态」,装崩了直接还原,比排查快得多。

五、第 3 步:装 packstack,改四行关键配置

5.1 装包并生成应答文件

# 只在 controller 上装,compute 不需要
[root@controller ~]# yum install -y openstack-packstack

# 生成应答文件(几十上百个参数,全都有默认值)
[root@controller ~]# packstack --gen-answer-file=answers.txt

生成时会打印一段提示,第一次看容易慌:

Packstack changed given value to required value /root/.ssh/id_rsa.pub
Additional information:
 * Parameter CONFIG_NEUTRON_L2_AGENT: You have chosen OVN Neutron backend. Note that this backend does not support the VPNaaS plugin. Geneve will be used as the encapsulation method for tenant networks

这段是告知,不是报错。它在说两件事:packstack 自动生成了 SSH 密钥对(后面要用它免密登录 compute),以及默认的网络后端是 OVN,租户网络用 Geneve 封装,代价是不支持 VPNaaS 插件。

5.2 四行必须改,其余保持默认

[root@controller ~]# vim answers.txt
行号(约)参数改成不改会怎样
60CONFIG_HEAT_INSTALLy不装编排服务,后面玩不了模板
97CONFIG_COMPUTE_HOSTS192.168.108.10,192.168.108.11只装到 controller,compute 节点白装
909CONFIG_NEUTRON_OVN_BRIDGE_IFACESbr-ex:ens160虚拟机建得出来但 ping 不通外网
1169CONFIG_PROVISION_DEMOn自动塞一堆 demo 项目和示例网络,干扰实验

⚠️ 注意:行号不可靠。同一参数在不同 packstack 版本、不同回答文件里位置会变(Victoria 是 60/97/909/1169,换版本可能差几十行)。用 vim 的 /CONFIG_HEAT_INSTALL 搜索参数名再改,比记行号稳。

第四行 CONFIG_NEUTRON_OVN_BRIDGE_IFACES=br-ex:ens160 值得单独解释一句:它的意思是「建一个叫 br-ex 的虚拟交换机,把物理网卡 ens160 桥进去」。虚拟机的东西要通过 br-ex 出去,所以这里填的必须是真实的物理网卡名——ip addr 看到的那个名字,不是你给虚拟机起的名字。

5.3 把所有服务密码统一

应答文件里几十个 CONFIG_*_PW 各是随机串,实验环境记不住。一条 sed 全改成同一个值:

# 先把原件备份成 answers.txt.bak,再把"=" 后面那串小写字母数字统一换成 huawei
[root@controller ~]# sed -i.bak -r 's/(.+_PW)=[0-9a-z]+/\1=huawei/g' answers.txt

拆开看这条正则:

片段含义
(.+_PW)捕获组:任意字符开头、以 _PW 结尾的键名
=字面等号
[0-9a-z]+原值是随机的小写字母数字串
\1=huawei用捕获到的键名 + 新密码替换整段

生产环境绝对不要这么干。admin 密码就是 Horizon 登录密码,也是 CONFIG_KEYSTONE_ADMIN_PW 的值,全平台同密码意味着丢一个等于丢全部。

六、第 4 步:关掉 NetworkManager,再执行安装

6.1 为什么必须关

CentOS 8 默认由 NetworkManager 管网络,而 packstack 的网络组件要自己接管网桥和路由。两者同时改同一块网卡,结果是:

  • br-ex 建不起来,或者建起来又被 NetworkManager 拆掉;
  • 装完重启后 IP 丢失;
  • 日志里出现大量「device is strictly unmanaged」类告警。

所以两台机器都要执行三条:

# controller 和 compute 都要执行
[root@controller ~]# systemctl stop NetworkManager
[root@controller ~]# systemctl disable NetworkManager
[root@controller ~]# systemctl mask NetworkManager

这三个动作的区别值得记一下,很多人只知道 stop:

命令作用关掉后
stop立刻停止当前进程重启后可能又起来
disable取消开机自启被别的服务依赖拉起时还会起
mask建立指向 /dev/null 的符号链接任何方式都起不来,除非 unmask

mask 之后 systemctl start NetworkManager 会报 Unit NetworkManager.service is masked,这是预期行为,不是坏了;要恢复先 systemctl unmask NetworkManager。

6.2 执行安装

[root@controller ~]# packstack --answer-file=answers.txt

关键输出(只看这几行,其余是流水):

Welcome to the Packstack setup utility
The installation log file is available at: /var/tmp/packstack/20240920-102825-fai6j5rg/openstack-setup.log
Installing:
Clean Up                                             [ DONE ]
Discovering ip protocol version                      [ DONE ]
root@192.168.108.10's password:huawei
root@192.168.108.11's password:huawei
Setting up ssh keys                                  [ DONE ]
Preparing servers                                    [ DONE ]
Pre installing Puppet and discovering hosts' details [ DONE ]
...
Preparing Puppet manifests                           [ DONE ]
Copying Puppet modules and manifests                 [ DONE ]
Applying 192.168.108.10_controller.pp
Testing if puppet apply is finished: 192.168.108.10_controller.pp  [ | ]

它会交互式问你两台机器的 root 密码(因为我们把密码统一成了 huawei,两次都输同一个)。之后它会用 SSH 密钥登录两台机器,把 Puppet 清单推过去执行。

6.3 那 40 分钟到底在干什么

packstack 安装耗时分布:清理、发现、准备、写配置条目都在秒级,Applying controller.pp 一步占 40 到 50 分钟

前面几十行 [ DONE ] 加起来不到两分钟,它们只是生成配置文件(写 Nova 的 nova.conf、Neutron 的 ml2_conf.ini、Keystone 的 keystone.conf 等)。真正干活的是最后一步:

Applying 192.168.108.10_controller.pp
Testing if puppet apply is finished: 192.168.108.10_controller.pp  [ | ]

这一步 Puppet 在做:装几十个 RPM 包(OpenStack 全家桶)、建数据库和表、初始化 Keystone 的 service 与 endpoint、生成证书、启十几个 systemd 服务、逐个验证端口。这几件事串行做,40~50 分钟是正常的。

判断它是不是还活着,有两个办法:

# 1 看日志有没有在往前走(另开一个终端)
[root@controller ~]# tail -f /var/tmp/packstack/20240920-102825-fai6j5rg/openstack-setup.log

# 2 看 puppet 进程还在不在
[root@controller ~]# ps -ef | grep -c puppet

⚠️ 注意:这一步绝对不要按 Ctrl+C。中断会留下半装状态(数据库建了一半、服务注册了一半),重跑 packstack 虽然幂等,但清理半成品往往比重新克隆还慢。真卡住了(日志半小时没有任何新增),先看 /var/log/messages 是不是内存打满。

七、第 5 步:装完验收,四件事

7.1 登录 Horizon

地址:http://192.168.108.10/dashboard
用户:admin
密码:huawei(即 CONFIG_KEYSTONE_ADMIN_PW 的值)

能进到「项目 → 概览」页面,说明 Keystone、Horizon、数据库、消息队列这条链全通了。这是最快的一次整体验收。

7.2 打开 network 服务

# controller 和 compute 都要执行
[root@controller ~]# systemctl start network
[root@controller ~]# systemctl enable network
network.service is not a native service, redirecting to systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable network

那两行提示不是报错:network 是 SysV 时代的老脚本,systemd 只是把它转发给 systemd-sysv-install 处理。CentOS 8 里如果没装 initscripts,甚至会报 Unit network.service not found——这种情况忽略即可,网络已经由 OpenStack 的网络组件接管了。

7.3 补上 openstack 命令补全

# 把补全脚本写进 bash_completion.d,路径别写错
[root@controller ~]# openstack complete >> /etc/bash_completion.d/complete

写完之后重开一个 shell,敲 openstack server 按 Tab 就能补出 list、show 这些子命令。不补这一步也能用,只是每次要敲全。

7.4 关机拍快照

两台机器各自关机、拍快照(如 02-openstack-installed)。这一步别省:后面玩坏了(比如把网络改崩、把数据库删了),有这张快照就能回到「刚装好的干净云平台」。

八、命令族速查

8.1 packstack 用法速查表

参数含义英文原意什么时候用
packstack无参数直接跑—全默认安装,实验里几乎不用
--gen-answer-file=文件生成应答文件模板generate answer file第一次装,先要一份可改的配置
--answer-file=文件按指定应答文件安装answer file正式安装
--help看全部参数—查某个 CONFIG_* 是否支持
# 最常用的一条:生成 → 改 → 执行
[root@controller ~]# packstack --gen-answer-file=answers.txt
[root@controller ~]# vim answers.txt
[root@controller ~]# packstack --answer-file=answers.txt

8.2 hostnamectl 用法速查表

参数含义英文原意
hostnamectl不带参数看当前主机名与系统信息host name control
set-hostname 名字永久修改主机名set hostname
--static / --transient只改静态名 / 只改临时名static / transient
[root@localhost ~]# hostnamectl set-hostname controller
[root@controller ~]# hostnamectl          # 验证,Static hostname 那一行

8.3 nmcli 用法速查表

参数含义英文原意
connection reload 网卡重新读配置文件,不生效reload
connection up 网卡启用连接(真正应用)up
connection down 网卡停用连接down
connection show列出所有连接show
device status看设备状态与地址device status
# 改完 ifcfg 的标准两步
[root@controller ~]# nmcli connection reload ens160
[root@controller ~]# nmcli connection up ens160

只 reload 不 up,配置文件变了但网卡还在用旧地址,ip addr 看到的仍是老 IP —— 这是误判「配置没写对」的头号原因。

8.4 chronyc 用法速查表

参数含义英文原意
sources -v列出时间源与状态(带表头解释)sources verbose
tracking看当前同步偏移与状态tracking
sourcestats看每个源的统计source statistics
makestep立即强制校准(跳变)make step

sources -v 输出里三个符号最该记:^* 是当前选中的最佳源、已同步;^+ 是可用源、参与合并;^? 是不可用(还没收到包、被防火墙拦、或对方没开服务)。

[root@compute ~]# chronyc sources -v
[root@compute ~]# chronyc tracking     # 看 System time 偏移是不是毫秒级

8.5 systemctl 三件套:stop / disable / mask

子命令管什么重启后还起吗恢复方式
stop当前进程会(如果有自启)start
disable开机自启项不会(除非被依赖拉起)enable
mask整个单元(软链到 /dev/null)绝对不会unmask
# 彻底禁用 NetworkManager 的标准三连
[root@controller ~]# systemctl stop NetworkManager
[root@controller ~]# systemctl disable NetworkManager
[root@controller ~]# systemctl mask NetworkManager

九、装完用不了?五个高频故障

五个高频故障对照表:Dashboard 打不开、chronyc 显示不可用、建虚拟机失败、compute 服务全红、network 服务不存在,各自的根因与处置

9.1 Dashboard 打不开

现象:浏览器一直转圈或提示无法连接。
排查顺序:

[root@controller ~]# systemctl status httpd           # 网页服务起没起
[root@controller ~]# systemctl status openstack-keystone   # 认证起没起
[root@controller ~]# systemctl stop firewalld && systemctl disable firewalld  # 两台都关

八成是防火墙。packstack 装完不会自动关 firewalld,而 Horizon 要 80/443、Keystone 要 5000、RabbitMQ 要 5672,全被拦着。

9.2 chronyc sources 一直显示 ^?

根因有两种:compute 没连上 controller,或者 controller 自己也没对上网。
处置:先在 controller 上确认有 ^*;再检查 controller 的 allow 192.168.108.0/24 是否取消注释、systemctl status chronyd 是否在跑;最后 ss -unlp | grep 123 看端口有没有被防火墙挡。

9.3 建虚拟机失败,实例直接 ERROR

排查顺序(按「建 VM 的调用链」倒着查):

# 1 镜像是否 active
[root@controller ~]# openstack image list
# 2 网络与子网是否存在
[root@controller ~]# openstack network list && openstack subnet list
# 3 计算节点服务是否在跑
[root@compute ~]# systemctl status openstack-nova-compute
# 4 真正的报错在这里,不在 controller 上
[root@compute ~]# tail -50 /var/log/nova/nova-compute.log

最常见的原因是 br-ex 没绑上物理网卡(CONFIG_NEUTRON_OVN_BRIDGE_IFACES 那行填错了网卡名),或者 compute 节点没开 CPU 虚拟化。

9.4 compute 节点服务全红

根因:克隆时没清 machine-id 或 IP 冲突,导致两台机器身份相同。
处置:

# 两台机器分别看,必须不同
[root@compute ~]# cat /etc/machine-id
[root@controller ~]# cat /etc/machine-id

如果相同,清空其中一台的 machine-id 再重启;确认 IP 不重复后重跑 packstack --answer-file=answers.txt(幂等,不会把已配好的搞乱)。

9.5 network.service 不存在

现象:systemctl start network 报 Unit network.service not found。
根因:CentOS 8 用 NetworkManager,network 是 initscripts 提供的兼容脚本,minimal 安装可能没带。
处置:装 initscripts,或者直接忽略——只要 ip addr 有地址、能 ping 通网关,网络就是好的。

📚 参考资料(官方文档 · 中英双语)

附:命令英文全称速查表

命令 / 缩写英文全称 / 原意作用
packstackpack + stack(打包成套件)OpenStack 一键部署工具
yumYellowdog Updater Modified包管理器
sedstream editor流编辑器,批量改文本
vimVi IMproved文本编辑器
nmcliNetworkManager command lineNetworkManager 命令行
hostnamectlhostname control主机名管理
chronycchrony clientchrony 对时客户端
systemctlsystem controlsystemd 服务管理
poweroffpower off关机
source—在当前 shell 执行脚本
EOLEnd of Life停止维护
NTPNetwork Time Protocol网络时间协议
OVNOpen Virtual Network虚拟网络实现
OVSOpen vSwitch虚拟交换机
br-exbridge external对外网桥
Puppet—配置管理工具,packstack 的执行引擎
Horizon—OpenStack 的 Web 控制台
EPELExtra Packages for Enterprise Linux企业版 Linux 附加包

总结:packstack 安装的难点不在命令,而在三处「不这么做就白装」——模板机不清 machine-id 会让克隆机身份冲突、CONFIG_NEUTRON_OVN_BRIDGE_IFACES 填错网卡名会让虚拟机上不了网、NetworkManager 不 mask 会跟网络组件抢网卡。40 分钟不是卡死,是 Puppet 在装几十个包、建库、注册服务。下一篇换个方向,从自建私有云转到公有云:用一个华为云账号,把 IAM 子用户和 VPC 走一遍。


📚 同系列 · 云计算与私有云平台(其余篇目见博客主页)

blog.csdn.net/nbsxl

  • 上一篇:《OpenStack 装了却说不清它是什么?从起源到九大核心服务一次讲透》
  • 下一篇:《华为云从注册到释放:实名认证、IAM 子用户与 VPC 一条龙实操》
  • 相关篇:《KVM 环境搭建:系统自带组与本地 yum 源两条路》

💬 你装 packstack 时卡在哪一步了?是停在 controller.pp 不敢动,还是装完 Dashboard 打不开?评论区把报错贴出来,一起看。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/nbsxl/article/details/169168683

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--