背景
之前我的开发环境是部署在本机的 VMware 虚拟机上的,但随着开发需求的增长,我逐渐发现内存已经不够用了。同时,VMware 的硬盘管理也让我感到麻烦——它不会自动缩容,因此需要定期使用 VMware 的工具手动清理硬盘空间。
在尝试其他方案时,我发现 WSL(Windows Subsystem for Linux)具有以下几个优点:
- 更加轻量。
- 与 VSCode 的兼容性较好,能够方便地进行开发。
因此,我决定将开发环境逐步迁移到 WSL 上。
另外,在使用过程中我发现 WSL 在内核调试方面也有很大优势。下面我将分享在 WSL 调试和部署 Kube-OVN 过程中的一些经验与坑点。
编译 WSL 内核
WSL 自带的内核默认没有开启很多功能,因此需要自定义编译一个内核。以下是编译内核的基本步骤:
参考文章
注意点
-
手动指定内核路径
- 在 Windows 11 上,
.wslconfig文件中的kernel路径需要手动指定,否则默认路径不会生效。
- 在 Windows 11 上,
-
需要开启的内核功能
- 确保开启 Open vSwitch(
openvswitch)。
- 确保开启 Open vSwitch(
- 在 Netfilter 下开启所有相关功能。
- 编译过程中的内存问题
- 编译过程中可能会遇到
load BTF from vmlinux: No such file or directory错误。 - 该问题的原因是内存不足,而不是缺少 BPF 相关依赖。
- 解决方法:
- 关闭所有占用内存的进程。
- 确保有足够的可用内存后再次编译。
- 编译过程中可能会遇到
部署 Kube-OVN
遇到的坑点及解决方法
-
Kube-OVN-CNI 无法访问 API Server
- 问题原因:
dummy设备无法创建。 - 解决方法:手动执行
modprobe dummy。
- 问题原因:
-
BuildKit 错误
- 错误信息:
BuildKit is enabled but the buildx component is missing or broken. - 解决方法:安装 BuildKit:
sudo apt install docker-buildx
- 错误信息:
-
最终构建和安装命令
- 确保以下命令可以顺利执行:
make kind-init make kind-install make build-kube-ovn
- 确保以下命令可以顺利执行:
总结
通过将开发环境迁移到 WSL,我不仅解决了虚拟机内存不足的问题,还发现了 WSL 在内核调试方面的潜力。在部署 Kube-OVN 的过程中,也踩到了一些坑,但最终成功完成了整个过程。这些经验希望对你有所帮助!之后再分享在wsl 怎么debug ebpf,cilium。