如何深入理解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中所处的位置及其作用。
阅读全文