使用kvm创建一台虚拟机

在你已有的 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

✅ 总结

  1. 在 Ubuntu 服务器上用 KVM 创建专用 VM
  2. 分配 ≥8GB 内存、≥50GB 磁盘
  3. 使用 cloud-init 自动配置用户和 SSH
  4. 在干净 VM 中部署 DevStack

这样你就拥有了一个完全隔离、可重复、不影响主机的 OpenStack 学习环境!

需要我提供:

  • 一个 一键创建 DevStack VM 的脚本
  • 启用嵌套虚拟化 的云服务器配置指南(阿里云/AWS)?
  • 通过 VNC 图形界面访问 VM 的方法?

欢迎继续提问!😊

相关推荐
hanyi_qwe2 小时前
文本三剑客--awk
linux·运维·服务器
Caven772 小时前
【Linux 技巧】如何在登录时自动激活 Conda Base 环境
linux·运维·conda
凌寒113 小时前
Linux(Debian)安装、卸载 MySQL
linux·运维·mysql·debian
IT小哥哥呀3 小时前
如何从 Windows SSH 进入 VirtualBox Ubuntu 虚拟机——密码认证(逐步指南)
linux·windows·ubuntu·ssh·教程·虚拟机
怀旧,4 小时前
【Linux系统编程】7. 进程的概念(上)
linux·运维·服务器
7***n754 小时前
API网关设计模式
linux·服务器·设计模式
哈里谢顿5 小时前
环境变量 HTTP_PROXY/HTTPS_PROXY 深度解析:为什么 cURL 行,Docker 不行?
linux
馨谙5 小时前
使用 systemd 用户服务管理容器:从概念到实践
linux·容器
人工智能训练5 小时前
Windows中如何将Docker安装在E盘并将Docker的镜像和容器存储在E盘的安装目录下
linux·运维·前端·人工智能·windows·docker·容器