首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kubernetes client-go informer 原理

Kubernetes client-go informer 原理

Kubernetes client-go informer 是一种用于监控 Kubernetes 资源变更的机制。它允许开发者在不直接使用 Kubernetes API 的情况下,获取集群中资源的实时状态。informer 是 client-go 库的核心组件,它提供了一种高效、可扩展的方式来处理 Kubernetes 资源的变更事件。

原理概述

informer 的工作原理可以分为以下几个步骤:

  1. ListAndWatch:informer 首先会列出指定的 Kubernetes 资源,并对这些资源进行监控。当资源发生变更时,informer 会收到通知。
  2. Delta Compression:informer 使用增量压缩算法,只获取自上次同步以来发生变更的资源对象。
  3. Event Notification:当资源发生变更时,informer 会通过事件通知系统,将变更事件传递给相关的处理器。
  4. Distribution:informer 将变更事件分发给注册的事件处理器,以便进行后续处理。

优势

informer 具有以下优势:

  • 高效:informer 使用增量压缩算法,只获取自上次同步以来发生变更的资源对象,从而降低了 API 服务器的负担。
  • 可扩展:informer 提供了注册事件处理器的机制,使得开发者可以轻松地扩展 informer 的功能。
  • 强大的事件处理能力:informer 提供了丰富的事件处理器,可以帮助开发者处理各种资源变更事件。

应用场景

informer 广泛应用于以下场景:

  • Controller:Kubernetes 控制器是一种用于管理集群中资源状态的组件。通过使用 informer,控制器可以实时监控资源的变更,从而做出相应的响应。
  • Operator:Kubernetes Operator 是一种用于自动化管理应用程序的组件。通过使用 informer,Operator 可以实时监控应用程序的状态,从而做出相应的调整。
  • Webhook:Kubernetes Webhook 是一种用于拦截 Kubernetes API 请求的机制。通过使用 informer,Webhook 可以实时监控资源的变更,从而做出相应的响应。

推荐的腾讯云相关产品

腾讯云提供了以下与 informer 相关的产品:

  • 腾讯云容器产品:腾讯云容器产品提供了一系列与 Kubernetes 相关的服务,包括腾讯云 TKE、腾讯云 TKE RegisterNode、腾讯云 TKE Anywhere 等。这些产品都可以与 informer 配合使用,实现高效的资源管理。
  • 腾讯云云原生产品:腾讯云云原生产品提供了一系列与 Kubernetes 相关的服务,包括腾讯云 TKE、腾讯云 TKE RegisterNode、腾讯云 TKE Anywhere 等。这些产品都可以与 informer 配合使用,实现高效的资源管理。

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Kubernetes Informer基本原理

如何高效可靠进行事件监听,k8s 客户端工具包 client-go 提供了一个通用的 informer 包,通过 informer,可以方便和高效的进行 controller 开发。...机制架构如下图(图片源自 Client-go): 可以看到这张图分为上下两个部分,上半部分由 client-go 提供,下半部分则是需要自己实现的控制循环逻辑 本文主要分析上半部分的逻辑,包括下面几个组件...indexer 与 etcd 集群中的数据保持一致,从而 client-go 可以直接从本地缓存获取资源对象,减少 apiserver 和 etcd 集群的压力。...4、总结 至此一个 informerclient-go 部分的流程就走完了,可以看到启动 informer 主要流程就是: 1、Reflector ListAndWatch: (1)通过一个 reflector...5、参考 https://github.com/kubernetes/sample-controller/tree/master https://jimmysong.io/kubernetes-handbook

