2、环境准备:宿主机操作系统选择、硬件要求、安装KVM与libvirt、安装OVS、验证安装

好,咱们正式开始动手了。这一章我带你把整个实验环境搭起来。说实话,环境准备这事儿,看着琐碎,但恰恰是后面所有实验的地基。我在项目里见过太多人,后面排错排到怀疑人生,回头一看——原来是宿主机内核版本不对,或者OVS编译时少了个依赖。嗯,咱们别踩这个坑。

2.1 宿主机操作系统选择

我个人习惯用 CentOS Stream 9 或者 Ubuntu 22.04 LTS。为什么?

  • CentOS Stream 9:RHEL 生态,内核较新,对 OVS 和 KVM 的支持非常成熟。我在生产环境里大部分时候选它。
  • Ubuntu 22.04 LTS:社区活跃,包管理方便,适合快速原型验证。我自己的实验机就用的它。

你选哪个都行,后面的命令我会同时给出两种系统的对应操作。如果你用别的发行版,原理一样,包名和命令稍微调整一下即可。

我的建议: 如果你刚开始学,用 Ubuntu 22.04 会更省心。CentOS 的 SELinux 有时候会给你「惊喜」,我当年第一次配 OVS 时就被 SELinux 拦截了三天,后来才发现是策略问题。

2.2 硬件要求

说白了,KVM 是跑在硬件虚拟化扩展之上的。你的 CPU 必须支持 Intel VT-xAMD-V。怎么检查?

# 检查 CPU 是否支持虚拟化
grep -E '(vmx|svm)' /proc/cpuinfo

如果输出里有 vmx(Intel)或 svm(AMD),那就没问题。没输出?那你得进 BIOS 打开虚拟化开关。我遇到过一台戴尔服务器,默认是关掉的,折腾了半天才发现。

其他硬件建议:

  • 内存: 至少 8GB,我建议 16GB 以上。你要跑虚拟机,宿主机自己也得留点余量。
  • 磁盘: 建议 SSD,至少 100GB 空闲空间。虚拟机镜像、OVS 日志,吃起空间来很快。
  • 网卡: 至少一块物理网卡。如果你要做 OVS 的 offload 实验,最好用 Intel 或 Mellanox 的网卡。

2.3 安装 KVM 与 libvirt

KVM 是内核模块,libvirt 是管理工具集。咱们先装 libvirt,它会自动把 KVM 依赖拉进来。

CentOS Stream 9

dnf install -y qemu-kvm libvirt libvirt-daemon-kvm virt-install
systemctl enable --now libvirtd

Ubuntu 22.04

apt update
apt install -y qemu-kvm libvirt-daemon-system virtinst
systemctl enable --now libvirtd

装完之后,检查一下:

lsmod | grep kvm
# 应该看到 kvm 和 kvm_intel 或 kvm_amd

再确认 libvirt 在跑:

virsh list --all
# 输出应该是空的列表,但不会报错
注意: 如果你是在虚拟机里再套一层 KVM(嵌套虚拟化),需要额外开启嵌套虚拟化选项。我曾经在 VMware Workstation 里做实验,忘了开这个,结果 KVM 怎么都起不来。检查方式:cat /sys/module/kvm_intel/parameters/nested,输出应为 1

2.4 安装 Open vSwitch

OVS 的安装方式有两种:用系统包管理器,或者从源码编译。我建议初学者先用包管理器,省事。

CentOS Stream 9

dnf install -y openvswitch
systemctl enable --now openvswitch

Ubuntu 22.04

apt install -y openvswitch-switch
systemctl enable --now openvswitch-switch

装完之后,验证一下 OVS 的版本和状态:

ovs-vsctl show
# 输出类似:
# 8a8a8a8a-8a8a-8a8a-8a8a-8a8a8a8a8a8a
#     Bridge "br0"
#         Port "br0"
#             Interface "br0"
#                 type: internal
#     ovs_version: "3.1.0"

如果你看到 ovs_version,说明 OVS 已经跑起来了。如果报错说找不到命令,检查一下 PATH 或者重新登录一下终端。

一个小技巧: 我习惯装完 OVS 后立刻创建一个测试网桥,确保它真的能用:ovs-vsctl add-br testbr,然后 ovs-vsctl del-br testbr。能创建能删除,说明 OVS 内核模块和用户态工具都正常。

2.5 验证安装

好,现在咱们把 KVM 和 OVS 串起来验证一下。说白了,就是看看它们能不能互相配合。

第一步,创建一个 OVS 网桥:

ovs-vsctl add-br ovsbr0
ovs-vsctl show

第二步,用 libvirt 创建一个虚拟机,网络类型指定为 OVS。这里我用 virt-install 快速演示:

virt-install \
  --name test-vm \
  --ram 1024 \
  --vcpus 1 \
  --disk path=/var/lib/libvirt/images/test-vm.qcow2,size=5 \
  --network bridge=ovsbr0,model=virtio \
  --graphics none \
  --import

注意:这里 --network bridge=ovsbr0 是直接让虚拟机挂到 OVS 网桥上。如果你看到报错说找不到网桥,先确认 ovsbr0 确实存在。

第三步,验证虚拟机是否成功连接:

virsh list
ovs-vsctl show

在 OVS 的输出里,你应该能看到 Port "vnet0" 之类的接口,那就是虚拟机的虚拟网卡。

验证清单:
  • KVM 内核模块已加载(lsmod | grep kvm)
  • libvirtd 服务在运行(systemctl status libvirtd)
  • OVS 服务在运行(systemctl status openvswitch)
  • 可以创建/删除 OVS 网桥
  • 虚拟机可以挂载到 OVS 网桥上

到这步,你的环境就准备好了。后面咱们就可以开始玩真的了——用 OVS 做 VLAN、做流表、做隧道。嗯,想想就兴奋。

如果你在安装过程中遇到任何问题,别急。我当年第一次装 OVS 时,光编译就失败了七八次,后来发现是内核头文件没装全。你用的包管理器安装,已经避开了最大的坑。剩下的,无非是检查一下防火墙、SELinux 或者 AppArmor 有没有拦路。放行 libvirtdopenvswitch 的端口就好。

下一章,咱们开始创建第一个 OVS 网桥,并让两台虚拟机通过它通信。准备好了吗?