1. Kubernetes Operator 测试框架 envtest 的工作原理,如何在不启动完整集群的情况下测试 Reconcile 逻辑?fake client 与 envtest 的取舍?
Kubernetes Operator 测试框架 envtest 的工作原理:如何在不启动完整集群的情况下测试 Reconcile 逻辑?fake client 与 envtest 的取舍?
- envtest 的工作原理
- Reconcile 逻辑的测试方法
- fake client 与 envtest 的取舍
envtest 工作原理:启动轻量的 Kubernetes 控制平面组件(kube-apiserver 和 etcd)作为本地测试环境,不启动完整的 kubelet/controller-manager,让测试可以在真实 apiserver 语义下运行 Operator 的 Reconcile 逻辑。envtest 通过 controller-runtime 的 EnvTest 提供真实 apiserver,支持 CRD 安装、对象创建/更新、最终器(finalizer)、状态更新等真实的 API 语义。测试 Reconcile:创建 CR 对象→调用 Reconcile→断言状态/资源。fake client 与 envtest 取舍:fake client 是内存中的模拟客户端,速度快、无外部依赖,但真实语义弱(不校验校验 webhook、不触发 watch、controller 的最终器/状态行为受限于模拟);envtest 是真实 apiserver + etcd,语义真实(能测 webhook、watch、变更校验),但较重、需下载 etcd/apiserver 二进制。取舍:快速单测用 fake client,需验证真实 API 语义/控制器行为用 envtest(集成测试)。
envtest 用真实 apiserver 提供真实 API 语义,fake client 用内存模拟。测试 Reconcile 逻辑时,需要真实语义验证控制器行为选 envtest,快速单测选 fake client。