从零安装 OpenStack:DevStack + Multipass 本地可复现指南

从零安装 OpenStack:DevStack + Multipass 本地可复现指南

适用系统:macOS(本文以 Multipass + Ubuntu 24.04 为例;Windows / Linux 思路相同) 目标:在可丢弃的单节点虚拟机里跑通 OpenStack,打开 Horizon,并能创建实例。

引言

OpenStack 官方安装文档偏生产部署,步骤多、组件多,不适合第一次上手。 DevStack 是社区提供的开发 / 学习脚本:一条 ./stack.sh 就能在单机拉起 Keystone、Nova、Neutron、Glance、Horizon 等核心服务。

本文记录一次可复现的本地安装路径,重点覆盖:

  1. 为什么要在虚拟机里装
  2. local.conf 怎么写(含 Apple Silicon 注意事项)
  3. 安装成功后如何验证
  4. 创建实例失败时怎么排障

必须起虚拟机吗?

你的本机系统 结论
macOS / Windows 必须。DevStack 只支持 Linux,请在虚拟机里装 Ubuntu。
Linux(Ubuntu 等) 不强制,但强烈建议 用独立虚拟机。stack.sh 会改网络、装大量服务,污染甚至搞坏日常系统;学习环境应可随时丢弃重装。

推荐:在可丢弃的 Ubuntu 24.04 虚拟机里安装(UTM / Multipass / VirtualBox / VMware 均可)。


环境要求

建议
系统 Ubuntu 24.04 LTS(官方最稳)
内存 ≥16GB(8GB 勉强)
CPU ≥4 核
磁盘 ≥50GB
网络 能访问外网

安装步骤

1. 准备 Ubuntu 虚拟机

以 Multipass(macOS 上较方便)为例:

bash 复制代码
brew install multipass
cd ~/Downloads
curl -L --progress-bar -O \
  https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/noble/current/noble-server-cloudimg-arm64.img
# 挪到所有用户都能读的位置
mkdir -p /Users/Shared/multipass
cp ~/Downloads/noble-server-cloudimg-arm64.img /Users/Shared/multipass/
chmod 644 /Users/Shared/multipass/noble-server-cloudimg-arm64.img
# 再创建
multipass launch file:///Users/Shared/multipass/noble-server-cloudimg-arm64.img \
  --name devstack --cpus 4 --memory 16G --disk 100G

multipass list
multipass shell devstack

Multipass 列出 devstack 实例

Multipass 进入 devstack 实例

其他虚拟化:安装干净的 Ubuntu 24.04 后 SSH / 登录进虚拟机即可。


2. 系统更新

进入虚拟机后:

bash 复制代码
sudo apt update && sudo apt upgrade -y
sudo apt install -y git

3. 创建 stack 用户

DevStack 不能用 root./stack.sh

bash 复制代码
sudo useradd -s /bin/bash -d /opt/stack -m stack
echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
sudo chmod 440 /etc/sudoers.d/stack
sudo chmod +x /opt/stack
sudo -u stack -i

之后步骤都在 stack 用户下执行。


4. 下载 DevStack

bash 复制代码
git clone --depth 1 https://opendev.org/openstack/devstack
cd devstack
# 学习用稳定分支(可选)
git fetch --depth 1 origin stable/2026.1
git checkout -b stable/2026.1 FETCH_HEAD

5. 编写 local.conf

先查虚拟机网卡 IP,后面填到 HOST_IP不要用 127.0.0.1,否则宿主机打不开 Dashboard):

bash 复制代码
ip -4 addr show

创建配置文件:

bash 复制代码
cat > local.conf <<'EOF'
[[local|localrc]]
ADMIN_PASSWORD=abc123
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD

# 改成虚拟机实际 IP(不要用 127.0.0.1,否则宿主机打不开 Dashboard)
HOST_IP=192.168.252.2

GIT_BASE=https://github.com
PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple

# Apple Silicon / Multipass 嵌套虚拟化:用 QEMU,不要用 KVM
LIBVIRT_TYPE=qemu

enable_service horizon

LOGFILE=$DEST/logs/stack.sh.log

# aarch64 + QEMU 不支持 host-passthrough,否则创建实例会失败
[[post-config|$NOVA_CONF]]
[libvirt]
cpu_mode = none
EOF

密码只用字母和数字。

Apple Silicon 注意: 若不加上面的 cpu_mode = none,创建虚机时会出现 CPU mode 'host-passthrough' ... is not supported by hypervisor,最终报 Exceeded maximum number of retries


6. 开始安装

bash 复制代码
./stack.sh

大约 20--40 分钟,取决于网速。成功后终端会打印 Horizon 地址等信息。

成功输出示例:

text 复制代码
This is your host IP address: 192.168.252.2
This is your host IPv6 address: ::1
Horizon is now available at http://192.168.252.2/dashboard
Keystone is serving at http://192.168.252.2/identity/
The default users are: admin and demo
The password: abc123

Services are running under systemd unit files.
For more information see:
https://docs.openstack.org/devstack/latest/systemd.html

