openstack ovn 和 kube-ovn 可以部署在同一个物理机上么?不能

4 阅读1分钟

这是个复杂的共存问题。先说结论:

改端口理论上可以,但两套 OVS 无法真正共存

原因:OVS 内核模块 (openvswitch) 是全局唯一的,一台机器只能运行一个 OVS 数据面实例。两个 ovs-vswitchd 会争夺内核 datapath,无法正常工作。

你现在的架构冲突

┌────────────────┬──────────────────────────────┬─────────────────────────┐ │ 组件 │ Kube-OVN (宿主机) │ Kolla OpenStack │ ├────────────────┼──────────────────────────────┼─────────────────────────┤ │ ovsdb-server │ /var/run/openvswitch/db.sock │ 想要 tcp:127.0.0.1:6640 │ ├────────────────┼──────────────────────────────┼─────────────────────────┤ │ ovs-vswitchd │ 已运行 │ 容器化,冲突 │ ├────────────────┼──────────────────────────────┼─────────────────────────┤ │ ovn-controller │ 连宿主机 OVS │ 连容器 OVS │ ├────────────────┼──────────────────────────────┼─────────────────────────┤ │ br-int │ Kube-OVN 管理 │ OpenStack 也要用 │ └────────────────┴──────────────────────────────┴─────────────────────────┘

可行方案

方案 1:共享同一套 OVS(推荐)

让 kolla 不部署 OVS 容器,直接使用宿主机上 Kube-OVN 的 OVS。只需要给宿主机的 ovsdb-server 加上 TCP 6640 监听:

给现有的 ovsdb-server 加上 TCP 监听(Kube-OVN 的 OVS)

ovs-vsctl set-manager ptcp:6640:127.0.0.1

确认

ss -tlnp | grep 6640

然后在 kolla 中禁用 OVS 容器部署:

globals.yml

enable_openvswitch: false

但问题是 两套 OVN 都要管理 br-int,流表会互相冲突。

方案 2:分开部署在不同节点(真正推荐)

  • 节点 A:运行 Kube-OVN(K8s)
  • 节点 B:运行 Kolla OpenStack

这是唯一不冲突的方案。

方案 3:OpenStack 用 LinuxBridge 替代 OVN

如果只是测试 OpenStack,避开 OVN:

globals.yml

neutron_plugin_agent: "linuxbridge"

重新 deploy 后 OpenStack 用 LinuxBridge 网络,完全不依赖 OVS,和 Kube-OVN 互不干扰。