使用envtest而非外部集群测试时EndpointSlice事件丢失问题排查
问题:envtest环境下Service/Deployment无法触发预期EndpointSlice事件的排查
背景
我基于controller-runtime开发了自定义K8s控制器,正在用envtest编写集成测试。该控制器监听EndpointSlice资源和自定义CRD,预期逻辑是:当创建/修改Service,或是创建匹配Service标签的Deployment时,会生成对应的EndpointSlice事件,进而触发控制器调和。
控制器核心注册代码如下:
return ctrl.NewControllerManagedBy(mgr). For(&v1discovery.EndpointSlice{}). Watches(&v1alpha1.CustomCRD{}, handler.EnqueueRequestsFromMapFunc(mapFn)). Complete(s)
测试现象
- 使用本地kind集群测试(设置
os.Setenv("USE_EXISTING_CLUSTER", "true")):EndpointSlice事件正常生成,符合预期逻辑。 - 使用envtest自带的K8s组件(API Server、etcd、证书管理器,设置
USE_EXISTING_CLUSTER="false")测试:创建Service、匹配标签的Deployment后,不会生成对应的EndpointSlice事件,仅能看到K8s服务器的默认EndpointSlice事件,示例如下:
&EndpointSlice{ObjectMeta:{kubernetes default ....
已完成的配置
我已在测试套件中添加了Scheme相关配置,但问题未解决:
corev1.AddToScheme(scheme.Scheme) v1discovery.AddToScheme(scheme.Scheme) appsv1.AddToScheme(scheme.Scheme)
求助方向
请问该问题可能的原因是什么?下一步应该排查哪些内容?
内容的提问来源于stack exchange,提问作者user2512324
相关产品推荐
相关产品推荐