DevStack Version: 2026.1
Change: da2f4d73f5ad74fc8ecfbe15bd7e20f6b0982dbb Fix noble OVN source Zuul parent 2026-05-21 15:33:38 +0000
OS Version: Ubuntu 24.04 noble

7. 登录验证

Horizon(Web)
  • 地址:http://192.168.252.2/dashboard(换成你的 HOST_IP
  • 用户:admin
  • 密码:abc123(与 ADMIN_PASSWORD 一致)
命令行
bash 复制代码
source ~/devstack/openrc admin admin
openstack image list
openstack server list --all-projects

日常维护

bash 复制代码
# 查看实例
multipass list

# 关机(先在虚拟机内 unstack,再停 Multipass)
./unstack.sh
multipass stop devstack

# 启动服务
multipass start devstack
multipass shell devstack
sudo -u stack -i
cd ~/devstack
./stack.sh

虚拟机重启后服务不一定自动恢复,学习场景下常见做法是再执行一次 ./stack.sh,或直接重装虚拟机。


常见问题

  1. 在 macOS 本机直接跑 → 不行,必须 Linux 虚拟机。
  2. HOST_IP 写错 → Horizon / API 从宿主机访问不了。
  3. 内存不足stack.sh 中途失败,加大内存后 ./unstack.sh && ./clean.sh 再重装。
  4. 用 root 执行 → 脚本会拒绝。
  5. 安装失败 → 先 ./unstack.sh && ./clean.sh,修好配置再 ./stack.sh
  6. GitHub / PyPI 很慢GIT_BASE=https://github.comPIP_INDEX_URL 用清华;虚拟机可走宿主机代理(需 Allow LAN),例如 export http_proxy=http://192.168.252.1:7890
  7. 创建实例失败(Apple Silicon) → 见下一节。

创建实例失败:host-passthrough / MaxRetriesExceeded

现象

Horizon 或 CLI 创建实例报错类似:

text 复制代码
Exceeded maximum number of retries. Exhausted all hosts available for retrying build failures

nova-compute 日志中的真正原因:

text 复制代码
libvirt.libvirtError: unsupported configuration: CPU mode 'host-passthrough'
for aarch64 qemu domain on aarch64 host is not supported by hypervisor

常见于 Mac Apple Silicon + Multipass :嵌套虚拟化只能用 QEMU,不支持 host-passthrough。 计算节点、资源、aarch64 镜像通常都是正常的;失败点在 libvirt 启动 guest。

已装好时的热修复(不必重装)

bash 复制代码
# 在 [libvirt] 段设置 cpu_mode = none(确认 virt_type = qemu)
sudo grep -A10 '^\[libvirt\]' /etc/nova/nova-cpu.conf

# 若没有 cpu_mode,加上;若有 host-passthrough,改成 none
sudo sed -i 's/^cpu_mode.*/cpu_mode = none/' /etc/nova/nova-cpu.conf
# 若 sed 未改到任何行,手动编辑 /etc/nova/nova-cpu.conf:
# [libvirt]
# virt_type = qemu
# cpu_mode = none

sudo systemctl restart devstack@n-cpu

source ~/devstack/openrc admin admin
openstack server delete <失败实例名>   # 例如 test1

# 用 aarch64 镜像直接从镜像启动(学习阶段不必从卷启动)
openstack server create test2 \
  --flavor m1.nano \
  --image cirros-0.6.3-aarch64-disk \
  --nic net-id=$(openstack network list -f value -c ID | head -1) \
  --wait

openstack server list --all-projects

持久化(避免下次 stack.sh 改回去)

确保 local.conf 含有:

ini 复制代码
LIBVIRT_TYPE=qemu

[[post-config|$NOVA_CONF]]
[libvirt]
cpu_mode = none

排查命令

bash 复制代码
source ~/devstack/openrc admin admin
openstack compute service list
openstack hypervisor list
openstack server show <实例名>

sudo journalctl -u devstack@n-cpu --since "5 minutes ago" --no-pager \
  | egrep -i 'ERROR|host-passthrough|libvirtError|Failed to spawn'

参考

相关推荐
小马同学-1 天前
OpenStack 使用实战:Web 界面与 CLI 命令行实验
运维·云计算·openstack
小马同学-1 天前
OpenStack 镜像管理:Glance 镜像服务实验
运维·云计算·openstack
闲云自留地1 天前
Neutron 实战教程:物理 vs 虚拟网络,OVN 环境创建网络与安全策略
服务器·网络·openstack
Lysander.Jovian1 天前
OpenStack使用_网页版
php·openstack
闲云自留地2 天前
动手玩 Nova:Hypervisor、主机聚合、可用分区、虚拟机生命周期实操
运维·架构·openstack
闲云自留地2 天前
存储实验室:Cinder 多后端配置、卷挂载实例,Swift 对象存储实操教程
openstack
闲云自留地3 天前
从零吃透 OpenStack:起源、理念、架构、创建虚拟机交互流程
架构·交互·openstack
闲云自留地3 天前
OpenStack 镜像管家 Glance:架构、镜像格式、状态机与镜像制作全讲解
架构·openstack
闲云自留地3 天前
OpenStack 的身份管家:Keystone 令牌、RBAC 权限模型拆解
wpf·openstack