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

Kubernetes client-go informer 架构介绍

Kubernetes client-go informer 架构介绍

Kubernetes client-go informer 是 Kubernetes 中的一个关键组件,用于实现对 Kubernetes 集群中资源对象的缓存和通知机制。它允许开发者在自定义控制器中以高效的方式监控 Kubernetes 集群中资源对象的变化,并快速响应这些变化。

架构

Kubernetes client-go informer 架构主要包括以下组件:

  1. Reflector:负责监听 Kubernetes API Server 中的资源对象变更事件,并将这些事件写入到 Delta FIFO 队列中。
  2. Delta FIFO:负责存储资源对象的增量更新事件,并按照指定的优先级进行排序。
  3. Indexer:负责存储资源对象的状态,并支持高效的查询和索引操作。
  4. Processor:负责从 Delta FIFO 队列中读取事件,并将这些事件传递给相应的处理器进行处理。
  5. Event Handler:负责处理资源对象的增量更新事件,并将这些事件转发给控制器进行后续处理。

工作流程

Kubernetes client-go informer 的工作流程主要包括以下步骤:

  1. 创建 SharedInformerFactory,该工厂用于创建不同类型的 informer 对象。
  2. 创建特定类型的 informer 对象,例如 DeploymentInformer、PodInformer 等。
  3. 启动 informer 对象,该过程会自动启动 Reflector、Delta FIFO、Indexer 和 Processor 等组件。
  4. 注册 Event Handler,用于处理资源对象的增量更新事件。
  5. 通过 SharedInformerFactory 的 Start 方法启动所有 informer 对象,并等待缓存同步完成。
  6. 在控制器中使用 informer 对象的 Lister 或 Indexer 方法查询或监控资源对象的状态。

优势

Kubernetes client-go informer 架构具有以下优势:

  1. 高效的缓存和通知机制:通过 Delta FIFO 队列和 Indexer 的组合,实现了高效的缓存和通知机制,降低了对 Kubernetes API Server 的访问频率,提高了控制器的性能。
  2. 灵活的事件处理机制:支持自定义 Event Handler,可以灵活地处理资源对象的增量更新事件,满足不同的业务需求。
  3. 丰富的查询和索引功能:支持基于索引的查询和监控功能,可以快速查询到感兴趣的资源对象,提高了开发效率。

应用场景

Kubernetes client-go informer 架构广泛应用于以下场景:

  1. 自定义控制器:开发者可以基于 Kubernetes client-go informer 架构实现自定义控制器,以监控和处理 Kubernetes 集群中的资源对象。
  2. Operator 开发:Kubernetes client-go informer 架构可以用于开发 Operator,以实现对应用程序的自动化管理和自定义控制。
  3. 扩展 API Server:Kubernetes client-go informer 架构可以用于扩展 Kubernetes API Server,以实现对自定义资源对象的监控和管理。

推荐的腾讯云相关产品

腾讯云提供了以下相关产品和服务,可以与 Kubernetes client-go informer 架构结合使用:

  1. 腾讯云容器产品:腾讯云提供了腾讯云容器产品,可以帮助用户快速部署和管理 Kubernetes 集群,并提供了丰富的插件和扩展,以满足不同的业务需求。
  2. 腾讯云云原生产品:腾讯云提供了腾讯云云原生产品,可以帮助用户实现应用程序的快速开发、部署和管理,并提供了丰富的云原生工具和服务,以满足不同的业务需求。
  3. 腾讯云 Serverless 产品:腾讯云提供了腾讯云 Serverless 产品,可以帮助用户实现应用程序的快速开发和管理,并提供了丰富的 Serverless 工具和服务,以满足不同的业务需求。

