k8s 1.23.6版本apiserver list-watch原理機制

Kubernetes 1.23.6 版本中,API Server 的 **List-Watch 機制** 是集群狀態同步的核心機制,其設計目標是高效、實時地將資源變更通知到各組件(如 kubelet、controller-manager等)。以下是其詳細原理和工作機制:

1. 核心概念

  1. List:客戶端(如 kubelet)通過 `List()` 從 API Server 獲取資源的全量數據(首次同步或斷線重連時使用)。
  2. Watch:客戶端通過 `Watch()` 監聽資源的增量變更(如 Pod 創建、更新、刪除)。
  3. ResourceVersion:每個資源對象的版本號,由 etcd 的 MVCC 機制生成,用于標識數據的新舊狀態。

2. 工作機制

(1)List 階段(全量同步)

1. 客戶端發起 List 請求

???pods, err := client.CoreV1().Pods("").List(ctx, metav1.ListOptions{})

???-首次請求時,`ResourceVersion` 為 `0`,表示獲取最新數據。

???- API Server 從 **etcd** 查詢全量數據,并返回給客戶端。

2. 關鍵行為

???- API Server 可能從 **Watch 緩存** 返回數據(若緩存命中)。

???-客戶端記錄返回的 `ResourceVersion`,作為后續 Watch 的起始點。

(2)Watch 階段(增量監聽)

1. 客戶端發起 Watch 請求 ?

??????

???watcher, err := client.CoreV1().Pods("").Watch(ctx, metav1.ListOptions{

???????ResourceVersion: "12345", // 從 List 階段獲取的版本號

???})

???- 基于 `ResourceVersion` 監聽此版本之后的變更。

2. API Server 處理流程 ?

???-緩存查詢:優先從內存中的 **Watch 緩存** 返回事件(由 `--default-watch-cache-size` 控制緩存大小)。 ?

???- etcd 監聽:若緩存不命中,則通過 etcd 的 Watch API 監聽 `/registry/pods` 等鍵前綴的變更。 ?

???-事件推送:通過 **HTTP 分塊傳輸(chunked encoding)** 持續向客戶端推送事件流。

3. 事件類型 ?

???- `ADDED`(新增資源)、`MODIFIED`(修改資源)、`DELETED`(刪除資源)、`BOOKMARK`(心跳事件,攜帶最新 `ResourceVersion`)。

(3)連接維護與故障恢復

- 超時處理: ?

??- Watch 連接默認由 `--min-request-timeout`(默認 1800s)控制超時時間。 ?

??- 客戶端需處理連接中斷,并通過新的 `List+Watch` 重新同步。 ?

- 歷史版本壓縮: ?

??- 若客戶端請求的 `ResourceVersion` 已被 etcd 壓縮(超出 `--etcd-compaction-interval`),API Server 返回 `410 Gone`,強制客戶端全量同步。???

3. 關鍵優化設計(1.23.6 版本特性)

(1)Watch 緩存

- 作用:緩存最近事件,減少對 etcd 的直接訪問。 ?

- 調優參數: ?

??- `--default-watch-cache-size`:默認值 `100`,建議在大集群中調大(如 `1000`)。 ?

??- `--watch-cache-sizes`:按資源類型定制緩存大小(如 `pods=5000`)。 ?

(2)Bookmark 機制

- 用途:定期發送 `BOOKMARK` 事件,攜帶最新 `ResourceVersion`,避免客戶端因長時間無事件而超時。 ?

- 參數:`--watch-bookmark-frequency`(默認 1m 發送一次)。

(3)分頁與限流

- List 分頁:大容量 List 請求自動分頁,由 `--max-requests-inflight` 控制并發。 ?

- Watch 限流:通過 `--max-watch-connections` 限制總 Watch 連接數。

4. 性能影響

(1)API Server 負載

-?內存占用:每個 Watch 連接約占用 **100KB 內存**(參考測試數據)。 ?

- CPU開銷:事件序列化與流式傳輸消耗 CPU 資源。

(2)etcd 負載

- 讀壓力:List 請求直接訪問 etcd,可能觸發大范圍掃描。 ?

- 寫放大:頻繁的資源變更導致 Watch 事件激增。

(3)監控指標

5. 故障場景與調優建議

(1)Watch頻繁斷開

- 原因:網絡問題、etcd 歷史版本壓縮。 ?

- 解決:客戶端實現重試邏輯,重新發起 `List+Watch`。

(2)高延遲或事件丟失

- 調優參數: ?

??# API Server 啟動參數示例

??--default-watch-cache-size=2000

??--watch-cache-sizes=pods=5000

