深入源码分析kubernetes informer机制(零)简单了解informer


[阅读指南]
基于kubernetes 1.27 stage版本
为了方便阅读,后续所有代码均省略了错误处理及与关注逻辑无关的部分。


文章目录

  • 关于client-go
  • Informer是什么
  • 为什么需要informer
  • Informer工作流程
  • 后续分析计划

关于client-go

client-go是kubernetes节点与服务端进行资源交互的客户端库,提供了非常多的功能与组件,用来与Kubernetes API 进行交互与操作。常见的功能有管理和同步kubernetes资源、管理本地kubernetes资源缓存、认证和授权等。

Informer是什么

Informer 是一种建立在client-上的资源同步和事件监听的机制。它可以监控集群中的资源变化,并在资源发生变化时触发事件通知。他用到了Informer 通过与 Kubernetes API Server 进行交互,获取资源的最新状态,再将这些状态同步到本地缓存中。

为什么需要informer

当涉及大规模、高性能的系统时,直接与 API Server 通信可能会导致一些挑战和性能问题,而 Informer 的引入可以有效地减少 API Server 的压力,降低网络开销,实现响应式事件监听,提高应用程序的性能和响应速度,以及处理资源同步和冲突问题。这使得系统更加高效、稳定和可靠。

举个栗子。公司举办团建,如果通过私聊每个人来通知活动地点和活动,需要花费非常多的时间和精力。而将参与活动的人拉群并发一条公告,就能快速地同步团建信息了。informer就像是给clients拉了个群,将api-server的信息通过公告进行同步。

Informer工作流程

informer用到client-go的几个关键组件

  • reflecter 负责监听特定的kubernetes资源变化事件。
  • informer 负责从delta FIFO队列中取出资源变化事件,并进行缓存与索引的操作。
  • indexer 负责管理存储资源对象的索引。
  • custom controller 根据资源变化实现本地节点的一些管理操作,本地的kubernetes应用可以通过实现controller监控服务端资源的变化。

下面的图介绍了各个模块之间是怎么交互和工作的。
在这里插入图片描述

根据这个关系图,可以了解到客户端的整个资源同步流程。简单地看就是如下几步,

  1. reflecter通过list/watch方法监听kubernetes api的资源变化 ->1
  2. reflecter将监听到的资源变化对象添加到fifo队列中 ->2
  3. informer从队列取出资源变化对象,并将取出的对象同步到本地缓存 ->3,4,5
  4. 同步缓存时,也会将资源对象回调至custom handler -> 6
  5. custom handler将资源对象加入到workqueue中等待处理 ->7
  6. work进程从workqueue中取出资源对象,再进行额外的处理操作 ->8,9

后续分析计划

后续将会按照这个同步流程的顺序来详细分析每个模块的代码和设计逻辑。
分析计划:

  1. Informer
  2. Refletor
  3. Resync机制
  4. DeltaFIFO
  5. Indexer
  6. Informer
  7. stream list VS list

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/94519.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 20.04配置静态ip

ip配置文件 cd /etc/netplan配置 根据需求增加 # Let NetworkManager manage all devices on this system network:version: 2renderer: NetworkManager # 管理 不是必须ethernets:enp4s0: #网卡名dhcp4: no #关闭ipv4动态分配ip地址dhcp6: no #关闭ipv6动态分配…

python接口自动化测试框架2.0,让你像Postman一样编写测试用例,支持多环境切换、多业务依赖、数据库断言等

项目介绍 接口自动化测试项目2.0 软件架构 本框架主要是基于 Python unittest ddt HTMLTestRunner log excel mysql 企业微信通知 Jenkins 实现的接口自动化框架。 前言 公司突然要求你做自动化,但是没有代码基础不知道怎么做?或者有自动化…

React 高阶组件(HOC)

React 高阶组件(HOC) 高阶组件不是 React API 的一部分,而是一种用来复用组件逻辑而衍生出来的一种技术。 什么是高阶组件 高阶组件就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件。基本上,这是从 React 的组成…

Android学习之路(4) UI控件之文本框

本节给大家带来的UI控件是:TextView(文本框),用于显示文本的一个控件,另外声明一点,我不是翻译API文档,不会一个个属性的去扣,只学实际开发中常用的,有用的,大家遇到感觉到陌生的属性…

# 快速评估立功科技基于S32K324的TMS方案