参考资料

  1. Kubernetes client-go informer 官方文档 2
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • KubernetesInformer机制详解

    Informer中的Lister 在 KubernetesInformer 架构中,Lister 是一个重要的组件,用于在本地缓存中存储和索引 Kubernetes API Server 中的资源对象...Informer中的Watcher 在 KubernetesInformer 架构中,Watcher 是一种用于监视和接收资源对象变化事件的重要组件。...Informer中的Indexer 在 KubernetesInformer 架构中,Indexer 是一个关键的组件,用于在本地缓存中维护和管理资源对象的索引。...Informer中的Store 在 KubernetesInformer 架构中,Store 是一个重要的组件,用于在本地缓存中存储和管理 Kubernetes 资源对象的数据。...Informer精髓浅析 InformerKubernetes 中设计的精髓主要体现在以下几个方面: 事件驱动的架构Kubernetes 中的大部分组件和控制器都是基于事件驱动的设计。

    86411

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

    实战》系列的第九篇,前面咱们已经了解了client-go的基本功能,现在要来一次经典的综合实战了,接下来咱们会手写一个kubernetes的controller,其功能是:监听某种资源的变化,一旦资源发生变化...,并不会觉得有太多,总的来说由以下内容构成 代码整体架构一览 对着架构细说流程 全局重点的小结 编码实战 代码整体架构一览 首先,再次明确本次实战的目标:开发出类似kubernetes的controller...那样的功能,实时监听pod资源的变化,针对每个变化做出响应 今天的实战源自client-go的官方demo,其主要架构如下 可能您会觉得上图有些复杂,没关系,接下来咱们细说此图,为后面的编码打好理论基础...对着架构细说流程 首先将上述架构图中涉及的内容进行分类,共有三部分 最左侧的Kubernetes API Server+etcd是第一部分,它们都是kubernetes的内部组件 第二部分是整个informer.../kubernetes" "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" ) type ControllerDemo

    1.3K50

    图解K8s源码 - kube-controller-manager篇

    ---- informer 机制 client-go 包中最核心的工具就是 informer,k8s的其他组件都是通过 client-goinformer 机制与 kube-apiserver 通信的...我们将上图的 client-go 部分放大,看下 informer运行原理: 在 informer架构设计中,有多个核心组件,分别介绍如下。...---- informer 工厂 了解了informer 架构中的核心组件后,我们再回到之前 client-go架构图,看看如何创建 Informer。...参考: 《Kubernetes源码剖析》 《深入剖析kubernetes》 https://blog.yingchi.io/posts/2020/7/k8s-cm-informer.html https...kube-controller-manager ---- k8s系列往期文章列表: Kubernetes微服务常见概念及应用 图解K8s源码 - 序章 - K8s组件架构 图解K8s源码 - k8s核心数据结构

    83310

    kubernetesinformer 的使用

    后来了解到官方推出一个客户端工具 client-goclient-go 中的 Informer 对 watch 操作做了封装,使用起来非常方便,下面会主要介绍一下 client-go 的使用。...二、Informer 的机制 cient-go 是从 k8s 代码中抽出来的一个客户端工具,Informerclient-go 中的核心工具包,已经被 kubernetes 中众多组件所使用。...五、总结 本文介绍client-go 包中核心组件 Informer 的原理以及使用方法,Informer 主要功能是缓存对象到本地以及根据对应的事件类型触发已注册好的 ResourceEventHandler...参考: 如何用 client-go 拓展 Kubernetes 的 API https://www.kubernetes.org.cn/2693.html Kubernetes 大咖秀徐超《使用 client-go.../notes/file/528 Kubernetes Client-go Informer 源码分析

    4.3K30

    kubernetesinformer 的使用

    后来了解到官方推出一个客户端工具 client-goclient-go 中的 Informer 对 watch 操作做了封装,使用起来非常方便,下面会主要介绍一下 client-go 的使用。...二、Informer 的机制 cient-go 是从 k8s 代码中抽出来的一个客户端工具,Informerclient-go 中的核心工具包,已经被 kubernetes 中众多组件所使用。...五、总结 本文介绍client-go 包中核心组件 Informer 的原理以及使用方法,Informer 主要功能是缓存对象到本地以及根据对应的事件类型触发已注册好的 ResourceEventHandler...参考: 如何用 client-go 拓展 Kubernetes 的 API https://www.kubernetes.org.cn/2693.html Kubernetes 大咖秀徐超《使用 client-go.../notes/file/528 Kubernetes Client-go Informer 源码分析

    3.7K10

    kubernetes client-go解析

    注:本次使用的client-go版本为:client-go 11.0,主要参考CSDN上的深入浅出kubernetesclient-go系列,建议看本文前先参考该文档。...本文中的visio图可以从这里获取 下图为来自官方的Client-go架构图 ? 图1. 下图也可以作为参考 ? 图2. Indexer Indexer保存了来自apiServer的资源。...sharedInformerFactory负责在不同的chan中启动不同的informer(或shared_informer) // client-go/informers/factory.go func...informer的注册函数统一为InformerFor,代码如下,所有类型的informer都会调用该函数注册到sharedInformerFactory // client-go/informers/...编写程序时,需要注意client-go的版本需要与对接的kubernetes相匹配,对应关系参见github 实际使用中会先创建SharedIndexInformer,DeltaFIFO和Reflector

    1.2K20

    【深入浅出】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...NewController 创建一个新的Controller func NewController() *Controller { // 使用Kubernetes client-go的in-cluster

    14710

    Kubernetes系列】Kubernetes介绍以及架构

    文章目录 Kubernetes介绍以及架构 简介 应用部署历程 Kubernetes的用途 Kubernetes设计理念 Kubernetes架构设计原则 Kubernetes抽象架构 Master架构...Kubernetes介绍以及架构 简介 Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。...Kubernetes设计理念 类似Linux分层架构 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境 应用层:部署(无状态应用、有状态应用、批处理任务...Kubernetes架构设计原则 只有apiserver可以直接访问etcd存储,其他服务必须通过Kubernetes API来访问集群状态 单节点故障不应该影响集群的状态 在没有新请求的情况下,所有组件应该在故障恢复后继续执行上次最后收到的请求...抽象架构 Master架构 Kubernetes里的Master指的是集群控制节点,每个Kubernetes集群里需要有一个Master节点来负责真个集群的管理和控制。

    64920

    Kubernetes Informer基本原理

    如何高效可靠进行事件监听,k8s 客户端工具包 client-go 提供了一个通用的 informer 包,通过 informer,可以方便和高效的进行 controller 开发。...informer 包提供了如下的一些功能: 1、本地缓存(store) 2、索引机制(indexer) 3、Handler 注册功能(eventHandler) 1、informer 架构 整个 informer...机制架构如下图(图片源自 Client-go): 可以看到这张图分为上下两个部分,上半部分由 client-go 提供,下半部分则是需要自己实现的控制循环逻辑 本文主要分析上半部分的逻辑,包括下面几个组件...4、总结 至此一个 informerclient-go 部分的流程就走完了,可以看到启动 informer 主要流程就是: 1、Reflector ListAndWatch: (1)通过一个 reflector...5、参考 https://github.com/kubernetes/sample-controller/tree/master https://jimmysong.io/kubernetes-handbook

    41211

    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

    kubebuilder operator的运行逻辑

    kubebuilder 的运行逻辑 概述 下面是kubebuilder 的架构图。...可以看到最外层是通过名为Manager的组件驱动的,Manager中包含了多个组件,其中Cache中保存了gvk和informer的映射关系,用于通过informer的方式缓存kubernetes 的对象...本文不介绍kuberbuilder的用法,如有需要可以参考如下三篇文章: Kubernetes Operator for Beginners — What, Why, How Advanced Kubernetes...与使用client-go的区别 client-go 在需要操作kubernetes资源时,通常会使用client-go来编写资源的CRUD逻辑,或使用informer机制来监听资源的变更,并在OnAdd...kubebuilder也提供了client库,可以对kubernetes资源进行CRUD操作,但建议这种情况下直接使用client-go进行操作: package main import ( "context

    1.7K20

    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都是极好的。

    52010

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

    API 官方客户端库(client-go)提供了更为简便的方法:rest.InClusterConfig()。...图片 ❝ client-gokubernetes官方提供的go语言的客户端库,go应用使用该库可以访问kubernetes的API Server,这样我们就能通过编程来对kubernetes资源进行增删改查操作...❞ Informer机制 从之前分析的服务发现协议接口设计得知,了解k8s服务发现协议入口在discovery/kubernetes.go的Run方法: 图片 Run方法中switch罗列出不同role...云原生服务发现基本原理是访问API Server获取到云原生集群资源对象,Prometheus与API Server进行交互这里使用到的是client-go官方客户端里的Informer核心工具包。...」,其它都是client-go框架informer工具包提供的功能。

    1.6K81
    领券