k8s-informer调用关系图
2020-09-10 18:48:37 8 举报
k8s informer源码调用关系
作者其他创作
大纲/内容
DeltaFIFO.Add
controller初始化
DeltaFIFO消费者
p.pendingNotifications.ReadOne
增量事件添加到Listener的chanel中
watch到资源变更,以Event形式放入channel
clientSet := kubernetes.NewForConfig
NewSharedIndexInformer
Indexer初始化
p.pendingNotifications.WriteOne
listener.run
注册List函数和Watch函数
消费p.nextCh
processor.distribute
Indexer.Add()
processor.addListener
keyFuncMetaNamespaceKeyFunc
r.syncWith
p.handler.OnAddr.AddFunc
变更的对象添加到DeltaFIFO的items
获取key:namespace/name格式
变更的事件广播出去
informer.AddEventHandler()
r.store.Add
c.processLoop
p.addCh <- notification
ProcessFunc初始化
r.store.Resync()
r.store.Delete
Reflector初始化
shareInformer.Informer()
KeyFunc
NewReflector
informers.NewSharedInformerFactory(clientSet)
用户自己注册的函数
从watch的channel中取出Event
r.watchHandler
r.store.Update
DeltaFIFO.Pop()
DeltaFIFO.Update
sharedProcessor初始化
WatchFunc
Watch函数被调用
s.controller = New(cfg)
KeyOf
DeltaFIFO.Delete
变更的Delta对象添加到DeltaFIFO的queue
watch.NewStreamWatcher
给p.nextCh赋值
listener.add(obj)
DeletionHandlingMetaNamespaceKeyFunc
DeltaFIFO初始化
cache.Get
NewIndexer初始化cache
listener.pop
listerWatcher.List
Delta对象出队列
process(...)HandleDeltas
threadSafeMap.Add()
增量事件处理函数
Broadcast
s.controller.Run(stopCh)
f.items[id]
dedupDeltas
ListFunc
informer.Run()
cache.ListWatch
DeltaFIFO
把本地store的数据都替换为最新List的数据
从processor中取出变更的对象
NewFilteredPodInformer
f.queue = append
newProcessListener
NewThreadSafeStore初始化threadSafeMap
clientSet.Watch()接口监听资源变更
clientSet.Do()接口获取所有的资源
sharedProcessor
DeltaFIFO.Replace
p.handler.OnDelete
NewDeltaFIFOWithOptions
listerWatcher.Watch
:= <-p.addCh
前面podInformer.AddEventHandler注册了listener
queueActionLocked
List函数被调用
p.handler.OnUpdate
Reflector.ListAndWatch()
s.processor.run
queue元素出队列items中移除对应key的记录
根据event的type执行不同的函数
0 条评论
下一页