(2)podInformer.Informer:初始化 pod informer;
(3)factory.Start:启动 informer factory;
(4)cache.WaitForCacheSync:等待 list 操作获取到的对象都同步到 informer 本地缓存
Indexer 中;
下面也将根据这四部分进行 informer 的初始化与启动分析。
基于 k8s v1.17.4 版本依赖的 client-go
1.SharedInformerFactory 的初始化
1.1 sharedInformerFactory 结构体
先来看下 sharedInformerFactory 结构体,看下里面有哪些属性。
看到几个比较重要的属性:
(1)client:连接 k8s 的 clientSet;
(2)informers:是个 map,可以装各个对象的 informer;
(3)startedInformers:记录已经启动的 informer;
// staging/src/k8s.io/client-go/informers/factory.go
type sharedInformerFactory struct {
client kubernetes.Interface
namespace string
tweakListOptions internalinterfaces.TweakListOptionsFunc
lock sync.Mutex
defaultResync time.Duration
customResync map[reflect.Type]time.Duration
informers map[reflect.Type]cache.SharedIndexInformer
// startedInformers is used for tracking which informers have been started.
// This allows Start() to be called multiple times safely.
startedInformers map[reflect.Type]bool
}
1.2 NewSharedInformerFactory
NewSharedInformerFactory 方 法 用 于 初 始 化 informer factory , 主 要 是 初 始 化 并 返 回
sharedInformerFactory 结构体。
// staging/src/k8s.io/client-go/informers/factory.go
func NewSharedInformerFactory(client kubernetes.Interface, defaultResync time.Duration)
SharedInformerFactory {
评论0
最新资源