OpenStack 部署记录(三):Packstack 单机一键部署与 10 步验证

packstack --allinone:一条命令装完整个 OpenStack;但"装完"和"能用"之间,隔着一份 10 步验证清单

一、部署概述

项目 值
部署方式 Packstack All-in-One(单机同时扮演 controller + compute + network + storage 四个角色)
安装包 openstack-packstack-15.1.0-1.el7(Train)
耗时 约 20~60 分钟(取决于机器性能和磁盘速度)
部署产物 /root/keystonerc_admin(admin 凭据)、Dashboard 入口、部署日志

上篇回顾:(二)单机环境准备与系统基线------主机名、防火墙、时间、内网源六块地基已打好,6 个坑也埋好了伏笔。

本篇是单机部署的主菜。核心内容三块:应答文件怎么改(尤其是装哪些组件)、部署为什么要丢后台跑、装完怎么证明"真的能用"。

二、All-in-One 是什么,适合谁

一台服务器同时扮演 controller + compute + network + storage 四个角色,用 Packstack 一键部署。

适合:组件认知、Dashboard 操作、创建云主机的入门体验;不适合生产(单点、无高可用、资源争抢)。它与多节点部署的区别只在于应答文件里几行 Host 参数------第(七)(八)篇会验证这一点。

三、安装 Packstack 并生成应答文件

bash

复制代码

|---|----------------------------------------------------------|
| | yum install -y openstack-packstack |
| | rpm -q openstack-packstack # 确认版本:15.1.0-1.el7 |
| | packstack --gen-answer-file=/root/packstack-answer.txt |

应该看到 :/root/packstack-answer.txt 生成成功,约 1200 行。

这 1200 行就是 Packstack 的全部秘密:所谓"一键部署",本质是生成一份参数清单交给 Puppet 执行。看懂关键参数,比背部署命令有用得多。

四、应答文件关键参数(实测值)

4.1 拓扑参数:单机 = 四个角色全指向本机

ini

复制代码

|---|---------------------------------------|
| | CONFIG_CONTROLLER_HOST=10.10.10.160 |
| | CONFIG_COMPUTE_HOSTS=10.10.10.160 |
| | CONFIG_NETWORK_HOSTS=10.10.10.160 |
| | CONFIG_STORAGE_HOST=10.10.10.160 |

用 sed 一把改(把 IP 换成你自己的):

bash

复制代码

|---|-----------------------------------------------------------------------------------|
| | ANS=/root/packstack-answer.txt |
| | sed -i 's|^CONFIG_CONTROLLER_HOST=.*|CONFIG_CONTROLLER_HOST=10.10.10.160|' $ANS |
| | sed -i 's|^CONFIG_COMPUTE_HOSTS=.*|CONFIG_COMPUTE_HOSTS=10.10.10.160|' $ANS |
| | sed -i 's|^CONFIG_NETWORK_HOSTS=.*|CONFIG_NETWORK_HOSTS=10.10.10.160|' $ANS |
| | sed -i 's|^CONFIG_STORAGE_HOST=.*|CONFIG_STORAGE_HOST=10.10.10.160|' $ANS |

记住这四行,第(七)篇多节点部署只需要把 COMPUTE 换成别的机器 IP------单机和多节点的区别,就这么大。

4.2 密码与组件取舍

bash

复制代码

|---|------------------------------------------------------------------------------------|
| | # 管理员密码:留空会随机生成,新手建议自己指定,方便登录 Dashboard |
| | sed -i 's|^CONFIG_KEYSTONE_ADMIN_PW=.*|CONFIG_KEYSTONE_ADMIN_PW=Admin@123|' $ANS |
| | |
| | # 组件取舍:核心 + 监控装,其余关 |
| | sed -i 's|^CONFIG_MARIADB_INSTALL=.*|CONFIG_MARIADB_INSTALL=y|' $ANS # 数据库 |
| | sed -i 's|^CONFIG_GLANCE_INSTALL=.*|CONFIG_GLANCE_INSTALL=y|' $ANS # 镜像 |
| | sed -i 's|^CONFIG_CINDER_INSTALL=.*|CONFIG_CINDER_INSTALL=y|' $ANS # 块存储 |
| | sed -i 's|^CONFIG_NOVA_INSTALL=.*|CONFIG_NOVA_INSTALL=y|' $ANS # 计算 |
| | sed -i 's|^CONFIG_NEUTRON_INSTALL=.*|CONFIG_NEUTRON_INSTALL=y|' $ANS # 网络 |
| | sed -i 's|^CONFIG_HORIZON_INSTALL=.*|CONFIG_HORIZON_INSTALL=y|' $ANS # 仪表盘 |
| | sed -i 's|^CONFIG_SWIFT_INSTALL=.*|CONFIG_SWIFT_INSTALL=y|' $ANS # 对象存储 |
| | sed -i 's|^CONFIG_CEILOMETER_INSTALL=.*|CONFIG_CEILOMETER_INSTALL=y|' $ANS # 计量 |
| | sed -i 's|^CONFIG_AODH_INSTALL=.*|CONFIG_AODH_INSTALL=y|' $ANS # 告警 |
| | # 以下可选组件全部关掉 |
| | for c in MANILA PANKO SAHARA HEAT MAGNUM TROVE IRONIC; do |
| | sed -i "s|^CONFIG_${c}_INSTALL=.*|CONFIG_${c}_INSTALL=n|" $ANS |
| | done |