??--etcd-compaction-interval=10m ?# 調整 etcd 壓縮間隔

(3)大規模集群建議

- 為高頻資源(如 Pod、ConfigMap)單獨設置較大的 Watch 緩存。 ?

- 監控 `apiserver_cache_miss_total`,確保緩存命中率 >90%。

6. 與其他版本的差異

- 1.23.6 特性: ?

??- 支持 `BOOKMARK` 機制,減少不必要的全量同步。 ?

??- Watch 緩存優化,支持按資源類型動態調整大小。 ?

- 與 1.22 對比: ?

??- 1.23.6 進一步降低了 etcd 的 Watch 事件處理延遲。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909912.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909912.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909912.shtml

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

相關文章

Linux基本指令篇 —— mkdir指令

mkdir是Linux和Unix-like系統中用于創建目錄的基本命令,全稱為"make directory"。下面將詳細介紹這個命令的用法、選項和實際應用。 目錄 一、基本語法 二、基本用法 創建單個目錄 創建多個目錄 三、常用選項 -p 或 --parents -m 或 --mode -v 或 …

聊聊GPIO 工作模式

嵌入式開發中,GPIO(General-Purpose Input/Output)是最基礎也最常用的功能模塊之一。你可以把它想象成微控制器伸出來的無數根“手腳”:既可以用它輸出信號去點亮LED、驅動外設,也可以用它輸入信號來檢測按鍵、讀取傳感…

DM9000AE+STM32H7在rt-thread中的使用

概述 記錄下DM9000AE在rt-thread上的使用 FMC的配置 rt-thread的網絡設備驅動注冊 硬件連接 16bit總線 掛在FMC_A0 地址0x6000_0000 FMC的配置 FMC是STM32H7的一個外設,通過FMC把DM9000當做一個SRAM來訪問,只需要配置好FCM的時序就可以了。 DM9000…

TiDB 字符串行轉列與 JSON 數據查詢優化知識筆記

