使用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 的方法?

欢迎继续提问!😊

相关推荐
码农小韩36 分钟前
Linux应用开发(八)——TCP/IP网络编程基础
linux·嵌入式软件开发·linux操作系统·嵌入式操作系统·linux网络编程·linux应用
迷途之人不知返1 小时前
【进程】-5-进程优先级
linux
fengyehongWorld1 小时前
Linux squid搭建基础代理服务器
linux·运维·服务器
木白CPP1 小时前
Linux DMA驱动详解(二)-----DMA的使用者
java·linux·运维
赵民勇2 小时前
systemd-socket-activate命令详解
linux·运维
Cx330❀2 小时前
【Linux网络】网络层 IP 协议:从网段划分到内核源码解析
大数据·linux·服务器·网络·tcp/ip·性能优化·langchain
企鹅的蚂蚁3 小时前
LubanCat RK3588 实时 Linux 开发(七):YT6801 PCIe 网卡驱动移植与 vermagic 排查
linux·rk3588·linux驱动·yt6801·pcie网卡·vermagic
DYWorker0013 小时前
Linux驱动子系统:DMA子系统 —— Consumer和Provider(006)
linux·驱动开发
byte轻骑兵3 小时前
【BlueZ】 log 模块:日志系统的实现与自定义日志输出配置
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
探索云原生3 小时前
KubeClipper 1.7.0 发布:Operation 优化与 Kubernetes 1.37 支持
linux·docker·云原生·kubernetes·go