组件装多了对单机体验意义不大,反而拖慢部署并加大排障面------每多一个组件就多一组数据库表、多一条 MQ 通道、多一份日志。体验环境建议只留核心 + 监控。

4.3 镜像下载地址(预防 273 字节坑)

应答文件里有一行 CONFIG_PROVISION_IMAGE_URL,控制 Packstack 自动下载的测试镜像:

bash

复制代码

|---|----------------------------------------------------------------------------|
| | grep '^CONFIG_PROVISION_IMAGE_URL' $ANS |
| | # CONFIG_PROVISION_IMAGE_URL=https://download.cirros-cloud.net/0.3.5/... |

这个 URL 若返回 302 重定向且下载器不跟随,就会把 302 页面当镜像注册------第(五)篇的主角。 可以提前改成内网直达地址规避,或者装完手动验证 size。

五、执行部署(务必丢后台)

bash

复制代码

|---|---------------------------------------------------------------------------------------------|
| | nohup packstack --answer-file=/root/packstack-answer.txt > /root/packstack-run.log 2>&1 & |
| | tail -f /root/packstack-run.log |

为什么一定要 nohup + 日志文件:部署动辄 20~40 分钟,SSH 会话断线(笔记本休眠、网络抖动)不会中断后台部署,重连后 tail -f 日志接着看。如果前台跑,断线即前功尽弃。

过程解读:

  • Puppet 输出一大屏绿字/黄字属正常,只要不出现红色 ERROR
  • 部署中会要求输入各节点 root 密码(单机就是本机)
  • 失败可直接重跑:packstack 支持续装,同一命令再执行一遍即可
  • 多次重跑会生成 packstack-run.log、run2、run3...,排障时可对比

应该看到(最后一行):

复制代码
**** Installation completed successfully ******

同时生成 /root/keystonerc_admin 凭据文件。

六、部署后的环境快照(实测值)

项目 值
磁盘占用 根分区约 3.7G used
内存占用 约 7G used
服务列表 keystone / glance / nova / neutron / cinder / swift(openstack service list 可见)
网络后端 ML2 + OVN,public=flat、private=geneve
外部网关 br-ex 上 172.24.4.1
Dashboard http://10.10.10.160/dashboard/(302 跳登录页 = 正常)
默认 flavor m1.tiny(1 vCPU / 512MB / 1GB 盘)

七、安装后 10 步验证清单

每次登录后第一件事(记住坑 4:CLI 报 401 十有八九是没 source):

bash

复制代码

|---|--------------------------------------------------------------|
| | source /root/keystonerc_admin |
| | cat /root/keystonerc_admin # 看看里面是什么:OS_AUTH_URL、用户名、密码、项目 |

步 验证内容 命令 通过标准
1 CLI 可用 openstack token issue 能输出 id
2 Keystone openstack project list / user list 有 admin 项目和用户
3 Glance openstack image list cirros 存在(★须验 size,见下)
4 网络 openstack network list --long public=flat/External=True,private=geneve
5 计算 openstack compute service list nova 三服务均 up
6 资源池 openstack hypervisor list 1 台,vcpus=4,memory_mb=15360
7 Dashboard curl -s -o /dev/null -w '%{http_code}' http://localhost/dashboard/ 302
8 安全组 openstack security group rule create --proto icmp default 规则可见
9 实例 openstack server create ... --wait ACTIVE 且 console.log 有内核输出
10 巡检 跑第(六)篇健康检查脚本 九大项无 down

第 3 步的镜像要特别强调------验证 size,不能只看 status:

bash

复制代码

|---|----------------------------------------------------------|
| | openstack image show cirros -c size -c status -f value |
| | # 正常:13M~20M 量级;若输出 273 → 302 坑,去第(五)篇领解药 |

第 9 步的完整实操(网络、路由、浮动 IP、登录)在第(四)篇展开。

七点五、三个典型部署失败案例(附定位过程)

部署失败不丢人,关键是会读日志。三个真实场景:

案例 1:卡在 RabbitMQ 模块

text

复制代码
Error: Could not start Service[rabbitmq-server]

定位:systemctl status rabbitmq-server 发现主机名解析失败。RabbitMQ 强依赖主机名(节点名就是 rabbit@主机名)。处置:回头补 hosts 解析,重跑。

案例 2:Keystone 模块报数据库连接拒绝

text

复制代码
Error: Can't connect to MySQL server (MariaDB::Server connection error)

