结论
kolla-ansible 不能直接在 macOS 上运行。 它需要 Linux 主机(推荐 Ubuntu 22.04/24.04 或 Rocky Linux 9/10)。你当前在 macOS (Darwin),需要先准备一台 Linux 机器(物理机、虚拟机或云主机均可)。
以下是在 Linux 主机上使用本项目部署 最小化 Neutron OVN + Nova + Glance 集群的完整步骤:
一、部署步骤
- 准备主机环境(Linux)
# 最低要求:2 网口、8GB 内存、40GB 磁盘
# Ubuntu 示例
sudo apt update
sudo apt install -y git python3-dev python3-venv libffi-dev gcc libssl-dev libdbus-glib-1-dev
- 创建 Python 虚拟环境并安装 kolla-ansible
python3 -m venv ~/kolla-venv
source ~/kolla-venv/bin/activate
pip install -U pip
# 从本地源码安装(你已有此仓库)
pip install .
# 或从远程安装: pip install git+https://opendev.org/openstack/kolla-ansible@master
- 安装 Ansible Galaxy 依赖
kolla-ansible install-deps
- 准备配置文件
sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla
# 复制配置模板
cp -r ~/kolla-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/
# 复制 all-in-one inventory
cp ~/kolla-venv/share/kolla-ansible/ansible/inventory/all-in-one .
# 生成密码
kolla-genpwd
- 编辑 /etc/kolla/globals.yml(关键配置)
---
# 基础镜像
kolla_base_distro: "ubuntu" # 或 "rocky"
# 网络接口(替换为你的实际网口名)
network_interface: "eth0" # 管理网(有 IP 的接口)
neutron_external_interface: "eth1" # 外部网(无 IP 的接口)
# VIP 地址(管理网上一个未使用的 IP)
kolla_internal_vip_address: "10.10.10.254"
# Neutron 使用 OVN 后端(关键!默认是 openvswitch)
neutron_plugin_agent: "ovn"
# 虚拟化类型(虚拟机中嵌套部署需用 qemu)
nova_compute_virt_type: "qemu" # 物理机用 "kvm"
# All-in-One 模式,关闭 HA 组件
enable_haproxy: false
# 关闭不需要的服务,保持最小化
enable_heat: false
enable_horizon: false # 如需 Dashboard 改为 true
enable_fluentd: false
enable_cinder: false
关于 VPC 模式:OVN 原生支持 tenant 网络隔离(geneve overlay),每个租户的 network + router 本质就是一个 VPC。neutron_plugin_agent: "ovn" 后默认
neutron_tenant_network_types: "geneve",自动支持。
- 部署
# 引导主机依赖(安装 Docker 等)
kolla-ansible bootstrap-servers -i ./all-in-one
# 预检查
kolla-ansible prechecks -i ./all-in-one
# 部署
kolla-ansible deploy -i ./all-in-one
- 部署后初始化
# 生成 clouds.yaml 凭据文件
kolla-ansible post-deploy -i ./all-in-one
# 安装 OpenStack CLI
pip install python-openstackclient
# 复制凭据
mkdir -p ~/.config/openstack
cp /etc/kolla/clouds.yaml ~/.config/openstack/
# 运行初始化脚本(创建 cirros 镜像、网络、flavor 等)
~/kolla-venv/share/kolla-ansible/init-runonce
- 验证 — 创建虚拟机
openstack --os-cloud=kolla-admin server create \
--image cirros \
--flavor m1.tiny \
--key-name mykey \
--network demo-net \
demo1
openstack --os-cloud=kolla-admin server list
二、清理步骤(完全销毁)
# 1. 停止并销毁所有容器和 volumes
kolla-ansible destroy -i ./all-in-one --yes-i-really-really-mean-it
# 2. 清理残留容器(可选,更彻底)
~/kolla-venv/share/kolla-ansible/tools/cleanup-containers
# 3. 清理宿主机网络残留(OVS 桥、namespace 等)
~/kolla-venv/share/kolla-ansible/tools/cleanup-host
# 4. 清理 Docker 镜像(可选)
~/kolla-venv/share/kolla-ansible/tools/cleanup-images --all
# 5. 删除配置文件(可选)
sudo rm -rf /etc/kolla
三、关键架构说明
┌───────────────────────┬────────────────────────────────────────────────────┐
│ 组件 │ OVN 模式下的行为 │
├───────────────────────┼────────────────────────────────────────────────────┤
│ ovn-northd │ 运行在 control 节点 │
├───────────────────────┼────────────────────────────────────────────────────┤
│ ovn-nb-db / ovn-sb-db │ OVN 数据库,运行在 control 节点 │
├───────────────────────┼────────────────────────────────────────────────────┤
│ ovn-controller │ 运行在 compute + network 节点 │
├───────────────────────┼────────────────────────────────────────────────────┤
│ neutron-server │ ML2/OVN 插件,不再需要 L3/DHCP agent │
├───────────────────────┼────────────────────────────────────────────────────┤
│ VPC 隔离 │ 每个 tenant network (geneve) + router 即为一个 VPC │
└───────────────────────┴────────────────────────────────────────────────────┘
设置 neutron_plugin_agent: "ovn" 后,kolla-ansible 会自动:
- 启用 OVN 组件(enable_ovn: true)
- 使用 geneve 作为 tenant 网络类型
- 部署 neutron-ovn-metadata-agent 替代传统 metadata agent
遇到问题
/root/kolla-venv/bin/pip install docker dbus-python
all in one 模式可以不配 vip?
● 不可以,即使 all-in-one 模式也必须配置 VIP。Kolla-Ansible 架构上依赖 HAProxy + Keepalived 通过 VIP 暴露 OpenStack API,这是硬性要求。
解决办法很简单:选一个同网段内没被使用的空闲 IP 作为 VIP。
1. 先确认本机 IP:
ip addr show | grep 192.168.100
2. 找一个空闲 IP,比如本机是 192.168.100.10,就选 192.168.100.200:
ping -c 1 192.168.100.200 # 确认不通
3. 修改 /etc/kolla/globals.yml:
kolla_internal_vip_address: "192.168.100.200"
然后重新运行 prechecks。
python 版本问题
# Ubuntu 22.04 可通过 deadsnakes PPA 安装
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 python3.11-venv python3.11-dev
# 重建虚拟环境
deactivate
python3.11 -m venv kolla-venv
source kolla-venv/bin/activate
pip install .