1 回答

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
有幾點(diǎn)需要注意:
在調(diào)用之前
informerFactory.Start()
,確保 Informer 被直接調(diào)用(informer := factory.Apps().V1().Deployments().Informer()
)或Start()
不會(huì)啟動(dòng)任何東西。使用 goroutine 啟動(dòng) SharedInformerFactory 是沒有意義的,因?yàn)樗?code>informerFactory.Start()內(nèi)部使用了一個(gè)。
它還將停止該
informerFactory.WaitForCacheSync()
方法的工作,導(dǎo)致它為開始的告密者獲取錯(cuò)誤的數(shù)據(jù)。
labelOptions := informers.WithTweakListOptions(func(opts *v1.ListOptions) {
opts.FieldSelector = "metadata.name=" + name
})
factory := informers.NewSharedInformerFactoryWithOptions(clientSet, 2*time.Second, informers.WithNamespace(namespace), labelOptions)
informer := factory.Apps().V1().Deployments().Informer()
informer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) {
mObj, ok := obj.(*appsv1.Deployment)
if !ok {
doSomething()
}
replicas := int(*mObj.Spec.Replicas)
doSomething()
},
UpdateFunc: func(oldObj, newObj interface{}) {
old, ok := oldObj.(*appsv1.Deployment)
if !ok {
doSomething()
}
newDeployment, ok := newObj.(*appsv1.Deployment)
if !ok {
doSomething()
}
oldReplicas := int(*old.Spec.Replicas)
newReplicas := int(*newDeployment.Spec.Replicas)
if oldReplicas != newReplicas {
doSomething()
}
},
})
// Initializes all active informers and starts the internal goroutine
factory.Start(wait.NeverStop)
factory.WaitForCacheSync(wait.NeverStop)
- 1 回答
- 0 關(guān)注
- 157 瀏覽
添加回答
舉報(bào)