2024-04-18 17:11:28 8阅读
K8S的Informer模块封装list-watch API,用户只需要指定资源,编写好事件处理函数(AddFunc, UpdateFunc,DeleteFunc等), Informer首先通过list API罗列资源,然后调用watch API监听资源的变更事件,并将结果放到一个FIFO队列,队列的另一头进程取出事件,并调用相关的注册函数处理事件。Informer还维护了一个只读的Map Store的缓存,主要目的是提升查询效率,降低apiserver负载。
Informer是Client-go中的一个核心工具包,在K8s源码中,如果K8s的某个组件,需要List/Get k8s中的object,在大多数情况下,会直接使用Informer实例中的Lister方法,很少直接请求K8s API,Informer最基本的功能是List/Get K8s中的object。
Informer实例的LIster()方法,List/Get K8s中的object时,Informer不会直接去请求K8s API,而是直接去查找内存中的数据(Informer自己维护),通过这种方式,Informer可以更快的返回结果,又能减少对K8s API的直接调用。
Informer只会调用Kubernetes List和Watch两种类型的API。Informer在初始化的时,先调用Kubernetes List API获得某种resource的全部Object,缓存在内存中; 然后,调用Watch API去watch这种resource,去维护这份缓存; 最后,Informer就不再调用Kubernetes的任何 API。
只调用一次List API,之后完全依赖Watch API去维护缓存,没有任何resync机制,现有的List/Watch机制完全能够保证不会漏掉任何事件,也说明了K8s完全信任etcd。
Informer通过Kubernetes Watch API监听某种resource下的所有事件。
Informer可以添加自定义的回调函数,这个回调函数实例(即ResourceEventHandler实例),只需实现OnAdd(ob jinterface{})OnUpdate(oldObj, newObj interface{}) 和OnDelete(obj interface{}) 三个方法,这三个方法分别对应informer监听到创建、更新和删除这三种事件类型。
二级缓存是informer的底层缓存机制,两级缓存分别是DeltaFIFO和LocalStore。两级缓存的用处各不相同,DelataFIFO用来储存watch API返回的各种事件,LocalStotre只会被Lister的List/Get方法访问。两级缓存之间存在resync机制。
2024-04-18 17:11:28 8阅读
K8S的Informer模块封装list-watch API,用户只需要指定资源,编写好事件处理函数(AddFunc, UpdateFunc,DeleteFunc等), Informer首先通过list API罗列资源,然后调用watch API监听资源的变更事件,并将结果放到一个FIFO队列,队列的另一头进程取出事件,并调用相关的注册函数处理事件。Informer还维护了一个只读的Map Store的缓存,主要目的是提升查询效率,降低apiserver负载。
Informer是Client-go中的一个核心工具包,在K8s源码中,如果K8s的某个组件,需要List/Get k8s中的object,在大多数情况下,会直接使用Informer实例中的Lister方法,很少直接请求K8s API,Informer最基本的功能是List/Get K8s中的object。
Informer实例的LIster()方法,List/Get K8s中的object时,Informer不会直接去请求K8s API,而是直接去查找内存中的数据(Informer自己维护),通过这种方式,Informer可以更快的返回结果,又能减少对K8s API的直接调用。
Informer只会调用Kubernetes List和Watch两种类型的API。Informer在初始化的时,先调用Kubernetes List API获得某种resource的全部Object,缓存在内存中; 然后,调用Watch API去watch这种resource,去维护这份缓存; 最后,Informer就不再调用Kubernetes的任何 API。
只调用一次List API,之后完全依赖Watch API去维护缓存,没有任何resync机制,现有的List/Watch机制完全能够保证不会漏掉任何事件,也说明了K8s完全信任etcd。
Informer通过Kubernetes Watch API监听某种resource下的所有事件。
Informer可以添加自定义的回调函数,这个回调函数实例(即ResourceEventHandler实例),只需实现OnAdd(ob jinterface{})OnUpdate(oldObj, newObj interface{}) 和OnDelete(obj interface{}) 三个方法,这三个方法分别对应informer监听到创建、更新和删除这三种事件类型。
二级缓存是informer的底层缓存机制,两级缓存分别是DeltaFIFO和LocalStore。两级缓存的用处各不相同,DelataFIFO用来储存watch API返回的各种事件,LocalStotre只会被Lister的List/Get方法访问。两级缓存之间存在resync机制。