我需要我的 Go 应用程序来监控 Kubernetes 集群中的一些资源并对它们的变化做出反应。基于大量文章和示例,我似乎找到了一些方法来做到这一点;但是,我对 Kubernetes 比较陌生,而且它们的描述对我来说太复杂了,以至于我仍然无法掌握它们之间的区别——因此,要知道使用哪一个,所以我不要出现一些意想不到的行为......特别是:
watch.Interface.ResultChan()
—(通过 eg 获得rest.Request.Watch()
)— 这似乎已经让我通过提供 // 事件来对资源发生的变化做出Added
反应;Modified
Deleted
cache.NewInformer()
— 当我实现 a 时cache.ResourceEventHandler
,我可以将它作为最后一个参数传递:cache.NewInformer( cache.NewListWatchFromClient(clientset.Batch().RESTClient(), "jobs", ...), &batchv1.Job{}, 0, myHandler)
— 然后,该
myHandler
对象将接收//OnAdd()
调用。OnUpdate()
OnDelete()
对我来说,这似乎或多或少等同于
ResultChan
我在上面的(1.)中得到的;一个区别是,显然现在我得到了资源的“之前”状态作为奖励,而ResultChan
我只会得到它的“之后”状态。另外,IIUC,这实际上是建立在
watch.Interface
上面提到的(通过NewListWatchFromClient
)之上的——所以我想它带来了一些价值,和/或修复了 raw 的一些(什么?)缺陷watch.Interface
?cache.NewSharedInformer()
并且cache.NewSharedIndexInformer()
—— (呃哇,现在这些都是满口的......)我试图深入研究 godocs,但我觉得完全被我不理解的术语所淹没,以至于我似乎无法掌握其中的微妙之处(?)“常规”NewInformer
与...之间的差异NewSharedInformer
。NewSharedIndexInformer
有人可以帮我理解Kubernetes client-go 包中上述 API 之间的区别吗?