发生了什么?
当apiserver宕机后,几分钟内apiserver重新启动时,一些端点没有就绪地址且无法恢复。这是一个意外现象。
原因是从Informer获取的端点不是最新的。在endpoint_controller.go的syncService方法中,currentEndpoints, err := e.endpointsLister.Endpoints(service.Namespace).Get(service.Name)
由于获取到的端点不是最新的,系统判断端点相同,因此端点不会更新。
我已经添加了日志以打印端点并确认了这一部分。
这是日志显示的内容。
I0425 08:25:57.715142 11 endpoints_controller.go:423] "About to update endpoints for service" service="manager/service-mchiroer"
I0425 08:25:57.715216 11 endpoints_controller.go:516] "endpoints are equal, skipping update" service="manager/service-mchiroer"
I0425 08:25:57.715225 11 endpoints_controller.go:389] "Finished syncing service endpoints" service="manager/service-mchiroer" startTime="83.332μs"
所以我认为informer中的缓存没有缓存最新数据,这是一个bug。
你期望发生什么?
当pod状态更新时,端点的notReadyAddresses应该更改为地址。
我们如何尽可能精确地最小化地重现它?
1、停止集群的apiserver服务。
2、在几分钟后恢复apiserver服务。
重复上述操作。问题将重复出现。
我们需要了解其他任何信息吗?
- 无响应*
Kubernetes版本:1.28
云提供商:
操作系统版本:
# On Linux:
$ cat /etc/os-release
# paste output here
$ uname -a
# paste output here
# On Windows:
C:\> wmic os get Caption, Version, BuildNumber, OSArchitecture
# paste output here
安装工具:
容器运行时(CRI)和版本(如适用)
相关插件(CNI,CSI等)和版本(如适用)
5条答案
按热度按时间eimct9ow1#
/area controller-manager
eaf3rand2#
我认为informer中的缓存没有缓存最新数据,这是一个bug。
wi3ka0sx3#
我们最近的发现是,这不是一个缓存问题。这是一个推送更新事件的延迟。
因此,我们在endpointsInformer中添加了UpdateFunc。当收到更新事件时,端点将被刷新。
oo7oh9g94#
/cc @wojtek-t 或许你会感兴趣? :)
/cc @jpbetz
/triage 已接受
dxxyhpgq5#
@Black-max12138: 标签(
sig/area/controller-manager
)无法应用,因为仓库中没有它们。对此的回应:
/sig area/controller-manager
使用PR评论与我互动的说明已提供(here)。如果您对我的行为有任何疑问或建议,请针对该仓库提交一个问题。