深入源碼分析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.pswp.cn/news/39254.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39254.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39254.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

揭秘熱門工作秘籍:ChatGPT大顯身手!輕松提升工作效率的高效Prompt技巧曝光!

目錄 01 背景 福利:文末有chat-gpt純分享,無魔法,無限制 02 AI 可以幫助程序員做什么? 2.1 技術知識總結 2.2 拆解任務 2.3 閱讀代碼/優化代碼 2.4 代碼生成 2.5 生成單測 2.6 更多 AI 應用/插件 AIPRM Voice Control for Ch…

2023企業微信0day漏洞復現以及處理意見

2023企業微信0day漏洞復現以及處理意見 一、 漏洞概述二、 影響版本三、 漏洞復現小龍POC檢測腳本: 四、 整改意見 免責聲明:請勿利用文章內的相關技術從事非法測試,由于傳播、利用此文所提供的信息或者工具而造成的任何直接或者間接的后果及損失&#x…

論文閱讀:《Waymo Public Road Safety Performance Data》

文章目錄 1 背景2 方法2.1 數據來源2.2 碰撞數據 3 碰撞事件分析4 討論 1 背景 這篇文章是講waymo道路安全性能數據分析的,主要想表達的是waymo自動駕駛系統在安全上面的出色表現,以向政府、大眾提高自己產品的公信力。 這篇文章分析的數據是自從2019年到…

Django圖書商城系統實戰開發 - 實現會員管理

Django圖書商城系統實戰開發 - 實現會員管理 在Django圖書商城系統中,會員管理是一個重要的功能模塊。該模塊包括會員信息的展示、編輯和刪除等功能。以下是實現會員管理功能的詳細步驟和代碼示例。 步驟一:設計數據庫模型 首先,我們需要設…

Transactional注解的方法中數據庫和redis的回滾問題

問題背景:如果某個方法加了Transactional注解,而這個方法中既包括mysql事務又包括redis事務,那么如何做到mysql和redis都回滾? mysql事務支持回滾,但redis的事務是不支持回滾的,但它倆都在當前方法的事務里…

MySQL高階知識點(一)事務的并發問題和隔離級別

簡單來說,事務就是要保證一組數據庫操作,要么全部成功,要么全部失敗。 在 MySQL 中,事務支持是在引擎層實現的。 MySQL 是一個支持多引擎的系統,但并不是所有的引擎都支持事務。 如 MySQL 原生的 MyISAM 引擎就不支持…

MBR400100CT-ASEMI肖特基模塊MBR400100CT

編輯:ll MBR400100CT-ASEMI肖特基模塊MBR400100CT 型號:MBR400100CT 品牌:ASEMI 封裝:M2 正向電流:400A 反向電壓:100V 引線數量:2 芯片個數:2 芯片尺寸:102MIL…

Django 初級指南:創建你的第一個 Django 項目

Django 是一個強大的 Python Web 框架,它采用了“模型-視圖-控制器”(MVC)的設計模式,能夠幫助開發者快速、簡潔地創建高質量的 Web 應用。這篇文章將引導你創建你的第一個 Django 項目。 一、安裝 Django 首先,你需…

OpenCV-Python中的圖像處理-霍夫變換

OpenCV-Python中的圖像處理-霍夫變換 霍夫變換霍夫直線變換霍夫圓環變換 霍夫變換 霍夫(Hough)變換在檢測各種形狀的技術中非常流行,如果要檢測的形狀可以用數學表達式描述,就可以是使用霍夫變換檢測它。即使要檢測的形狀存在一點破壞或者扭曲也是可以使…

【1day】復現大華智慧園區綜合管理平臺SQL注入漏洞

目錄 一、漏洞描述 二、影響版本 三、資產測繪 四、漏洞復現 一、漏洞描述 大華智慧園區綜合管理平臺是一個集智能化、信息化、網絡化、安全化為一體的智慧園區管理平臺,旨在為園區提供一站式解決方案,包括安防、能源管理、環境監測、人員管理、停車管理等多個方面。大華…

【C/C++】關于C++構造函數成員初始化

文章目錄 1. 第一種方式2. 第二種方式3. 優劣 1. 第一種方式 成員初始化列表。在構造函數的參數列表后使用冒號分割的一組初始化語句。 class my_class { public:my_class(int a, int b): m_x(a), m_y(b) {/*....*/} private:int m_x;int m_y; };2. 第二種方式 在構造函數內…

【skynet】skynet 服務間通信

寫在前面 skynet 服務之間有自己的一套高效通信 API 。本文給出簡單的示例。 文章目錄 寫在前面準備工作編寫代碼運行結果 準備工作 首先要有一個編譯好,而且工作正常的 skynet 。 編寫代碼 在 skynet/example 目錄編寫一個配置文件,兩個代碼文件。 …

(7)(7.1) 使用航點和事件規劃任務

文章目錄 前言 7.1.1 設置Home位置 7.1.2 視頻:制作并保存多路點任務 7.1.3 視頻:加載已保存的多航點任務 7.1.4 使用說明 7.1.5 提示 7.1.6 自動網格 7.1.7 任務指令 7.1.8 任務結束 7.1.9 任務重置 7.1.10 MIS_OPTIONS 7.1.11 任務再出發 …

renderdoc源碼分析(四) 重放

//TODO 先貼下飛書文檔,后續找時間再整理到這 Docs

04 - 分離頭指針情況、理解HEAD和branch

查看所有文章鏈接:(更新中)GIT常用場景- 目錄 文章目錄 1. 分離頭指針2. HEAD和branch2.1 branch的一些操作2.2 HEAD 1. 分離頭指針 分離頭指針detached HEAD是一種HEAD指針指向了某一個具體的 commit id,而不是分支的情況。 切換…

springboot 使用zookeeper實現分布式ID

添加ZooKeeper依賴&#xff1a;在pom.xml文件中添加ZooKeeper客戶端的依賴項。例如&#xff0c;可以使用Apache Curator作為ZooKeeper客戶端庫&#xff1a; <dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</arti…

Faiss在windows下安裝和使用

pip install faiss-cpu 直接安裝可能出現問題&#xff1a; error: command swig.exe failed: No such file or directory 安裝swig即可解決&#xff0c;安裝方式

學習Vue:Event Bus 與 Provide/Inject

在Vue.js中&#xff0c;兄弟組件通信是指兩個沒有直接父子關系的組件之間如何進行數據傳遞和通信。為了實現兄弟組件通信&#xff0c;我們可以借助Vue的一些特性&#xff0c;如Event Bus和Provide/Inject。讓我們一起來深入了解這些方法&#xff0c;并通過實例來看看如何實現兄…

服務器如何防止cc攻擊

對于搭載網站運行的服務器來說&#xff0c;cc攻擊應該并不陌生&#xff0c;特別是cc攻擊的攻擊門檻非常低&#xff0c;有個代理IP工具&#xff0c;有個cc攻擊軟件就可以輕易對任何網站發起攻擊&#xff0c;那么服務器如何防止cc攻擊?請看下面的介紹。 服務器如何防止cc攻擊&a…

希爾排序【Java算法】

文章目錄 1. 概念2. 思路3. 代碼實現 1. 概念 希爾排序也是一種插入排序&#xff0c;它是簡單插入排序經過改進之后的一個更高效的版本&#xff0c;也稱為縮小增量排序。希爾排序在數組中采用跳躍式分組的策略&#xff0c;通過某個增量將數組元素劃分為若干組&#xff0c;然后分…