41511
  • 【深入浅出】Kubernetes控制器:云原生架构的无形守护者

    ...等等 核心原理 当我们深入研究Kubernetes控制器的内部工作原理时,会发现Informer和WorkQueue是构成每个控制器核心逻辑的两个关键组件。...下面对这两个组件进行详细解释: Informer 作用:InformerKubernetes客户端库(client-go)中的一部分,它负责监视(watch)Kubernetes API服务上某种资源类型...原理Informer利用Kubernetes API的watch机制来监听集群状态的变化。 当Informer监听到资源变化时,它会将变化的信息添加到本地存储中,并且触发注册的事件处理程序。.../informers" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "k8s.io/client-go/tools...如果你对Kubernetes控制器的工作原理还有疑问,或者想要探讨更多容器技术的话题,请在后台留言,我们一起进步!

    14910

    【云原生 • Prometheus】云原生kubernetes服务发现原理图解

    云原生kubernetes服务发现原理图解 概述 上节分析了Prometheus服务发现核心流程(如下图),Discoverer基于不同协议发现采集点,通过channel通知到updater协程,然后更新到...kubernetes_sd_configs 服务发现协议核心原理就是利用API Server提供的Rest接口获取到云原生集群中的POD、Service、Node、Endpoints、Endpointslice...图片 ❝ client-gokubernetes官方提供的go语言的客户端库,go应用使用该库可以访问kubernetes的API Server,这样我们就能通过编程来对kubernetes资源进行增删改查操作...云原生服务发现基本原理是访问API Server获取到云原生集群资源对象,Prometheus与API Server进行交互这里使用到的是client-go官方客户端里的Informer核心工具包。...」,其它都是client-go框架informer工具包提供的功能。

    1.6K81

    Prometheus 云原生kubernetes服务发现原理图解

    云原生kubernetes服务发现原理图解 概述 上节分析了Prometheus服务发现核心流程(如下图),Discoverer基于不同协议发现采集点,通过channel通知到updater协程,然后更新到...kubernetes_sd_configs 服务发现协议核心原理就是利用API Server提供的Rest接口获取到云原生集群中的POD、Service、Node、Endpoints、Endpointslice...❝client-gokubernetes官方提供的go语言的客户端库,go应用使用该库可以访问kubernetes的API Server,这样我们就能通过编程来对kubernetes资源进行增删改查操作...云原生服务发现基本原理是访问API Server获取到云原生集群资源对象,Prometheus与API Server进行交互这里使用到的是client-go官方客户端里的Informer核心工具包。...」,其它都是client-go框架informer工具包提供的功能。

    1.5K61

    KubernetesInformer 的使用

    运行原理 一个控制器每次需要获取对象的时候都要访问 APIServer,这会给系统带来很高的负载,Informers 的内存缓存就是来解决这个问题的,此外 Informers 还可以几乎实时的监控对象的变化...Informers 的这些高级特性以及超强的鲁棒性,都足以让我们不去直接使用客户端的 Watch() 方法来处理自己的业务逻辑,而且在 Kubernetes 中也有很多地方都有使用到 Informers...,位于 k8s.io/client-go/informers 中。..." "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" "k8s.io...Informers 是 client-go 中非常重要的概念,接下来我们将仔细分析 Informers 的实现原理,由于 Informers 实现非常复杂,我们将按照 Informers 的几个核心知识点分别进行讲解

    2K20

    Kubernetesclient-go库介绍

    Kubernetesclient-go库介绍 client-go的作用 github上client-go官方项目工程 基本介绍 Kubernetes官方从2016年8月份开始,将Kubernetes资源操作相关的核心源码抽取出来...client-go是一个调用kubernetes集群资源对象API的客户端,即通过client-go实现对kubernetes集群中资源对象(包括deployment、service、ingress、replicaSet...Client-go包中一个相对较为高端的设计在于Informer的设计,我们知道我们可以直接通过Kubernetes API交互,但是考虑一点就是交互的形式,Informer设计为List/Watch...Informer交互而不是每次都和Kubernetes API交互。...kubernetes client-go Kubernetes Informer 详解 如何用 client-go 拓展 Kubernetes 的 API Using Kubernetes API from

    4.2K31

    client-go实战之九:手写一个kubernetes的controller

    client-go实战之二:RESTClient client-go实战之三:Clientset client-go实战之四:dynamicClient client-go实战之五:DiscoveryClient...实战》系列的第九篇,前面咱们已经了解了client-go的基本功能,现在要来一次经典的综合实战了,接下来咱们会手写一个kubernetes的controller,其功能是:监听某种资源的变化,一旦资源发生变化...对着架构细说流程 首先将上述架构图中涉及的内容进行分类,共有三部分 最左侧的Kubernetes API Server+etcd是第一部分,它们都是kubernetes的内部组件 第二部分是整个informer.../kubernetes" "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" ) type ControllerDemo...(在informer的三个回调方法中完成业务逻辑) 以下是官方参考信息 https://github.com/kubernetes/community/blob/master/contributors/

    1.3K50

    浅析 Kubernetes 控制器的工作原理

    总而言之,在 Kubernetes 中,每个控制器只负责某种类型的特定资源。对于集群管理员来说,了解每个控制器的角色分工至关重要,如有必要,你还需要深入了解控制器的工作原理。...本文我将会带你深入了解 Kubernetes 控制器的内部结构、基本组件以及它的工作原理。...本文使用的所有代码都是从 Kubernetes 控制器的当前实现代码中提取的,基于 Go 语言的 client-go 库。 1....但频繁地调用 API Server 非常消耗集群资源,因此为了能够多次 get 和 list 对象,Kubernetes 开发人员最终决定使用 client-go 库提供的缓存机制。...client-go 库提供了 Listwatcher 接口用来获得某种资源的全部 Object,缓存在内存中;然后,调用 Watch API 去 watch 这种资源,去维护这份缓存;最后就不再调用 Kubernetes

    8.9K50

    《一起读 kubernetes 源码》揭秘 k8s 关键机制 informer

    前置知识 控制循环 informer 的使用 心路历程 我第一接触 informer 是在使用 client-go 的时候。...而在其中我第一次碰到了 informer。从了解了这个机制之后,才逐渐明白 k8s 本身是如何去控制里面的资源的。 还是一样的,本文不涉及具体这个机制的详细原理,更专注在源码本身。...的用法 下面的例子说明了 informer 的用法 https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery...于是我们需要回到原理上来。看图说话,在最上面说 informer 的流程图的时候我们可以看到有一个 Reflector 的东西在放数据。于是乎我们应该去寻找的是这个东西,你好像在哪里看到过呢?...总结 从原理上来说 informer 本身不复杂,而且真的是一个不错的设计,从我的感受上来总结可以用两个词 事件+解耦 ,一个事件通知机制加上一个抽象解耦的实现。希望你能体会到,之后我们会用到它。

    19611

    Client Go四种交互模式之 DynamicClient实战案例详解

    作为加强,Kubernetes本身提供了一系列更加方便整合进kubernetes系统的方式,被称之为client-go。 这个项目中被最广泛使用客户端是ClientSet,它是交互客户端的类型之一。...因此,深入client-go项目的组成模块和弄清楚如何使用好它就是要具备的技能。...通常,我们使用Informer,一个由k8s.io/client-go提供的模块,状态发生改变、创建就会在指定类型的client运行一个handler。.../dynamic" "k8s.io/client-go/dynamic/dynamicinformer" "k8s.io/client-go/tools/cache" "k8s.io/client-go...我强烈大家阅读k8s.io/client-go源码,当然仅仅读它也不够,sigs.k8s.io/controller-runtime项目和Kubernetes Reference API都是极好的。

    52710

    Kubernetes client-go实战应用

    Kubernetes client-go实战应用 github上client-go官方项目工程 实战应用 sample-controller示例 官方的一个简单的Controller示例,可以处理任何CRD...一般优雅的姿势去操作Kubernetes的资源并实时做出响应的方案是采用client-goinformer,它的工作模式是:初始时使用List()去加载资源的所有相关实例,然后使用Watch()进行订阅更新...在k8s.io/client-go/tools/cache包中提供了一个Informer方法cache.NewInformer,这个cache.NewInformer返回两个参数Store 和Controller...的处理 试想一下,istio中的资源、对象都是Kubernetes的CRDs,那么必然,istio中肯定有处理好Kubernetes CRD的方式,我们知道目前都是采用client-go,那么istio...参考 Accessing Kubernetes CRDs from the client-go package Kubernetes Deep Dive: Code Generation for CustomResources

    1.7K30
    领券