List-Watch机制
List
:全量事件Watch
:增量事件
两者结合可以保证消息的可靠性、实时性、高性能。如果纯使用List
也能获取所有事件,但是这会对ApiServer
造成很大的压力,也很难满足实时性!
K8s每个资源的ResourceVersion
k8s的每个资源都会带有resourceVersion
字段,数字递增
Informer
clinet-go
中的一个核心工具包,List/Get
k8s中的所有Object
Informer
会自己维护一个缓存,以便更快的返回资源信息Informer
只会调用k8s的List
、Watch
两种API
- 可监听事件并触发回调函数
Informer
中可以添加自定义的回调函数:OnAdd()、OnUpdate()、OnDelete()
,在Controller
的设计实现中,会经常用到Informer
这个功能
Informer
在初始化时,会先调用List
获取所有资源(仅调用1
次)- 将
List
得到的资源全部写入本地缓存 Watch Kubernetes Api
资源,维护本地缓存
DeltaFIFO
:存储Informer Watch
返回的各种事件
LocalStore
:只会被Lister
的List/Get
方法访问
DeltaFIFO
和LocalStore
之间存在resync
机制!!!