openstack kolla-ansible

23 阅读3分钟

结论

kolla-ansible 不能直接在 macOS 上运行。 它需要 Linux 主机(推荐 Ubuntu 22.04/24.04 或 Rocky Linux 9/10)。你当前在 macOS (Darwin),需要先准备一台 Linux 机器(物理机、虚拟机或云主机均可)。

以下是在 Linux 主机上使用本项目部署 最小化 Neutron OVN + Nova + Glance 集群的完整步骤:


一、部署步骤

  1. 准备主机环境(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
  1. 创建 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
  1. 安装 Ansible Galaxy 依赖
  kolla-ansible install-deps
  1. 准备配置文件
  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
  1. 编辑 /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",自动支持。
  1. 部署
  # 引导主机依赖(安装 Docker 等)
  kolla-ansible bootstrap-servers -i ./all-in-one

  # 预检查
  kolla-ansible prechecks -i ./all-in-one

  # 部署
  kolla-ansible deploy -i ./all-in-one
  1. 部署后初始化
  # 生成 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
  1. 验证 — 创建虚拟机
  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 .