packstack --allinone一条命令装完整个 OpenStack但“装完”和“能用”之间隔着一份 10 步验证清单一、部署概述项目值部署方式Packstack All-in-One单机同时扮演 controller compute network storage 四个角色安装包openstack-packstack-15.1.0-1.el7Train耗时约 20~60 分钟取决于机器性能和磁盘速度部署产物/root/keystonerc_adminadmin 凭据、Dashboard 入口、部署日志上篇回顾二单机环境准备与系统基线——主机名、防火墙、时间、内网源六块地基已打好6 个坑也埋好了伏笔。本篇是单机部署的主菜。核心内容三块应答文件怎么改尤其是装哪些组件、部署为什么要丢后台跑、装完怎么证明“真的能用”。二、All-in-One 是什么适合谁一台服务器同时扮演controller compute network storage四个角色用 Packstack 一键部署。适合组件认知、Dashboard 操作、创建云主机的入门体验不适合生产单点、无高可用、资源争抢。它与多节点部署的区别只在于应答文件里几行 Host 参数——第七八篇会验证这一点。三、安装 Packstack 并生成应答文件bashyum install -y openstack-packstackrpm -q openstack-packstack # 确认版本15.1.0-1.el7packstack --gen-answer-file/root/packstack-answer.txt应该看到/root/packstack-answer.txt生成成功约 1200 行。这 1200 行就是 Packstack 的全部秘密所谓“一键部署”本质是生成一份参数清单交给 Puppet 执行。看懂关键参数比背部署命令有用得多。四、应答文件关键参数实测值4.1 拓扑参数单机 四个角色全指向本机iniCONFIG_CONTROLLER_HOST10.10.10.160CONFIG_COMPUTE_HOSTS10.10.10.160CONFIG_NETWORK_HOSTS10.10.10.160CONFIG_STORAGE_HOST10.10.10.160用 sed 一把改把 IP 换成你自己的bashANS/root/packstack-answer.txtsed -i s|^CONFIG_CONTROLLER_HOST.*|CONFIG_CONTROLLER_HOST10.10.10.160| $ANSsed -i s|^CONFIG_COMPUTE_HOSTS.*|CONFIG_COMPUTE_HOSTS10.10.10.160| $ANSsed -i s|^CONFIG_NETWORK_HOSTS.*|CONFIG_NETWORK_HOSTS10.10.10.160| $ANSsed -i s|^CONFIG_STORAGE_HOST.*|CONFIG_STORAGE_HOST10.10.10.160| $ANS记住这四行第七篇多节点部署只需要把 COMPUTE 换成别的机器 IP——单机和多节点的区别就这么大。4.2 密码与组件取舍bash# 管理员密码留空会随机生成新手建议自己指定方便登录 Dashboardsed -i s|^CONFIG_KEYSTONE_ADMIN_PW.*|CONFIG_KEYSTONE_ADMIN_PWAdmin123| $ANS# 组件取舍核心 监控装其余关sed -i s|^CONFIG_MARIADB_INSTALL.*|CONFIG_MARIADB_INSTALLy| $ANS # 数据库sed -i s|^CONFIG_GLANCE_INSTALL.*|CONFIG_GLANCE_INSTALLy| $ANS # 镜像sed -i s|^CONFIG_CINDER_INSTALL.*|CONFIG_CINDER_INSTALLy| $ANS # 块存储sed -i s|^CONFIG_NOVA_INSTALL.*|CONFIG_NOVA_INSTALLy| $ANS # 计算sed -i s|^CONFIG_NEUTRON_INSTALL.*|CONFIG_NEUTRON_INSTALLy| $ANS # 网络sed -i s|^CONFIG_HORIZON_INSTALL.*|CONFIG_HORIZON_INSTALLy| $ANS # 仪表盘sed -i s|^CONFIG_SWIFT_INSTALL.*|CONFIG_SWIFT_INSTALLy| $ANS # 对象存储sed -i s|^CONFIG_CEILOMETER_INSTALL.*|CONFIG_CEILOMETER_INSTALLy| $ANS # 计量sed -i s|^CONFIG_AODH_INSTALL.*|CONFIG_AODH_INSTALLy| $ANS # 告警# 以下可选组件全部关掉for c in MANILA PANKO SAHARA HEAT MAGNUM TROVE IRONIC; dosed -i s|^CONFIG_${c}_INSTALL.*|CONFIG_${c}_INSTALLn| $ANSdone组件装多了对单机体验意义不大反而拖慢部署并加大排障面——每多一个组件就多一组数据库表、多一条 MQ 通道、多一份日志。体验环境建议只留核心 监控。4.3 镜像下载地址预防 273 字节坑应答文件里有一行CONFIG_PROVISION_IMAGE_URL控制 Packstack 自动下载的测试镜像bashgrep ^CONFIG_PROVISION_IMAGE_URL $ANS# CONFIG_PROVISION_IMAGE_URLhttps://download.cirros-cloud.net/0.3.5/...这个 URL 若返回 302 重定向且下载器不跟随就会把 302 页面当镜像注册——第五篇的主角。可以提前改成内网直达地址规避或者装完手动验证 size。五、执行部署务必丢后台bashnohup packstack --answer-file/root/packstack-answer.txt /root/packstack-run.log 21 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 / swiftopenstack service list可见网络后端ML2 OVNpublicflat、privategeneve外部网关br-ex 上 172.24.4.1Dashboardhttp://10.10.10.160/dashboard/302 跳登录页 正常默认 flavorm1.tiny1 vCPU / 512MB / 1GB 盘七、安装后 10 步验证清单每次登录后第一件事记住坑 4CLI 报 401 十有八九是没 sourcebashsource /root/keystonerc_admincat /root/keystonerc_admin # 看看里面是什么OS_AUTH_URL、用户名、密码、项目步验证内容命令通过标准1CLI 可用openstack token issue能输出 id2Keystoneopenstack project list/user list有 admin 项目和用户3Glanceopenstack image listcirros 存在★须验 size见下4网络openstack network list --longpublicflat/ExternalTrueprivategeneve5计算openstack compute service listnova 三服务均up6资源池openstack hypervisor list1 台vcpus4memory_mb153607Dashboardcurl -s -o /dev/null -w %{http_code} http://localhost/dashboard/3028安全组openstack security group rule create --proto icmp default规则可见9实例openstack server create ... --waitACTIVE 且 console.log 有内核输出10巡检跑第六篇健康检查脚本九大项无 down第 3 步的镜像要特别强调——验证 size不能只看 statusbashopenstack image show cirros -c size -c status -f value# 正常13M~20M 量级若输出 273 → 302 坑去第五篇领解药第 9 步的完整实操网络、路由、浮动 IP、登录在第四篇展开。七点五、三个典型部署失败案例附定位过程部署失败不丢人关键是会读日志。三个真实场景案例 1卡在 RabbitMQ 模块textError: Could not start Service[rabbitmq-server]定位systemctl status rabbitmq-server发现主机名解析失败。RabbitMQ 强依赖主机名节点名就是 rabbit主机名。处置回头补 hosts 解析重跑。案例 2Keystone 模块报数据库连接拒绝textError: Cant connect to MySQL server (MariaDB::Server connection error)定位MariaDB 起来了但 Keystone 拿不到密码——多见于重复部署后旧库残留。处置mysql -e drop database keystone;后重跑仅限实验环境。案例 3最后阶段实例镜像下载失败textError: Provision image download failed定位CONFIG_PROVISION_IMAGE_URL外网不可达或返回 302。处置改成内网可达地址或直接置空后手动上传镜像推荐后者顺便避坑。三个案例的共同点报错模块名就是排查起点不需要全网搜报错字符串。Packstack 的报错格式Could not start Service[xxx]里的 xxx 就是 systemd 服务名直接 systemctl status 它。八、Packstack 背后发生了什么Puppet 原理一页通看懂执行过程报错时才知道去哪看manifestPuppet 的“剧本”描述每个节点上应该有什么包、什么配置文件、什么服务状态留档在/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_SIZECinder 卷组大小默认 20G按磁盘余量调CONFIG_PROVISION_DEMO是否装演示镜像/网络y 方便验证n 环境更干净CONFIG_HEAT_INSTALL编排服务体验阶段 nCONFIG_SSL_ENABLEHTTPS实验不开完整参数含义可用grep -v ^# /root/packstack-answer.txt先看生效值grep ^#CONFIG_ 文件看带注释的默认值。十、部署日志怎么读textNotice: /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_adminadmin可用镜像/root/cirros-0.3.5-x86_64-disk.img13MB实测可引导Dashboardhttp://10.10.10.160/dashboard/教学场景提示本机无 KVM 硬件加速实例引导要几分钟。讲师演示前先预热一台实例避免现场干等。下篇预告四创建第一台云主机——网络、子网、路由、安全组、实例、浮动 IP从 CLI 完整走一遍云主机诞生流程。