envtest 安装踩坑笔记
controller-runtime/pkg/envtest
使我们在写单测的时候可以不依赖 K8s 组件(API Server、Kubelet 等)去模拟 K8s 资源。
本文对于自己在 Mac 环境下安装 envtest 过程遇到的坑做一些记录。
Kubebuilder 安装
https://book.kubebuilder.io/quick-start.html
注意不同的 go 版本对应不同的 kubebuilder 版本
如果要完整运行 kubebuilder 实例需要提前安装好 kustomize 和 controller-gen,但如果知识需要使用 envtest 不需要
安装步骤如下
1
2curl -L -o kubebuilder https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH)
chmod +x kubebuilder && mv kubebuilder /usr/local/bin/预置 shell 命令
1
kubebuilder completion <bash|zsh|fish>
envtest 安装
安装 envtest 二进制
- 并不是每个 K8s 版本都有对应的 envtest,所以建议浏览器访问下载 https://go.kubebuilder.io/test-tools/{K8S_VERSION}/darwin/amd64
- 1.20 与 1.21 版本有问题,推荐使用1.19.2代替
1
2export K8S_VERSION=1.21.2
curl -sSLo envtest-bins.tar.gz "https://go.kubebuilder.io/test-tools/${K8S_VERSION}/$(go env GOOS)/$(go env GOARCH)"解压二进制
- 这些二进制就是模拟的 etcd、apiserver 等组件
- 本地跑 UT 时不一定有权限访问这些二进制,如果不在意安全的话建议改成 777
1
2mkdir /usr/local/kubebuilder
tar -C /usr/local/kubebuilder --strip-components=1 -zvxf envtest-bins.tar.gz执行单测时,为防止二进制路径错误,可以指定二进制跑测试
1
make test SKIP_FETCH_TOOLS=1 KUBEBUILDER_ASSETS=/usr/local/kubebuilder/bin