一、長字符串行轉列方案 JSON_TABLE 方案(TiDB 5.0 推薦) 通過將逗號分隔字符串轉為 JSON 數組后展開為行: sql SET str ‘a,b,c,d’; SELECT jt.val, jt.pos FROM JSON_TABLE( CONCAT(‘[’, REPLACE(str, ‘,’, ‘“,”’), ‘"]’…

1 Studying《Performance Analysis and Tuning on Modern CPUs》7-11

目錄 Part2. Source Code Tuning For CPU 數據驅動優化 7 CPU Front-End Optimizations 7.1 Machine code layout //機器碼布局 7.2 Basic Block 7.3 Basic block placement 7.4 Basic block alignment 7.5 Function splitting //函數拆分 7.6 Function groupin…

WinUI3入門6:子線程處理UI 窗口加載后執行 獲取和設置控件尺寸 自動生成事件代碼框架

初級代碼游戲的專欄介紹與文章目錄-CSDN博客 我的github:codetoys,所有代碼都將會位于ctfc庫中。已經放入庫中我會指出在庫中的位置。 這些代碼大部分以Linux為目標但部分代碼是純C的,可以在任何平臺上使用。 源碼指引:github源…

中國招聘智能化白皮書:從 “人撐不住“ 到 “AI 破局“ 的底層邏輯革命——AI得賢招聘官第六代AI面試官

一場面試,牽動一家公司的人力系統。 當簡歷數量以千計堆疊、當HR通宵挑燈刷篩選、當面試質量與效率陷入兩難,招聘不再只是流程問題,而成了“組織生存”的關鍵變量。 問題是:靠人,已經撐不住了。 企業招聘正步入前所…

防爆型激光測距傳感器:危險環境中的安全守護者

在石油化工、煤礦開采、核電站等高危工業場景中,爆炸性氣體與粉塵的存在讓傳統測量設備望而卻步。而防爆型激光測距傳感器的出現,猶如為這些領域注入了一劑“安全強心針”,以毫米級精度與防爆雙重保障,重新定義了工業測量的安全邊…

【AI編程】PC的一個提示詞,生成網站首頁,模型gpt4.1 、deepseekv3和claude3.7對比,你更喜歡哪個?

AI提示詞: 角色 你是一位資深的前端工程師、設計師和插畫師 設計風格 優雅的極簡主義美學與功能的完美平衡; 清新柔和的漸變配色與品牌色系渾然一體; 恰到好處的留白設計; 輕盈通透的沉浸式體驗; 信息層級通過微妙的陰影過渡與模塊化卡片布局清晰呈現; 按鈕添加…

跟著AI學習C# Day12

&#x1f4c5; Day 12&#xff1a;LINQ&#xff08;Language Integrated Query&#xff09;基礎 ? 目標&#xff1a; 理解 LINQ 的基本概念和作用&#xff1b;掌握使用 LINQ 查詢集合&#xff08;如 List<T>、Array&#xff09;&#xff1b;學會使用常用 LINQ 方法&am…

ubuntu網絡管理五花八門netplan 、NetworkManager、systemd、networking是什么關系

文章目錄 **1. Netplan&#xff08;網絡配置抽象層&#xff09;****2. NetworkManager&#xff08;動態網絡管理&#xff09;****3. systemd-networkd&#xff08;輕量級網絡管理&#xff09;****4. networking&#xff08;傳統的 ifupdown&#xff09;****5. 它們之間的關系**…

Python爬蟲實戰:研究Twisted框架相關技術

1. 引言 1.1 研究背景與意義 隨著互聯網信息的爆炸式增長,網絡爬蟲作為一種高效獲取和收集網絡信息的技術手段,在搜索引擎優化、市場調研、數據挖掘等領域有著廣泛的應用。傳統的同步爬蟲在面對大量 URL 請求時,由于 I/O 操作的阻塞特性,效率低下,難以滿足實際應用需求。…

內網運行控制四百來個海康威視硬件物聯網定員管控軟件(華為平板電腦版)

內網運行控制四百來個海康威視硬件物聯網定員管控軟件&#xff08;華為平板電腦版&#xff09; 從去年12月至今&#xff0c;自研一套在內網中的華為平板電腦上運行&#xff0c;控制四百來個海康威視硬件的物聯網定員管控軟件&#xff0c;開始上線投入運行。 運行環境為華為平板…

C++ 面向對象特性詳解:繼承機制

&#x1f680; C 面向對象特性詳解&#xff1a;繼承機制全解析——代碼復用與擴展的核心&#xff08;含實戰陷阱&#xff09; &#x1f4c5; 更新時間&#xff1a;2025年6月19日 &#x1f3f7;? 標簽&#xff1a;C | 繼承 | OOP | 面向對象 | 代碼復用 | C基礎 文章目錄 &…

學習日記-day33-6.19

知識點&#xff1a; 1.Spring課程概述 知識點 核心內容 重點 Spring框架概述 輕量級容器框架&#xff0c;封裝復雜邏輯&#xff0c;需理解IOC、AOP等核心機制 容器框架 vs 普通框架、封裝帶來的理解門檻 學習難點 動態代理、反射、注解、IO操作、XML解析、容器&#xf…

網絡編程中操作系統連接隊列管理:Linux TCP隊列深度解析

在現代網絡編程中&#xff0c;操作系統內核扮演著至關重要的角色&#xff0c;負責管理網絡通信的復雜細節&#xff0c;從而為應用程序提供抽象接口。對于服務器應用程序而言&#xff0c;高效處理大量傳入連接請求是確保性能和可靠性的核心。操作系統通過維護專門的隊列機制來管…

StableDiffusion實戰-手機壁紙制作 第一篇:從零基礎到生成藝術品的第一步!

大家好!歡迎來到《StableDiffusion實戰-手機壁紙制作》系列的第一篇! 在這一篇文章里,我們將一起探索如何用StableDiffusion(SD)這款強大的工具,快速制作出炫酷的手機壁紙。 如果你對生成藝術、AI繪圖感興趣,那你一定不能錯過! 你能做什么?你將做什么! 在之前的系…

運維——14.PowerShell 與Linux 、 macOS通用的命令

PowerShell 最初是 Windows 平臺的&#xff0c;但現在已經有了 PowerShell Core&#xff0c;它是跨平臺的&#xff0c;支持 Linux 和 macOS。在 PowerShell Core 中有一些Linux 和 macOS通用的命令。理清楚這些有助于學習多系統命令。 在 Linux/macOS 上使用 PowerShell 完成文…

C#的泛型和匿名類型

一、C#的泛型簡介 泛型是一種允許你延遲編寫類或方法中的數據類型規范&#xff0c;直到你在實際使用時才替換為具體的數據類型【簡單的說&#xff1a;泛型就是允許我們編寫能夠適用于任何數據類型的代碼&#xff0c;而無需為每種特定類型重寫相同的代碼】(T是類型參數&#xff…

日語面試ai助手推薦:高效備考并應對日語面試難題

在準備日語面試的路上&#xff0c;你是否時常感到力不從心&#xff1f;每到模擬面試環節&#xff0c;總怕自己答非所問、用語不地道&#xff0c;或是緊張到腦子一片空白。查找資料時&#xff0c;面對海量的日語問答、面試范本和專業術語&#xff0c;常常分不清輕重緩急&#xf…