第二章:环境准备——打好地基才能盖高楼
说实话,OVS 的安装部署本身并不复杂,真正让人头疼的往往是环境问题。我见过太多人一上来就急着装软件,结果内核版本不对、依赖包缺失、硬件资源不够,折腾半天连个交换机都起不来。所以这一章,咱们先把地基打牢。
2.1 Linux 内核版本要求
OVS 对内核是有脾气的。不是随便哪个内核都能跑,尤其是你要用到 DPDK、TC-flower 这些高级特性时。
最低要求:Linux 内核 3.10 以上。这是 OVS 2.5 版本之后的基本门槛。低于这个版本,很多功能直接罢工。
推荐版本:我个人建议用 4.19 LTS 或 5.10 LTS。为什么?这两个版本在稳定性、性能、以及 OVS 的兼容性上表现最好。我在项目中踩过坑,用 4.15 内核跑 OVS 2.13,结果 VXLAN 隧道时不时断连,后来升到 4.19 就稳了。
特别提醒:如果你要用 DPDK,内核版本最好在 4.18 以上。DPDK 的 UIO 驱动和内核模块有版本依赖,低了会报错。
检查内核版本的方法:
uname -r
输出示例:5.10.0-28-generic
注意:CentOS 7 默认内核是 3.10,虽然能用,但很多新特性不支持。我建议你升级到 ELRepo 提供的 4.19 或 5.4 内核。Ubuntu 18.04 默认 4.15,也建议升到 5.4。
2.2 系统依赖包安装
OVS 编译安装需要一堆依赖包。少了任何一个,编译过程就会报错,而且错误信息往往很隐晦。我曾经因为缺了 libssl-dev,编译 OVS 时卡在 SSL 模块上,查了半天才发现。
Debian/Ubuntu 系列:
apt-get update
apt-get install -y build-essential fakeroot debhelper \
autoconf automake bzip2 libssl-dev \
libtool pkg-config python3 python3-pip \
python3-sphinx libcap-ng-dev libnl-3-dev \
libnl-route-3-dev libunbound-dev libunwind-dev
RHEL/CentOS 系列:
yum install -y epel-release
yum install -y gcc make autoconf automake \
libtool openssl-devel python3 python3-pip \
python3-sphinx libcap-ng-devel libnl3-devel \
unbound-devel libunwind-devel
我的小技巧:装完依赖后,最好跑一下 ldconfig -v | grep -E "ssl|nl|cap" 确认库文件都加载了。不然编译时链接失败,你都不知道缺哪个。
2.3 硬件资源评估
OVS 本身不挑硬件,但你要跑出性能,就得认真算算账。说白了,OVS 是 CPU 密集型的,尤其是数据包处理路径。
| 场景 | CPU 建议 | 内存建议 | 磁盘建议 |
|---|---|---|---|
| 测试/学习环境 | 2 核 | 4 GB | 20 GB SSD |
| 生产环境(纯 OVS) | 4 核以上 | 8 GB 以上 | 50 GB SSD |
| 生产环境(OVS+DPDK) | 8 核以上(需隔离核心) | 16 GB 以上 | 100 GB NVMe |
嗯,这里要注意:内存不是越大越好。OVS 的流表缓存和内存池是有限制的。我见过有人给 OVS 分配 64GB 内存,结果大部分都浪费了。实际生产中,8-16GB 足够支撑几千条流表。
网络接口卡(NIC)建议:
- 普通场景:Intel I350 或类似千兆网卡
- 高性能场景:Mellanox ConnectX-4/5 或 Intel XL710 万兆网卡
- DPDK 场景:必须支持 UIO 或 VFIO 的网卡
避坑指南:我曾经用 Realtek 网卡跑 OVS,结果性能惨不忍睹。OVS 对网卡驱动很敏感,建议用 Intel 或 Mellanox 的网卡。省钱可以买二手服务器拆机卡,但别买山寨卡。
2.4 网络拓扑规划
拓扑规划这事,很多人觉得没必要。但你想啊,OVS 是虚拟交换机,它要跟物理网络、虚拟机、容器、甚至其他 OVS 节点通信。拓扑乱了,排查起来能让你怀疑人生。
常见的 OVS 部署拓扑:
- 单机模式:一台物理机上跑 OVS,连接多个虚拟机或容器。适合测试和学习。
- 桥接模式:OVS 桥接物理网卡,虚拟机通过 OVS 直接接入物理网络。适合小规模生产。
- 隧道模式:通过 VXLAN/GRE 隧道连接多个 OVS 节点,构建 overlay 网络。适合数据中心。
- DPDK 直通模式:OVS+DPDK 直接接管物理网卡,绕过内核协议栈。适合高性能场景。
我建议的规划步骤:
- 先画拓扑图,标清楚每个节点的 IP、网卡、桥接关系
- 确定管理网络和数据网络的分离(别混在一起)
- 规划 VLAN ID 和隧道 IP 段,避免冲突
- 预留冗余链路,万一某条链路断了,OVS 能自动切换
一个简单的单机拓扑示例:
物理机 (Ubuntu 20.04)
├── eth0 (管理网络, 192.168.1.10/24)
├── eth1 (数据网络, 无 IP)
│ └── br0 (OVS 桥接)
│ ├── vnet0 (VM1, VLAN 100)
│ ├── vnet1 (VM2, VLAN 200)
│ └── patch-int (连接其他 OVS 节点)
└── eth2 (备用链路, 用于故障切换)
我的经验:刚开始学 OVS 时,别搞太复杂的拓扑。一台物理机、一个 OVS 桥、两个虚拟机,就够你玩半天了。等把基本操作练熟了,再上多节点隧道。
好了,环境准备就这些。下一章咱们开始动手装 OVS。记住,环境搞好了,后面就顺了。环境没搞好,后面全是坑。