openstack devstack 使用

8 阅读3分钟

⏺ 基于对代码的分析,以下是完整的部署和清理方案。

关键结论

  1. DevStack 默认已使用 OVN 作为 Neutron 后端(Q_AGENT=ovn),无需额外插件
  2. VPC 模式 = OVN geneve overlay + 项目隔离网络,这是 DevStack OVN 的默认行为
  3. 平台要求: 你当前在 macOS 上,DevStack 只能在 Linux(推荐 Ubuntu 22.04/24.04)上运行,需要准备一台 Linux 机器或虚拟机

一、部署步骤

  1. 准备 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
  1. 克隆 DevStack
  cd /opt/stack
  git clone https://opendev.org/openstack/devstack
  cd devstack
  1. 创建 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 互联或接入外部网络。