首页  >  文章  >  后端开发  >  什么时候应该在 Kubernetes 中使用 watch.Interface、cache.NewInformer 或 cache.NewSharedIndexInformer?

什么时候应该在 Kubernetes 中使用 watch.Interface、cache.NewInformer 或 cache.NewSharedIndexInformer?

Linda Hamilton
Linda Hamilton原创
2024-11-11 19:56:03572浏览

When Should You Use watch.Interface, cache.NewInformer, or cache.NewSharedIndexInformer in Kubernetes?

watch.Interface vs.cache.NewInformer vs.cache.NewSharedIndexInformer

在监控 Kubernetes 中的资源并对更改做出反应时,开发人员有各种不同的方法他们可以选择的选项。理解这些方法之间的差异至关重要。

watch.Interface

通过像rest.Request.Watch()这样的方法获得的watch.Interface提供了一个流式传输的ResultChan资源更改的事件(添加/修改/删除)。它提供低级抽象,仅提供资源的“之后”状态。

cache.NewInformer

cache.NewInformer 函数允许您指定一个ResourceEventHandler 处理 OnAdd()/OnUpdate()/OnDelete() 调用。它包括一种接收资源“之前”和“之后”状态的机制。在内部,NewInformer 通过 NewListWatchFromClient 使用 watch.Interface。

cache.NewSharedInformer 与 cache.NewSharedIndexInformer

这些函数提供比 NewInformer 更高级别的抽象。他们采用与 API 服务器的共享连接,并在举报者之间共享资源。 cache.NewSharedIndexInformer 还向数据缓存添加索引。

建议

对于大多数用例,建议使用 SharedInformers 而不是较低级别的抽象。 SharedInformers 共享资源并提供更高级别的抽象,从而简化了许多较低级别的任务。在处理大型数据集时,由于具有索引功能,SharedIndexInformers 是首选。

从同一个 SharedInformerFactory 实例化 SharedInformers 以高效共享资源。示例如下:

informerFactory := informers.NewSharedInformerFactory(clientset, time.Second*30)

podInformer := informerFactory.Core().V1().Pods()
serviceInformer := informerFactory.Core().V1().Services()

podInformer.Informer().AddEventHandler(
  // Add event handling 
)
// Add event handling for serviceInformer

informerFactory.Start(wait.NeverStop)
informerFactory.WaitForCacheSync(wait.NeverStop)

以上是什么时候应该在 Kubernetes 中使用 watch.Interface、cache.NewInformer 或 cache.NewSharedIndexInformer?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn