⏺ 基于对代码的分析,以下是完整的部署和清理方案。
关键结论
- DevStack 默认已使用 OVN 作为 Neutron 后端(Q_AGENT=ovn),无需额外插件
- VPC 模式 = OVN geneve overlay + 项目隔离网络,这是 DevStack OVN 的默认行为
- 平台要求: 你当前在 macOS 上,DevStack 只能在 Linux(推荐 Ubuntu 22.04/24.04)上运行,需要准备一台 Linux 机器或虚拟机
一、部署步骤
- 准备 Linux 环境
# 推荐: Ubuntu 22.04/24.04, 最少 8GB 内存, 60GB 磁盘
# 创建 stack 用户(如果还没有)
sudo useradd -s /bin/bash -d /opt/stack -m stack
echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
sudo -u stack -i
- 克隆 DevStack
cd /opt/stack
git clone https://opendev.org/openstack/devstack
cd devstack
- 创建 local.conf
在 devstack 目录下创建 local.conf:
[[local|localrc]]
# 密码(必填)
ADMIN_PASSWORD=secretadmin
DATABASE_PASSWORD=secretdb
RABBIT_PASSWORD=secretrabbit
SERVICE_PASSWORD=$ADMIN_PASSWORD
# 主机 IP(改为你的实际 IP)
HOST_IP=192.168.1.100
# ========== 最小化服务 ==========
# 禁用所有默认服务,只启用需要的
disable_all_services
# 基础设施
enable_service rabbit mysql key
# Neutron + OVN(核心)
enable_service q-svc q-ovn-agent
enable_service ovn-northd ovn-controller ovs-vswitchd ovsdb-server
# Nova(计算)
enable_service n-api n-cpu n-cond n-sch n-novnc n-api-meta
# Glance(镜像)
enable_service g-api
# Placement(Nova 依赖)
enable_service placement-api placement-client
# etcd(必需的协调服务)
enable_service etcd3
# ========== OVN/Neutron 配置 ==========
# ML2 + OVN(默认已是 OVN,显式声明更清晰)
Q_AGENT=ovn
Q_ML2_PLUGIN_MECHANISM_DRIVERS=ovn
Q_ML2_PLUGIN_TYPE_DRIVERS=local,flat,vlan,geneve
Q_ML2_TENANT_NETWORK_TYPE=geneve
# OVN L3 路由(VPC 路由功能)
ML2_L3_PLUGIN=ovn-router
# 创建公共网络(external network)
OVN_L3_CREATE_PUBLIC_NETWORK=True
# ========== 可选优化 ==========
# 日志
LOGFILE=$DEST/logs/stack.sh.log
LOGDAYS=2
# 不安装 Tempest(不需要测试)
# disable_service tempest # 已通过 disable_all_services 禁用
# 镜像:使用 CirrOS 轻量测试镜像
IMAGE_URLS="https://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img"
# 如果网络慢,可以使用国内 pip 源
# PIP_GET_PIP_URL=https://mirrors.aliyun.com/pypi/simple
# GIT_BASE=https://github.com
4. 执行部署
cd /opt/stack/devstack
./stack.sh
部署完成后会输出 Horizon URL 和凭据(虽然我们没装 Horizon,但 CLI 可用)。
5. 验证部署
# 加载环境变量
source /opt/stack/devstack/openrc admin admin
# 验证服务
openstack service list
openstack compute service list
openstack network agent list
# 验证 OVN
sudo ovn-nbctl show
sudo ovn-sbctl show
# 创建 VPC 风格的网络和虚拟机
# 1) 创建租户网络(VPC)
openstack network create vpc-net1
openstack subnet create --network vpc-net1 --subnet-range 10.0.1.0/24 vpc-subnet1
# 2) 创建路由器连接外部网络
openstack router create vpc-router1
openstack router set --external-gateway public vpc-router1
openstack router add subnet vpc-router1 vpc-subnet1
# 3) 创建安全组规则
openstack security group rule create --proto icmp --remote-ip 0.0.0.0/0 default
openstack security group rule create --proto tcp --dst-port 22 --remote-ip 0.0.0.0/0 default
# 4) 创建虚拟机
openstack server create --flavor m1.tiny --image cirros-0.6.2-x86_64-disk \
--network vpc-net1 test-vm1
# 5) 查看虚拟机
openstack server list
openstack server show test-vm1
二、清理步骤
DevStack 提供了三个级别的清理(参考 unstack.sh 和 clean.sh):
级别 1:停止服务(保留数据,可快速重启)
cd /opt/stack/devstack
./unstack.sh
功能:停止所有 OpenStack 服务(Nova、Neutron、Glance 等)和 OVN/OVS 进程,但保留数据库、RabbitMQ。
级别 2:停止所有服务(包括 MySQL、RabbitMQ)
cd /opt/stack/devstack
./unstack.sh --all
级别 3:彻底清理(删除所有数据和配置)
cd /opt/stack/devstack
./clean.sh
功能:
- 先执行 unstack.sh --all
- 删除所有数据库
- 删除 /etc/keystone /etc/glance /etc/nova /etc/neutron 等配置
- 删除日志、systemd unit 文件、虚拟环境
- 清理 OVN/OVS 数据
级别 4:完全卸载(如需恢复干净系统)
cd /opt/stack/devstack
./clean.sh
# 手动清理残留
sudo rm -rf /opt/stack/data
sudo rm -rf /opt/stack/logs
sudo rm -rf /etc/openvswitch
sudo rm -rf /var/lib/ovn
sudo ovs-vsctl --if-exists del-br br-int
sudo ovs-vsctl --if-exists del-br br-ex
# 卸载 OVN/OVS 包
sudo apt remove --purge -y ovn-central ovn-host openvswitch-switch
# 删除 stack 用户(可选)
sudo userdel -r stack
sudo rm /etc/sudoers.d/stack
三、架构概览
┌─────────────────────────────────────────────┐
│ API Layer │
│ Keystone │ Nova-API │ Neutron-API │ Glance │
├─────────────────────────────────────────────┤
│ Neutron ML2 + OVN │
│ mechanism_driver=ovn │ L3=ovn-router │
├─────────────────────────────────────────────┤
│ OVN Control Plane │
│ ovn-northd │ NB-DB │ SB-DB │
├─────────────────────────────────────────────┤
│ OVN Data Plane │
│ ovn-controller │ ovs-vswitchd │ br-int │
│ Geneve Tunnel │
├─────────────────────────────────────────────┤
│ Nova-Compute │ libvirt/QEMU │ VM │
└─────────────────────────────────────────────┘
VPC 隔离通过 OVN 的 Geneve overlay + logical switch/router 实现,每个 tenant network 是一个独立的 OVN logical switch,通过 logical router 互联或接入外部网络。