文章目录 1.前言2.立功科技的TMS方案介绍2.1 介绍资料2.2 简要介绍 3.S32K3_TriMotor评估板测试3.1 环境搭建S32 Design Studio for S32 Platform 3.4安装RTD 2.0.0安装Freemaster 3.2 3.2 例程测试3.3 例程适配3.4 双核烧录3.5 测试 1.前言 最近和一些做汽车水泵/风机的客户交…

爬虫逆向实战(七)--猿人学第十六题

一、数据接口分析 主页地址:猿人学第十六题 1、抓包 通过抓包可以发现数据接口是api/match/16 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以看出m是加密参数 请求头是否加密? 无响应是否加密? 无cook…

节点不连续伽辽金方法在求解线性和非线性平流方程中的一维实现(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

三维模型OSGB格式轻量化技术在大规模场景的加载和渲染的作用分析

三维模型OSGB格式轻量化技术在大规模场景的加载和渲染的作用分析 在移动设备上,大规模场景的加载和渲染是一个不容忽视的问题。对于OSGB格式轻量化处理来说,大规模场景的加载和渲染也是其中一项重要的任务。本文将重点分析OSGB格式轻量化处理在大规模场景…

如何实现客户自助服务?打造产品知识库

良好的客户服务始于自助服务。根据哈佛商业评论,81% 的客户在联系工作人员之前尝试自己解决问题。92% 的客户表示他们更喜欢使用产品知识库/帮助中心。 所以本文主要探讨了产品知识库是什么,有哪些优势以及如何创建。 产品知识库是什么 产品知识库是将…

Web网页浏览器远程访问jupyter notebook服务器【内网穿透】

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook,它是一个交互式的数据科学和计算环境,支持多种编程语言,如…

无涯教程-Perl - times函数

描述 此函数返回一个四元素列表,为当前进程及其子进程提供用户,系统,子进程和子系统时间。 语法 以下是此函数的简单语法- times返回值 此函数返回ARRAY,($usertime,$systemtime,$childsystem,$childuser) 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -w($use…

day20 飞机大战射击游戏

有飞行物类 飞行 爆炸 的连环画, 飞行的背景图 , 子弹图, 还有游戏开始 暂停 结束 的画面图。 设计一个飞机大战的小游戏, 玩家用鼠标操作hero飞行机, 射出子弹杀死敌机,小蜜蜂。 敌机可以获得分数&…

五分钟搭建生鲜蔬果小程序

如今,随着移动互联网的快速发展,小程序已经成为众多企业和商家推广产品和服务的重要工具。而生鲜蔬果行业作为一个常见的消费领域,也开始逐渐转向小程序商城来进行销售和服务。那么,如何从零开始搭建一个生鲜蔬果小程序商城呢&…

解决Oracle中XML插入数据时的空格问题

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

Android核心开发之——OpenGL

OpenGL是一种用于编程计算机图形的应用程序编程接口(API)。它提供了一系列函数和方法,用于绘制2D和3D图形,以及进行渲染和图形处理。OpenGL可以跨平台使用,支持各种操作系统和硬件设备。它被广泛应用于游戏开发、虚拟现…

Java调用https接口添加证书

使用InstallCert.Java生成证书 /** Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** - Redistri…

Python爬虫——scrapy_基本使用

安装scrapy pip install scrapy创建scrapy项目,需要在终端里创建 注意:项目的名字开头不能是数字,也不能包含中文 scrapy startproject 项目名称 示例: scrapy startproject scra_baidu_36创建好后的文件 3. 创建爬虫文件&…

使用PyMuPDF库的PDF合并和分拆程序

PDF工具应用程序是一个使用wxPython和PyMuPDF库编写的简单工具,用于合并和分拆PDF文件。它提供了一个用户友好的图形界面,允许用户选择源文件夹和目标文件夹,并对PDF文件进行操作。 C:\pythoncode\blog\pdfmergandsplit.py 功能特点 选择文…

音视频实时通话解决方案

1、问题提出 想要实现音视频通话,对于大部分人可能会觉得很难,但是实际上,有些事情并没有大家想的那样困难,只要功夫深,铁杵磨成针。 机缘巧合下,在业务中,我也遇到了一个业务场景需要实现音视频通话,我们不可能自己从零开始干,我本次用到的核心是WebRTC。 2、WebRT…

同伦问题与同伦算法

同伦问题 据我所知,这篇博客是CSDN上少数几篇讲同伦算法的博客之一考虑同伦算法的目的 扩大初值选取范围解决非线性代数方程组的全部解计算问题 同伦算法中的基本概念 考虑求的解人为地引入参数t,构造一个函数族使得 同时假设的解已知,从出发可以求解对…