定位:MariaDB 起来了但 Keystone 拿不到密码------多见于重复部署后旧库残留。处置:mysql -e 'drop database keystone;' 后重跑(仅限实验环境)。

案例 3:最后阶段实例镜像下载失败

text

复制代码
Error: Provision image download failed

定位:CONFIG_PROVISION_IMAGE_URL 外网不可达或返回 302。处置:改成内网可达地址,或直接置空后手动上传镜像(推荐后者,顺便避坑)。

三个案例的共同点:报错模块名就是排查起点,不需要全网搜报错字符串。 Packstack 的报错格式 Could not start Service[xxx] 里的 xxx 就是 systemd 服务名,直接 systemctl status 它。

八、Packstack 背后发生了什么(Puppet 原理一页通)

看懂执行过程,报错时才知道去哪看:

  • manifest :Puppet 的"剧本",描述每个节点上应该有什么包、什么配置文件、什么服务状态,留档在 /var/tmp/packstack/
  • 执行顺序有讲究 :基础依赖先行------MariaDB 先起,再 RabbitMQ,然后 Keystone(它要写库),其余服务最后;所以部署中途失败时,看日志停在哪一步就知道是哪个基础组件出的问题
  • 幂等性:Puppet 是声明式的("最终状态应该是 X"),所以失败后直接重跑是安全的,已完成的步骤会被跳过

排障技巧:/var/tmp/packstack/<运行ID>/manifest/ 下按节点分目录存放了每个组件的 puppet 片段,部署卡住时 grep -r ERROR 这个目录比看屏幕滚动的输出有效得多。

九、应答文件常用参数速查(超出基本部署的部分)

参数 作用 建议
CONFIG_NEUTRON_ML2_TYPE_DRIVERS 网络类型 默认 geneve,flat 即可
CONFIG_CINDER_VOLUMES_SIZE Cinder 卷组大小 默认 20G,按磁盘余量调
CONFIG_PROVISION_DEMO 是否装演示镜像/网络 y 方便验证;n 环境更干净
CONFIG_HEAT_INSTALL 编排服务 体验阶段 n
CONFIG_SSL_ENABLE HTTPS 实验不开

完整参数含义可用 grep -v '^#' /root/packstack-answer.txt 先看生效值,grep '^#CONFIG_' 文件 看带注释的默认值。

十、部署日志怎么读

text

复制代码

|---|-----------------------------------------------------------------------------------------|
| | Notice: /Stage[main]/Nova::Db::Sync/Exec[nova-db-sync]/returns: executed successfully |
| | ↑ 正常:某模块某步骤完成 |
| | |
| | Warning: Scope(Class[Neutron::Server]): received deprecated parameter |
| | ↑ 警告:不影响部署,可忽略 |
| | |
| | Error: Could not start Service[rabbitmq-server] |
| | ↑ 失败:错误发生在哪个 Service,就去看哪个服务的日志 |

把日志按 Notice/Warning/Error 三类过筛,一屏刷过去只需眼睛盯着 Error。

十一、交付物清单

内容 位置 / 说明
应答文件 /root/packstack-answer.txt(多节点的拓扑也改它)
部署日志 /root/packstack-run.log(重跑会生成 run2/run3,可对比)
CLI 凭据 /root/keystonerc_admin(admin)
可用镜像 /root/cirros-0.3.5-x86_64-disk.img(13MB,实测可引导)
Dashboard http://10.10.10.160/dashboard/

教学场景提示:本机无 KVM 硬件加速,实例引导要几分钟。讲师演示前先预热一台实例,避免现场干等。
下篇预告:(四)创建第一台云主机------网络、子网、路由、安全组、实例、浮动 IP,从 CLI 完整走一遍云主机诞生流程。

相关推荐
会议咨询3 小时前
2026年机械、云计算与机电一体化国际会议(MECCM 2026)
云计算·机电一体化·机械
云布道师4 小时前
新一代全栈自研 CPFS 正式商业化: 为下一代 AI 训练集群设计
阿里云·云计算
会议咨询5 小时前
2026年云计算、交通与机电控制国际会议(CTMC 2026)
云计算·交通·机电控制
Geek-Chow6 小时前
05.2 · AWS Lambda 别名(Alias)详解:加权路由、金丝雀发布与秒级回滚
云计算
yunlaodacom6 小时前
腾讯云国际站代理商:COS跨域请求失败怎么办?CORS配置步骤、OPTIONS预检与403错误排查
云计算·腾讯云
做运维的阿瑞7 小时前
Terraform 循环与动态资源:count、for_each 与 dynamic
云原生·云计算·terraform
tg_xianheyun21 小时前
亚马逊云服务器部署网站的步骤与上线检查清单
服务器·阿里云·云计算
做运维的阿瑞1 天前
Terraform 入门实战:安装与实施
云原生·云计算·terraform
可达智灵1 天前
堵了门,钥匙还在:一次持续九个月的 AWS 接管修复
云计算·aws·可达智灵