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 关注
- 202 浏览
添加回答
举报