在你已有的 Ubuntu 服务器 上创建一台干净的虚拟机(VM) 来专门运行 DevStack,是最佳实践。以下是几种主流方法,按推荐度排序:
✅ 推荐方案:使用 KVM + virt-install(轻量、原生、性能好)
适用于物理服务器或支持嵌套虚拟化的云服务器(如阿里云、AWS 需开启嵌套虚拟化)
第一步:检查是否支持虚拟化
bash
# 检查 CPU 是否支持 VT-x/AMD-V
egrep -c '(vmx|svm)' /proc/cpuinfo
- 输出
>0→ 支持 - 输出
0→ 不支持(云服务器需确认是否开启嵌套虚拟化)
💡 阿里云/腾讯云部分实例类型支持,AWS 的
C5/M5系列默认支持。
第二步:安装 KVM 和管理工具
sql
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager
第三步:将当前用户加入 libvirt 组(避免每次用 sudo)
bash
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER
# 重新登录或执行:
newgrp libvirt
第四步:下载 Ubuntu 22.04 Cloud 镜像(专为虚拟机优化)
bash
cd ~
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
这是官方 cloud image,体积小、启动快、支持 cloud-init 自动配置。
第五步:创建虚拟机(自动配置网络、磁盘、SSH)
创建用户数据文件 user-data
yaml
# user-data
#cloud-config
users:
- name: stack
ssh-authorized-keys:
- $(cat ~/.ssh/id_rsa.pub) # 替换为你本地的公钥,或手动粘贴
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
chpasswd:
list: |
ubuntu:password123
expire: False
ssh_pwauth: True
package_upgrade: true
runcmd:
- echo "VM ready for DevStack" > /etc/motd
🔐 如果没有 SSH 密钥,先运行
ssh-keygen -t rsa -b 2048生成。
创建元数据文件 meta-data
bash
echo "instance-id: devstack-vm" > meta-data
生成 ISO 配置盘
kotlin
cloud-localds seed.iso user-data meta-data
第六步:启动虚拟机
scss
virt-install \
--name devstack-vm \
--vcpus 4 \
--memory 8192 \
--disk size=50,format=qcow2 \
--import \
--os-variant ubuntu22.04 \
--network network=default \
--graphics none \
--noautoconsole \
--disk path=./seed.iso,device=cdrom
参数说明:
--vcpus 4:4 核 CPU--memory 8192:8GB 内存(DevStack 最低要求)--disk size=50:50GB 磁盘--graphics none:无图形界面(纯命令行)--noautoconsole:后台运行
第七步:连接虚拟机
方法 1:通过 virsh 控制台
bash
virsh console devstack-vm
# 用户名:ubuntu,密码:password123(来自 user-data)
方法 2:通过 SSH(推荐)
先获取 VM IP:
arduino
virsh net-dhcp-leases default
输出类似:
css
Expiry Time MAC address Protocol IP address Hostname Client ID or Identifier
2025-11-23 02:00:00 52:54:00:xx:xx:xx ipv4 192.168.122.100/24 devstack-vm -
然后 SSH 登录:
css
ssh ubuntu@192.168.122.100
第八步:在 VM 中部署 DevStack
现在你有了一个干净、隔离的 Ubuntu 环境!按照之前指南操作即可:
bash
# 在 VM 内执行
sudo useradd -s /bin/bash -d /opt/stack -m stack
echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
sudo su - stack
git clone https://opendev.org/openstack/devstack
cd devstack
# ... 继续配置 local.conf 并运行 ./stack.sh
🌐 其他方案对比
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| KVM (推荐) | 性能好、资源开销低、原生支持 | 需要虚拟化支持 | 物理服务器 / 支持嵌套虚拟化的云主机 |
| VirtualBox | 图形界面友好 | 性能较差,不支持嵌套虚拟化 | 个人笔记本 |
| LXD 容器 | 启动极快、轻量 | 不能运行完整 OpenStack(缺少 systemd、特权不足) | ❌ 不适合 DevStack |
| Docker + systemd 容器 | 隔离性好 | 复杂,仍可能端口冲突 | 不推荐 |
⚠️ 不要用 LXD 或 Docker 跑 DevStack!OpenStack 需要完整的 systemd、KVM、网络设备控制权。
🧹 清理命令(不用时)
bash
# 关闭并删除 VM
virsh destroy devstack-vm
virsh undefine devstack-vm --remove-all-storage
# 删除镜像文件
rm jammy-server-cloudimg-amd64.img seed.iso user-data meta-data
✅ 总结
- 在 Ubuntu 服务器上用 KVM 创建专用 VM
- 分配 ≥8GB 内存、≥50GB 磁盘
- 使用 cloud-init 自动配置用户和 SSH
- 在干净 VM 中部署 DevStack
这样你就拥有了一个完全隔离、可重复、不影响主机的 OpenStack 学习环境!
需要我提供:
- 一个 一键创建 DevStack VM 的脚本?
- 启用嵌套虚拟化 的云服务器配置指南(阿里云/AWS)?
- 通过 VNC 图形界面访问 VM 的方法?
欢迎继续提问!😊