【发布时间】:2020-04-19 23:38:37
【问题描述】:
我需要我的 Go 应用程序来监控 Kubernetes 集群中的一些资源并对它们的变化做出反应。基于大量文章和示例,我似乎找到了一些方法来做到这一点;但是,我对 Kubernetes 比较陌生,而且它们的描述对我来说太复杂了,以至于我仍然无法掌握它们之间的区别——因此,不知道哪个一个使用,这样我就不会得到一些意想不到的行为......具体来说:
-
watch.Interface.ResultChan()——(通过例如rest.Request.Watch()获得)——这似乎已经让我通过提供Added/Modified/Deleted事件对资源发生的变化做出反应; -
cache.NewInformer()— 当我实现cache.ResourceEventHandler时,我可以将它作为最后一个参数传递:cache.NewInformer( cache.NewListWatchFromClient(clientset.Batch().RESTClient(), "jobs", ...), &batchv1.Job{}, 0, myHandler)——那么,
myHandler对象将收到OnAdd()/OnUpdate()/OnDelete()调用。对我来说,这似乎或多或少等同于我在上面 (1.) 中得到的
ResultChan;一个区别是,显然现在我得到了资源的“之前”状态作为奖励,而使用ResultChan我只会得到它的“之后”状态。另外,IIUC,这实际上以某种方式建立在上面提到的
watch.Interface(通过NewListWatchFromClient)之上——所以我想它带来了一些价值,和/或修复了原始@ 的一些(什么?)缺陷987654343@? -
cache.NewSharedInformer()和cache.NewSharedIndexInformer()— (哇,现在 那些 已经满嘴了……) 我试图挖掘 godocs,但我觉得我完全不懂术语,以至于我似乎无法掌握“常规”NewInformer与NewSharedInformer与NewSharedIndexInformer之间的细微差别(?)。 .. ????
有人可以帮我了解 Kubernetes client-go 包中上述 API 之间的区别吗?
【问题讨论】:
标签: kubernetes kubernetes-go-client