1 回答

TA貢獻1890條經驗 獲得超9個贊
有幾點需要注意:
在調用之前
informerFactory.Start()
,確保 Informer 被直接調用(informer := factory.Apps().V1().Deployments().Informer()
)或Start()
不會啟動任何東西。使用 goroutine 啟動 SharedInformerFactory 是沒有意義的,因為它在
informerFactory.Start()
內部使用了一個。它還將停止該
informerFactory.WaitForCacheSync()
方法的工作,導致它為開始的告密者獲取錯誤的數據。
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 關注
- 163 瀏覽
添加回答
舉報