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…