2、环境准备:宿主机操作系统选择、硬件要求、安装KVM与libvirt、安装OVS、验证安装
好,咱们正式开始动手了。这一章我带你把整个实验环境搭起来。说实话,环境准备这事儿,看着琐碎,但恰恰是后面所有实验的地基。我在项目里见过太多人,后面排错排到怀疑人生,回头一看——原来是宿主机内核版本不对,或者OVS编译时少了个依赖。嗯,咱们别踩这个坑。
2.1 宿主机操作系统选择
我个人习惯用 CentOS Stream 9 或者 Ubuntu 22.04 LTS。为什么?
- CentOS Stream 9:RHEL 生态,内核较新,对 OVS 和 KVM 的支持非常成熟。我在生产环境里大部分时候选它。
- Ubuntu 22.04 LTS:社区活跃,包管理方便,适合快速原型验证。我自己的实验机就用的它。
你选哪个都行,后面的命令我会同时给出两种系统的对应操作。如果你用别的发行版,原理一样,包名和命令稍微调整一下即可。
2.2 硬件要求
说白了,KVM 是跑在硬件虚拟化扩展之上的。你的 CPU 必须支持 Intel VT-x 或 AMD-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
# 输出应该是空的列表,但不会报错
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-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 有没有拦路。放行 libvirtd 和 openvswitch 的端口就好。
下一章,咱们开始创建第一个 OVS 网桥,并让两台虚拟机通过它通信。准备好了吗?