资讯动态

OpenStack Train 本地部署全记录:16G 笔记本 + VirtualBox + PackStack,10 个坑全踩了一遍

发布时间:2026/10/29 11:07:38 来源:尧图企业网站定制
一、为什么要折腾这件事我是教计算机专业课的讲云计算和云安全。一直想给学生搭一套真正能跑起来的 OpenStack 实验环境——不是看 PPT而是能在 Horizon 上点几下、看到网络拓扑、能讲清楚 Keystone 认证流程的那种。这个环境主要服务两门课云计算技术Keystone 多租户认证、Glance 镜像管理、Nova 实例生命周期、Neutron SDN 网络拓扑光靠模拟器和远程实验室不够直观云安全安全组规则、租户隔离、浮动 IP、镜像加固没有一套自己能掌控的环境根本演示不了。手里这台笔记本配置很一般项目配置CPUIntel i5-10210U4 核 8 线程轻薄本内存16 GB系统Windows 10 家庭中文版 22H2常驻Docker DesktopWSL2 后端目标很明确本地搭一套 all-in-one OpenStack资源占用尽量小能从 Windows 浏览器访问 Horizon最好还能创建真实实例。这篇文章把从 Docker 一路试到 VMware、再到 VirtualBox 的完整过程写下来包括每一个报错的真实原因和最终解法。照着做你不用再踩我踩过的坑。二、适合谁 / 不适合谁适合你如果你高校老师/学生要做「云计算技术」「云计算基础」课程实验讲「云安全」需要一套能演示安全组、租户隔离、浮动 IP 的环境想在本地练手 OpenStack但没有服务器照着网上教程装到一半卡住想找一份「踩过坑的完整版」。不适合你如果你想跑生产环境——这是教学 all-in-one单节点、无高可用追求高性能建实例——无 KVM 硬件加速时QEMU 软件模拟会很慢需要 Cinder / Swift / Heat 全套——为了省内存这些组件被裁剪掉了。三、路线决策哪些路走不通为什么3.1 Docker Desktop 直接部署否决第一反应机器上已经有 Docker Desktop能不能docker-compose up一把拉起 OpenStack核查后否决三个原因WSL2 里没有/dev/kvm。Docker Desktop 跑在 WSL2 上WSL2 又跑在 Hyper-V 上硬件虚拟化已经被 Hyper-V 占了Nova 做不了硬件加速建实例只能纯软件 QEMU慢到没法用。没有 openvswitch 内核模块。Neutron 需要 OVS 或 Linux Bridge 的内核支持WSL2 里跑不起来。官方openstack/docker仓库已归档不维护GitHub 直连也不稳定。结论Docker Desktop 不适合做「能建真实虚拟机」的 OpenStack。3.2 VMware Workstation两次失败本机装的是 VMware Workstation 9.0.12012 年的版本和 Hyper-V 直接冲突启动就报VMware Workstation and Hyper-V are not compatible.想升级到 VMware 17Broadcom 收购后下载要注册账号163 / QQ 邮箱都收不到验证邮件官方直链全部 404。干脆卸载 VMware转 VirtualBox。3.3 最终方案VirtualBox 7.2 CentOS 7.9 Minimal RDO PackStack Trainall-in-one4 核 / 6GB 内存 / 30GB 磁盘linuxbridge 网络后端。选它的理由VirtualBox 官方直链免注册下载快CentOS 7.9 Train 是 RDO 支持最成熟、中文资料最多的组合PackStack 一条命令拉起全套不用手搓 20 个服务裁掉 Cinder/Heat/Telemetry/Swift/Manila只留 Keystone Glance Nova Neutron Horizon16GB 够跑。为什么还用 CentOS 7.9 Train都已经 EOL 了因为它是国内高校教材、课程大纲、实验指导书里最普及的一套学生搜得到答案、老师接得上课程。教学场景优先「稳」和「资料全」不是优先「新」。需要新版本Ubuntu Yoga/Zed的话配置不能直接套用。四、VirtualBox 安装与虚拟机创建4.1 安装官网下载VirtualBox-7.2.x-Win.exe默认装 C 盘。 VirtualBox / CentOS ISO / Cirros 镜像三个安装包我都放网盘了链接见5.1 节懒得找直链的直接拿。⚠️额外小问题 A想装 D 盘会报Invalid installation directory。原因是 VirtualBox 7.x 要求安装路径每一级目录都不能让普通用户有写/删权限而 D 盘根目录 ACL 天生带Authenticated Users:(M)写权限。改 D 盘根目录 ACL 风险大最后选择程序装 C 盘虚拟机文件放 D 盘。装完后在全局设置里把「默认虚拟电脑位置」改到D:\VirtualBox VMs。4.2 创建虚拟机项目值名称OpenStack内存6144 MB6GBCPU4 核硬盘30GB VDI动态分配网卡NAT桥接模式在这台机器上选不了——Hyper-V 占用了虚拟化VirtualBox 绑不上物理网卡「确定」按钮是灰的。这一点很关键后面坑 10 会用到。4.3 NAT 端口转发NAT 模式下 Windows 访问不了虚拟机必须加端口转发C:\Program Files\Oracle\VirtualBox\VBoxManage.execontrolvmOpenStacknatpf1ssh,tcp,127.0.0.1,2222,,22C:\Program Files\Oracle\VirtualBox\VBoxManage.execontrolvmOpenStacknatpf1horizon,tcp,127.0.0.1,8088,,80之后SSHplink -ssh -P 2222 root127.0.0.1Horizonhttp://127.0.0.1:8088/dashboard⚠️最容易卡住的一点Windows 上不要用10.0.2.15访问。虚拟机在 NAT 模式下10.0.2.15是虚拟机内部的地址宿主机根本路由不到。你在 Windows 浏览器里输http://10.0.2.15只会超时。所有访问都必须走端口转发落到127.0.0.1要访问什么Windows 上输什么Horizon 控制台http://127.0.0.1:8088/dashboardSSHssh -p 2222 root127.0.0.1虚拟机内部的10.0.2.15只在虚拟机里有效宿主机用不了本文示例的 root 密码是123登录 Horizon 用admin/admin。⚠️额外小问题 B8080 端口可能被占用我这台被 PID 10552 占了换成 8088 就好。五、CentOS 7.9 安装5.1 下载镜像CentOS 7 已 EOL官方源下线用清华 vault 源https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.isoMinimal 版就够图形界面没用还吃资源。三样安装资源我都打包放网盘了省得你到处找文件大小说明VirtualBox-7.2.20-175154-Win.exe169.94MB官网下载未修改CentOS-7-x86_64-Minimal-2009.iso973.00MB清华 vault 源下载未修改cirros-0.6.3-x86_64-disk.img20.69MB已校验 qcow2可直接上传 Glance链接https://pan.baidu.com/s/1PEC_9PxM3wb70SKhjgHepw提取码k3a7全部为官方/镜像站原始文件无解压密码、未做任何修改。百度网盘非会员下载慢急用的话直接用上面的官方直链。5.2 安装时的选择软件选择最小安装root 密码教学环境设简单点示例123别用于任何联网环境网络安装时就把以太网打开否则装完连不上网5.3 换国内 yum 源装完第一件事换源。全部用阿里云 中科大双 baseurl一个挂了另一个自动顶上# /etc/yum.repos.d/CentOS-Base.repo [base] nameCentOS-7 - Base baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/ https://mirrors.ustc.edu.cn/centos-vault/7.9.2009/os/$basearch/ gpgcheck0 enabled1 [updates] nameCentOS-7 - Updates baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/ https://mirrors.ustc.edu.cn/centos-vault/7.9.2009/updates/$basearch/ gpgcheck0 enabled1 [extras] nameCentOS-7 - Extras baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/ https://mirrors.ustc.edu.cn/centos-vault/7.9.2009/extras/$basearch/ gpgcheck0 enabled1OpenStack Train 源[openstack-train] nameOpenStack Train baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/cloud/x86_64/openstack-train/ https://mirrors.ustc.edu.cn/centos-vault/7.9.2009/cloud/x86_64/openstack-train/ gpgcheck0 enabled1现在就加上 Virt SIG 源否则后面 compute 阶段会报qemu-kvm-rhev找不到见坑 7[virt-kvm-common] nameCentOS-7 - Virt KVM common baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/virt/x86_64/kvm-common/ https://mirrors.ustc.edu.cn/centos-vault/7.9.2009/virt/x86_64/kvm-common/ gpgcheck0 enabled1/etc/yum.conf加两行防止下载瞬断retries15 timeout1205.4 关闭 SELinuxsetenforce0sed-is/^SELINUX.*/SELINUXpermissive//etc/selinux/config六、PackStack 部署6.1 装 PackStackyum-yinstallcentos-release-openstack-train yum-yinstallopenstack-packstack6.2 生成并裁剪 answers.cfgpackstack --gen-answer-file/root/answers.cfg然后改这几个关键参数省资源 避坑# 管理员密码 CONFIG_KEYSTONE_ADMIN_PWadmin # 数据库和消息队列密码固定下来避免历次失败残留凭据 CONFIG_MYSQL_PWmysqlroot CONFIG_RABBIT_PWrabbitmq # 不装 demo 实例省资源 CONFIG_PROVISION_DEMOn # 网络后端选 linuxbridge不要用默认 OVS见坑 6 CONFIG_NEUTRON_L2_AGENTlinuxbridge CONFIG_NEUTRON_LB_INTERFACE_MAPPINGSphysnet1:br-ex # ML2 机制驱动 CONFIG_NEUTRON_ML2_MECHANISM_DRIVERSlinuxbridge,l2population CONFIG_NEUTRON_ML2_TYPE_DRIVERSvxlan,flat CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPESvxlan # 以下全部关掉省资源 CONFIG_CINDER_INSTALLn CONFIG_HEAT_INSTALLn CONFIG_CEILOMETER_INSTALLn CONFIG_AODH_INSTALLn CONFIG_SWIFT_INSTALLn CONFIG_MANILA_INSTALLn CONFIG_TROVE_INSTALLn CONFIG_SAHARA_INSTALLn CONFIG_IRONIC_INSTALLn CONFIG_MAGNUM_INSTALLn6.3 启动部署packstack --answer-file/root/answers.cfg3060 分钟下载几百个包。下面是我实际踩过的所有坑按出现顺序排列。七、10 个坑核心章节建议收藏坑 1facter 崩溃leatherman_curl.so.1.3.0缺失现象puppet 阶段报 facter 运行失败日志有leatherman_curl.so.1.3.0: cannot open shared object file。原因openstack-train 需要 leatherman 1.3.0但 EPEL 装了 1.10.0版本错配。解法yum-ydowngrade leatherman ldd /usr/bin/facter# 确认没有 not found坑 2yum 下载反复 TCP reset995 个 puppet 资源被 skip现象装到一半python-netifaces、openstack-selinux等包下载失败puppet 连锁失败。原因国内网络到国外源不稳定连接被 reset。解法/etc/yum.conf加retries15、timeout120所有 repo 改阿里云 中科大双 baseurl关键包预先手动装好每个包重试 5 次forpkginopenstack-selinux openstack-dashboard openstack-neutron-linuxbridge openstack-nova-compute;doforiin12345;doyum-yinstall$pkgbreakechoretry$pkg($i);sleep5donedone坑 3python2-qpid-proton版本冲突现象yum 事务失败qpid-proton 版本矛盾。原因EPEL 里有 qpid-proton-c 0.37但 Train 需要 0.26。解法epel.repo的[epel]段加排除excludeqpid-proton* python2-qpid-proton*然后手动装 0.26yum-yinstallqpid-proton-c-0.26.0 python2-qpid-proton-0.26.0坑 4MariaDB 凭据不一致现象Insufficient credentials to authenticateKeystone 起不来。原因历次失败运行残留了 root 密码和 answers.cfg 里的CONFIG_MYSQL_PW对不上。解法彻底重置 MariaDBsystemctl stop mariadbrm-rf/var/lib/mysqlmkdir/var/lib/mysqlchownmysql:mysql /var/lib/mysql mysql_install_db--usermysql systemctl start mariadb并在 answers.cfg 里固定CONFIG_MYSQL_PWmysqlroot、CONFIG_RABBIT_PWrabbitmq。坑 5neutron-server 死循环重启现象journalctl -u neutron-server显示The following mechanism drivers were not found: set([ovn])原因packstack 生成的默认 answers.cfg 里CONFIG_NEUTRON_ML2_MECHANISM_DRIVERSovn但我们没装 OVN。解法改成CONFIG_NEUTRON_ML2_MECHANISM_DRIVERSlinuxbridge,l2population坑 6OVS 后端 puppet 报Missing title现象network 阶段报Error: Evaluation Error: Missing title. The title expression resulted in undef (file: .../neutron/manifests/plugins/ovs/port.pp, line: 7)原因puppet-neutron 模块在 OVS 后端的一个 bugbridge_mappings解析后 title 变成 undef。解法不用 OVS直接换 linuxbridgeCONFIG_NEUTRON_L2_AGENTlinuxbridge CONFIG_NEUTRON_LB_INTERFACE_MAPPINGSphysnet1:br-exlinuxbridge 不经过那个有 bug 的 OVS port 资源定义问题绕开。坑 7compute 阶段qemu-kvm-rhev 2.10.0找不到现象Error: Package: openstack-nova-compute-20.6.0-1.el7.noarch (openstack-train) Requires: qemu-kvm-rhev 2.10.0原因这个包不在 base/updates/cloud-train 源里在 CentOSVirt SIG源里。解法加上virt-kvm-common.repo见 5.3然后yum-yinstallopenstack-nova-compute openstack-nova-migration坑 8Horizon 从 Windows 访问 404现象虚拟机内curl http://10.0.2.15/dashboard返回 200Windows 浏览器访问http://127.0.0.1:8088/dashboard返回 404。原因Apache 的15-horizon_vhost.conf里 ServerAlias 只有10.0.2.15、openstack.local、localhost没有127.0.0.1。请求落到了默认 vhost。解法VirtualHost *:80 ServerName openstack.local ServerAlias 10.0.2.15 ServerAlias openstack.local ServerAlias localhost ServerAlias 127.0.0.1 # 加这一行 ... /VirtualHostsystemctl reload httpd坑 9时间同步被跳过现象PackStack 最后警告Time synchronization installation was skipped。原因最小化安装没装 chrony时间漂移会导致 Keystone token 校验失败。解法yum-yinstallchrony systemctlenable--nowchronyd坑 10启动实例报PortBindingFailedbr-ex 不存在现象openstack server create后实例变 ERRORnova-compute 日志PortBindingFailed: 绑定端口 da3155ca 失败 Interface br-ex for physical network physnet1 does not exist. Agent terminated!openstack network agent list里看不到 linuxbridge-agent。原因linuxbridge-agent 需要br-ex网桥存在并绑定物理网卡但 VirtualBoxNAT 模式下 PackStack 不会自动创建这个网桥。三条处理路径按你的机器条件选方案前提代价A 改桥接宿主机没开 Hyper-V桥接网卡可选最干净但虚拟机 IP 会变answers.cfg 要同步改B 手动建 br-ex只能用 NAT会断 SSH必须在 VirtualBox 控制台操作先拍快照C 不建实例纯教学演示最稳控制台/镜像/拓扑全都能演示只是起不了实例方案 B 的关键步骤完整版含回滚见资源包踩坑排查表.md# 先备份cp/etc/sysconfig/network-scripts/ifcfg-enp0s3 /root/ifcfg-enp0s3.bak# 建桥、迁 IP执行完 SSH 立刻断去 VirtualBox 控制台继续brctl addbr br-ex brctl addif br-ex enp0s3ipaddr flush dev enp0s3ipaddradd10.0.2.15/24 dev br-exiplinksetbr-ex upiprouteadddefault via10.0.2.2 systemctl restart network systemctl restart neutron-linuxbridge-agent openstack network agent list我的建议如果你的课程重点是 Keystone、Glance、Neutron 拓扑、Horizon 操作方案 C 就够了。上传镜像、建网络、建路由、看拓扑图这些完全不需要实例。真要让学生建实例优先考虑方案 A或者换一台没装 Docker Desktop 的机器。八、部署成功后的验收看到这一行就是成了**** Installation completed successfully ******逐项验证source/root/keystonerc_admin openstackservicelist# keystone / glance / nova / neutron / placementopenstack computeservicelist# nova-compute / scheduler / conductor 全部 upopenstack hypervisor list# Type 显示 QEMU无 /dev/kvm 时正常/etc/nova/nova.conf里确认virt_typeqemu。 Windows 上 Hyper-V 占了硬件虚拟化VirtualBox 拿不到 VT-xNova 只能用 QEMU 纯软件模拟。能建、能跑但慢教学够用别跑生产。九、最终访问方式入口地址账号Horizon Webhttp://127.0.0.1:8088/dashboardadmin / adminSSHplink -ssh -P 2222 root127.0.0.1root / 123本文示例OpenStack CLI虚拟机内source /root/keystonerc_adminadmin / admin再强调一次10.0.2.15只在虚拟机内部有效宿主机一律走127.0.0.1 转发端口。登录后的 Dashboard 概况管理员视角的 hypervisor 状态QEMU 类型说明在软件模拟模式刷新后的概况页可以看到资源占用情况项目视角上传镜像后的 Images 列表网络拓扑外部网络ext-netflat和内部网络demo-netvxlan通过路由器连接十、上传镜像与创建第一台实例10.1 关于 Cirros 镜像我已经搞到了附校验方法Cirros 是 OpenStack 官方最小测试镜像约 21MB启动快、占内存小专门用来验证 Glance / Nova / Neutron 是否连通。先说结论我已经下载成功并把它传到虚拟机、上传进 Glance能正常出现在镜像列表里。但我踩过一个很隐蔽的坑值得你花 30 秒看完国内镜像站现在基本都下不到了。我逐个试了清华、阿里、腾讯、华为、北大、中科大的 cirros 目录全部 404 或返回一个 SPA 页面。如果你用下载工具保存那个 404 页面会得到一个 10–50KB 的cirros.img——看起来像镜像其实是 HTML。我第一次就是这么中招的。所以拿到文件后务必先校验ls-lhcirros.img# 真实镜像应 1MB实际约 21MBxxd-l4cirros.img# 应输出 514649fbqcow2 魔数 QFI\xfb输出514649fb→ 真镜像继续输出3c 21 44 4f即!DO→ HTML 错误页删掉重下。最终能用的版本cirros-0.6.3-x86_64-disk.img20.69MBqcow2 格式校验通过后即可上传。这个文件我也放在 5.1 节那个网盘里了直接下不用再到处试镜像站。如果你实在拿不到用占位镜像也能把流程走完qemu-img create-fqcow2 /root/test.img 5MGlance 上传、镜像列表、网络拓扑、Horizon 操作全部可以完整演示只是实例起不来。资源包里的09-first-instance脚本已经内置了这层判断文件头不是 qcow2 就自动回退到占位镜像不会把 HTML 传上去。10.2 上传镜像# 先把镜像传到虚拟机Windows 上用 pscp# pscp -P 2222 -pw 123 cirros-0.6.3-x86_64-disk.img root127.0.0.1:/root/cirros.imgsource/root/keystonerc_admin openstack image createcirros-0.6.3\--file/root/cirros.img\--disk-format qcow2\--container-format bare\--public\--min-disk1\--min-ram64上传成功后在 Horizon「项目 → 计算 → 镜像」能看到cirros-0.6.320.69MBQCOW2公有状态运行中见上面第 5 张图。openstack image list# 确认 statusactive10.3 创建密钥对openstack keypair create test-key/root/test-key.pemchmod600/root/test-key.pem10.4 创建外部网络ext-net对应 VirtualBox 的enp0s3网卡10.0.2.0/24flat 模式openstack network create--external\--provider-physical-network physnet1\--provider-network-type flat ext-net openstack subnet create--networkext-net\--allocation-poolstart10.0.2.100,end10.0.2.200\--gateway10.0.2.1\--subnet-range10.0.2.0/24 ext-subnet10.5 创建内部网络demo-netvxlan 模式租户隔离openstack network create demo-net openstack subnet create--networkdemo-net\--dns-nameserver114.114.114.114\--subnet-range192.168.1.0/24 demo-subnet10.6 创建路由器openstack router create demo-router openstack routerset--external-gateway ext-net demo-router openstack routeraddsubnet demo-router demo-subnet10.7 启动实例openstack flavor list openstack server create--flavorm1.tiny\--imagecirros-0.6.3\--key-name test-key\--networkdemo-net\my-first-vm⚠️ 这一步在 NAT 模式下会撞上坑 10PortBindingFailed。按第七节的方案 A / B / C 处理。10.8 验证命令汇总source/root/keystonerc_admin openstack image list openstack keypair list openstack network list openstack subnet list openstack router list openstack server list openstack flavor list十一、已知限制先说清楚免得你踩到再骂实例创建需要额外处理NAT 模式下br-ex不存在见坑 10。不做处理也能完整演示控制台、镜像、网络拓扑。补充一个实用细节启动失败的实例会变成ERROR但仍然占着配额管理员的 hypervisor 页面会显示「实例 0、内存已用 512MB」这种对不上的状态。记得openstack server delete 名字清掉否则后面的实例可能因配额不足起不来。没有硬件加速宿主机开了 Hyper-V 时只能 QEMU 软件模拟建实例慢。组件是裁剪的没有 Cinder、Swift、Heat、计量告警。要这些得自己开内存也会上去。版本已 EOLCentOS 7.9 Train 都是老版本胜在资料全、和教材对得上不适合生产。明文口令admin/admin、root/123仅为实验严禁联网使用。十二、我把踩坑过程整理成了手册文章已经够你照着做了但有些东西重复敲很烦。我把这套环境里实际跑通的配置和脚本整理成了一个包内容说明answers.cfg已裁剪、已避坑的 packstack 配置4 个 yum repo阿里云 中科大双源含 Virt SIG5 个修复脚本leatherman/qpid 修复、Virt 源、linuxbridge 切换、MariaDB 重置、干净重启verify.sh一键验收不用自己敲一堆 openstack 命令Horizon vhost加了ServerAlias 127.0.0.1解决 404踩坑排查表10 个坑的症状 → 原因 → 解法含坑 10 的三种方案与回滚6 张实测截图可直接用于课件00-开始之前.md版本说明、能力边界、安全声明不含 Cirros 镜像约 21MB为控制包体积未打包正文 10.1 有获取与校验方法资源包地址https://download.csdn.net/download/ntc19235/937749990 积分即可下载免费。配置和脚本全部在我这台 i5-10210U / 16GB 笔记本上跑过拿走直接用。环境实在起不来、又赶着上课的也可以私信我远程协助另计。十三、写在最后这套环境平时开着占 56GB不影响写代码查资料。对教学来说学生能亲手在 Horizon 上看网络拓扑、建项目、配安全组比讲十遍 PPT 都管用。云计算课的实验环节、云安全课的安全组和租户隔离演示这套都够用。如果这篇帮你少走点弯路欢迎点赞收藏有问题评论区留言我会回。版本v1.3 更新2026-10 环境VirtualBox 7.2 CentOS 7.9.2009 OpenStack Train

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