gpt4 book ai didi

Kubernetes client-go : watch. Interface vs. cache.NewInformer vs. cache.NewSharedIndexInformer?

转载 作者:行者123 更新时间:2023-12-02 11:29:02 24 4
gpt4 key购买 nike

我需要我的 Go 应用到 监控一些资源在 Kubernetes 集群中,并对它们的变化使用react。基于大量的文章和例子,我似乎找到了一些方法;但是,我对 Kubernetes 比较陌生,而且它们的描述对我来说太复杂了,以至于我仍然是 无法把握差异它们之间——因此,知道使用哪个,这样我就不会出现一些意外的行为......具体来说:

  • watch.Interface.ResultChan() —(通过例如 rest.Request.Watch() 获得)— 通过提供 Added,这似乎已经让我对资源发生的变化使用react/Modified/Deleted事件;
  • cache.NewInformer() — 当我实现 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)——所以我想它带来了一些值(value),和/或修复了原始 watch.Interface 的一些(什么?)缺陷?
  • cache.NewSharedInformer() cache.NewSharedIndexInformer() —(呃哇,现在这些都是一口……)我试图挖掘 godocs,但我觉得我不懂的术语完全过载,以至于我似乎无法掌握微妙的( ?) “常规” NewInformer 之间的差异对比 NewSharedInformer对比 NewSharedIndexInformer ... 😞

  • 有人可以帮助我 了解差异 在 Kubernetes client-go 包中的上述 API 之间?

    最佳答案

    这些方法的不同之处在于 抽象级别 .如果更高级别的抽象适合您的需要,您应该使用它,因为许多较低级别的问题已为您解决。

    告密者 是比 watch 更高的抽象级别,还包括列表。在大多数用例中,您应该使用任何类型的 Informer 而不是较低级别的抽象。 Informer 内部由一个观察者、一个列表者和一个内存缓存组成。

    SharedInformers 在您的线人之间共享与 API 服务器和其他资源的连接。

    SharedIndexInformers 为您的数据缓存添加索引,以防您使用更大的数据集。

    建议使用 SharedInformers 而不是较低级别的抽象。从同一个实例化新的 SharedInformes SharedInformerFactory .在 Kubernetes Handbook example 中有一个例子

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

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

    podInformer.Informer().AddEventHandler(
    // add your event handling
    )

    // add event handling for serviceInformer

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

    关于Kubernetes client-go : watch. Interface vs. cache.NewInformer vs. cache.NewSharedIndexInformer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59544139/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com