如何深入理解k8s client-go 源码中 informer 的 Reflector 模块实现原理?
摘要:k8s client-go k8s informers实现了持续获取集群的所有资源对象、监听集群的资源对象变化功能,并在本地维护了全量资源对象的内存缓存,以减少对apiserver、对etcd的请求压力。Informers在启动的时候会首先
k8s client-go源码分析 informer源码分析(3)-Reflector源码分析
1.Reflector概述
Reflector从kube-apiserver中list&watch资源对象,然后将对象的变化包装成Delta并将其丢到DeltaFIFO中。简单点来说,就是将Etcd 的对象及其变化反射到DeltaFIFO中。
Reflector首先通过List操作获取全量的资源对象数据,调用DeltaFIFO的Replace方法全量插入DeltaFIFO,然后后续通过Watch操作根据资源对象的变化类型相应的调用DeltaFIFO的Add、Update、Delete方法,将对象及其变化插入到DeltaFIFO中。
Reflector的健壮性处理机制
Reflector有健壮性处理机制,用于处理与apiserver断连后重新进行List&Watch的场景。也是因为有这样的健壮性处理机制,所以我们一般不去直接使用客户端的Watch 方法来处理自己的业务逻辑,而是使用informers。
Reflector核心操作
Reflector的两个核心操作:
(1)List&Watch;
(2)将对象的变化包装成Delta然后扔进DeltaFIFO。
informer概要架构图
通过下面这个informer的概要架构图,可以大概看到Reflector在整个informer中所处的位置及其作用。
