
1. 先搞清楚 DevStack 到底能帮你做什么以及它不适合做什么如果你刚接触 OpenStack想快速在本地或一台测试机上搭建一个能跑起来的云环境DevStack 几乎是目前最直接的选择。它本质上是一个自动化脚本集合通过拉取 OpenStack 各个组件的源码在你的机器上自动完成编译、配置和启动。它的核心价值就两个快和全。快是指从零到启动一个基础 OpenStack 服务可能只需要半小时到一小时取决于网络和机器性能全是指它能部署一个包含核心组件Nova, Neutron, Glance, Keystone, Horizon等的完整开发环境。但你必须先明白它的边界否则很容易掉坑里。DevStack 的定位是“开发Development”和“测试Test”不是生产部署。这意味着环境纯净且单一它最适合在一个全新的、干净的 Ubuntu 系统上运行。如果你机器上已经有其他复杂服务或特定版本的 Python、数据库极易引发依赖冲突。配置高度集成所有服务都装在一台机器上网络也是用简单的预配置比如local.conf中的FLAT_INTERFACE。这方便你学习组件交互但和分布式、高可用的生产架构完全不同。数据非持久化默认情况下重启后虚拟机实例、网络配置等数据可能会丢失取决于你的配置。它不是为了长期运行业务虚拟机设计的。升级困难如果你想换一个 OpenStack 版本通常建议销毁重装而不是在原环境上升级。所以在动手前先问自己我是不是为了学习 OpenStack 概念、测试某个功能、或者开发调试某个组件如果是DevStack 很合适。如果你需要的是一个稳定、可扩展、能对外提供服务的云平台那么应该考虑基于 Kolla-Ansible、OpenStack-Ansible 或 Charms 等生产级部署工具。2. 环境准备避开 80% 的失败从选对系统开始根据我的经验大部分 DevStack 安装失败都卡在第一步环境不对。照着以下清单准备能极大提升成功率。2.1 操作系统选择与安装首选 Ubuntu而且是 LTS 版本。从热搜词也能看出ubuntu 22.04 lts是当前最主流和稳定的选择。OpenStack 社区对其支持最好依赖问题最少。物理机 or 虚拟机虚拟机VMware/VirtualBox最适合新手。方便做快照安装失败可以瞬间回滚。分配资源时至少给 4核 CPU、8GB 内存、100GB 磁盘。内存低于 8G编译和运行服务时很容易因内存不足OOM被系统杀死进程。物理机性能更好。确保是一台你可以完全控制的机器因为安装过程会修改大量系统配置。WSL2强烈不推荐。虽然热搜里有wsl2安装ubuntu但 DevStack 需要完整的 systemd 和桥接网络支持WSL2 环境不完整会引发各种诡异问题如卡在installing aria2或网络服务无法启动。别在这个方向上浪费时间。安装系统时的关键点镜像下载从 Ubuntu 官网下载ubuntu-22.04-live-server-amd64.iso。使用“服务器版”而不是桌面版更轻量。安装选项在安装过程中务必勾选“Install OpenSSH server”。这样安装完就可以通过 SSH 连接操作更方便。磁盘分区如果对 Linux 不熟就用整个磁盘并启用 LVM。这能为后续磁盘空间扩展留有余地虽然 DevStack 环境通常不扩展。更新设置在安装过程中可以选择不自动更新避免在后续 DevStack 运行中被系统更新干扰。2.2 基础系统配置系统安装好后第一件事不是运行 DevStack而是做好基础配置。# 1. 更新系统并安装基础工具 sudo apt update sudo apt upgrade -y sudo apt install -y git curl wget net-tools # 2. 设置主机名可选但建议 sudo hostnamectl set-hostname devstack # 3. 配置静态IP对于虚拟机如果网络是NAT模式用DHCP也可以。桥接模式建议静态IP # 编辑 /etc/netplan/00-installer-config.yaml示例 # network: # ethernets: # ens33: # 你的网卡名用 ip a 查看 # dhcp4: false # addresses: [192.168.1.100/24] # gateway4: 192.168.1.1 # nameservers: # addresses: [8.8.8.8, 114.114.114.114] # version: 2 # sudo netplan apply # 4. 关闭防火墙DevStack会自己配置iptables系统防火墙可能冲突 sudo ufw disable # 5. 确保时间同步 sudo timedatectl set-ntp true2.3 创建专用用户永远不要用root用户直接运行 DevStack。需要创建一个拥有sudo权限的普通用户如stack。sudo useradd -s /bin/bash -d /opt/stack -m stack echo stack ALL(ALL) NOPASSWD: ALL | sudo tee /etc/sudoers.d/stack sudo chown -R stack:stack /opt/stack后续所有操作都切换到stack用户进行sudo su - stack3. 核心部署流程从下载到登录 Dashboard环境准备好后真正的安装过程反而比较线性。关键在于配置文件。3.1 下载 DevStack在stack用户的家目录/opt/stack下操作# 克隆 DevStack 主仓库建议指定分支如 stable/zed (对应OpenStack Z版本) git clone https://opendev.org/openstack/devstack -b stable/zed cd devstack注意stable/zed是一个例子。你应该去 OpenStack Releases 查看当前支持的稳定版本。对于新手选择最新的稳定版本如stable/2023.2即 Bobcat或上一个 LTS 版本如stable/zed都可以。master分支是开发版可能不稳定。3.2 编写本地配置文件local.conf这是 DevStack 的灵魂。它决定了安装哪些服务、如何配置网络、使用什么密码等。在devstack目录下创建这个文件。cat local.conf ‘EOF‘ [[local|localrc]] # 通用配置 ADMIN_PASSWORDsecretadmin # Horizon管理员密码自己改个复杂的 DATABASE_PASSWORD$ADMIN_PASSWORD RABBIT_PASSWORD$ADMIN_PASSWORD SERVICE_PASSWORD$ADMIN_PASSWORD SERVICE_TOKEN$ADMIN_PASSWORD # 启用基础服务 ENABLED_SERVICESkey,mysql,rabbit,apache2,horizon # Glance镜像服务 ENABLED_SERVICESg-api,g-reg # Nova计算服务 ENABLED_SERVICESn-api,n-crt,n-obj,n-cpu,n-cond,n-sch,n-novnc,placement-api,placement-client # Neutron网络服务- 使用最简单的 ML2OVS 配置 ENABLED_SERVICESq-svc,q-agt,q-dhcp,q-l3,q-meta,q-ovs # 网络配置 - 这是最容易出错的地方 # FLOATING_RANGE 是给虚拟机分配的外部IP段需要和你的物理网络匹配 # 例如你的宿主机IP是 192.168.1.100/24网关是 192.168.1.1 # 那么可以设置一个不冲突的小子网比如 192.168.1.224/27 FLOATING_RANGE192.168.1.224/27 # 物理网卡名用于桥接。用 ip a 命令查看通常是 ens33, eth0, enp0s3 等。 # 虚拟机如果是NAT模式这里可能是一个内部网卡创建出的虚拟机可能无法直接访问外网。 # 对于只想内部测试可以用 local 模式但功能受限。 # 建议虚拟机使用“桥接模式”并使用宿主机的物理网段。 FLAT_INTERFACEens33 # 固定IP段用于虚拟机内部网络 FIXED_RANGE10.0.0.0/24 FIXED_NETWORK_SIZE256 # 关闭一些不必要的服务以加快安装可选 disable_service tempest disable_service cinder disable_service heat disable_service ceilometer disable_service aodh disable_service gnocchi # 日志级别调试时可设为 DEBUG LOGFILE/opt/stack/logs/stack.sh.log VERBOSETrue LOG_COLORFalse EOF关于网络配置的特别说明 这是 DevStack 最大的一个坎。FLAT_INTERFACE必须是你主机上连接外部网络的真实物理网卡。在虚拟机桥接模式下这个网卡会桥接到物理网络。如果配置错误Neutron 服务会启动失败导致无法创建网络和虚拟机。如果只是想做功能验证不在乎外部网络可以搜索更简单的local.conf配置使用local类型网络但那样虚拟机无法访问外网。3.3 执行安装脚本配置文件保存后运行安装脚本。这个过程会持续较长时间30分钟到数小时取决于你的网速和机器性能。./stack.sh安装过程中你应该关注什么看日志脚本会输出大量信息。重点关注有没有红色的ERROR提示。黄色的WARNING可以暂时不管。看进度它会按顺序安装各个组件MySQL, RabbitMQ, Keystone, Glance, Nova, Neutron...。耐心等待在编译 Python 依赖和下载 OpenStack 源码时可能会卡在某处很久只要网络通畅通常不是问题。如果卡住超过30分钟可以CtrlC中断检查网络后重新运行./stack.sh脚本通常会从中断处继续。3.4 验证安装结果当脚本最后输出 “This is your host IP address: x.x.x.x” 和 “Horizon is now available at http://x.x.x.x/dashboard” 时恭喜你安装成功了。验证步骤检查服务状态source /opt/stack/devstack/openrc admin admin # 加载管理员环境变量 openstack compute service list # 查看Nova服务状态应为 up openstack network agent list # 查看Neutron代理状态应为 up登录 Dashboard在浏览器中打开提示的 Horizon 地址如http://你的服务器IP/dashboard。用户名admin密码local.conf中设置的ADMIN_PASSWORD示例中是secretadmin。创建第一个网络和虚拟机在Dashboard中操作项目 - 网络 - 网络创建网络和子网。项目 - 网络 - 路由器创建路由器将子网连接到外部网络public。项目 - 计算 - 镜像上传一个测试镜像如 CirrOS一个小型Linux。项目 - 计算 - 实例启动一个实例选择刚上传的镜像和创建的网络。如果能成功创建并ping通虚拟机的浮动IP说明整个 OpenStack 环境基本功能正常。4. 安装后的关键操作与日常维护安装成功只是开始要让这个环境能持续用于学习和测试你需要知道怎么管理它。4.1 启停与清理停止所有服务当你不用时可以优雅地停止服务以释放资源。cd /opt/stack/devstack ./unstack.sh # 停止服务但保留数据和配置彻底清理慎用如果你想从头再来或者环境完全混乱了。cd /opt/stack/devstack ./clean.sh # 这是一个非常暴力的脚本会删除数据库、配置文件等几乎不可逆。重新启动如果只是重启了宿主机或者运行了./unstack.sh可以重新启动服务。cd /opt/stack/devstack ./stack.sh # 它会检查到已有环境尝试重新启动服务注意./stack.sh不是幂等的。在已有环境上再次运行有时会失败。最稳妥的方式是./unstack.sh后再./stack.sh。4.2 日志查看与问题排查DevStack 把所有组件的日志都集中放在了/opt/stack/logs/目录下。这是你排错的第一现场。总安装日志/opt/stack/logs/stack.sh.log各服务日志/opt/stack/logs/n-api.log(Nova API),/opt/stack/logs/q-svc.log(Neutron Server) 等。快速定位错误当某个服务启动失败时使用grep和tail。# 查看 Neutron 服务最近的错误 tail -f /opt/stack/logs/q-svc.log | grep -i error # 查看整个安装过程中所有错误 grep -r “ERROR” /opt/stack/logs/ --colorauto常见问题速查./stack.sh中途失败报依赖错误原因通常是网络问题导致 pip 下载包失败或者系统源有问题。解决检查网络连接可以尝试更换 pip 源在local.conf中添加PIP_UPGRADETrue和PIP_DOWNLOAD_CACHE/path/to/cache可能有助于重试。最干脆的方法是./clean.sh后重装并确保网络稳定。Neutron 服务启动失败报OVS或bridge相关错误原因FLAT_INTERFACE配置错误或者网卡不存在、没有IP地址。解决用ip a确认网卡名。如果是虚拟机确认网卡模式是否为桥接。可以尝试在local.conf中注释掉复杂的网络配置改用最简单的local网络模式先让服务跑起来。Horizon 页面无法访问原因Apache 服务未启动或者防火墙/安全组阻止了访问。解决检查sudo systemctl status apache2。确保宿主机防火墙已关闭sudo ufw disable。如果是云服务器检查安全组规则是否放行了80、443端口。创建虚拟机失败状态为Error原因可能性很多最常见的是镜像问题、网络问题或计算节点资源不足。解决查看实例详情中的错误信息。检查/opt/stack/logs/n-cpu.log计算节点日志。确认镜像格式是 QCOW2 且已正确上传并设置为active。确认虚拟网络和路由器配置正确DHCP 能分配IP。4.3 资源管理与优化磁盘空间DevStack 运行和创建虚拟机镜像会占用大量空间。热搜词里“占用磁盘内存已经90个g了”很可能就是虚拟机镜像堆积导致的。定期清理无用的镜像和实例。# 加载环境变量后 openstack image list openstack server list # 删除不需要的镜像和实例 openstack image delete image-id openstack server delete server-id内存与CPU运行 OpenStack 服务本身就有开销。如果只是挂起环境用./unstack.sh。长期不用可以考虑挂起或关闭虚拟机。5. 从 DevStack 到更深度的学习与实践当你的 DevStack 环境稳定运行后它可以成为你学习 OpenStack 的绝佳沙箱。理解架构通过openstack命令行和 Horizon 界面创建虚拟机、网络、卷观察各组件如何协作。代码阅读与调试因为 DevStack 安装的是源码你可以直接修改/opt/stack下某个项目的代码然后重启相关服务来测试你的修改。尝试其他组件在local.conf中启用更多服务如cinder块存储、heat编排、manila共享文件系统等只需将disable_service改为enable_service并重新运行./stack.sh部分组件需要额外配置。对接外部环境尝试将 DevStack 的网络public与你真实的物理网络打通让你局域网内的其他机器也能访问你创建的虚拟机。最后记住 DevStack 的初心快速搭建一个用于开发和测试的环境。不要用它来评判 OpenStack 的生产性能或稳定性。当你通过 DevStack 熟悉了基本概念和操作后下一步就应该去研究如何在多节点上使用 Ansible、Kubernetes 等工具部署一个高可用的生产级 OpenStack 集群。那时你会感谢在 DevStack 上踩过的这些坑因为它们让你对组件间的依赖和配置有了最直观的感受。