client-go 的 QPS 和 Burst 限速
1. 什么是 QPS 和 Burst ?
在 kubernetes client-go 中,QPS 和 Burst 是用于控制客户端与 Kubernetes API 交互速率的两个关键参数:
QPS (Queries Per Second)
定义:表示每秒允许发送的请求数量,即限速器的平滑速率。
用途:用来控制客户端与 API Server 的持续请求速率。
场景:适用于需要长时间维持均匀的 API 调用的情况。
Burst
定义:表示瞬时允许发送的最大请求数量,即限速器的突发容量。
用途:允许在短时间内发送的请求数量上限,适用于突发性调用场景。
场景:例如,客户端初始化时,需要快速获取大量资源。
2. 实验验证
可以通过编写代码,发送大量 API 请求来验证 QPS 和 Burst 的行为。以下是一个实验示例:
package mainimport ("context""flag""fmt""log""sync""time"metav1 "k8s.io/apimachinery/pkg/apis/meta/v1""k8s.io/client-go/kubernetes""k8s.io/client-go/tools/clientcmd"
)func main() {// 加载 kubeconfigkubeconfig := flag.String("kubeconfig", "~/.kube/config", "Path to kubeconfig file")flag.Parse()config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)if err != nil {log.Fatalf("Failed to load kubeconfig: %v", err)}// 设置 QPS 和 Burstconfig.QPS = 5.0 // 每秒 5 个请求,也是默认设置config.Burst = 10 // 突发允许 10 个请求,也是默认设置// 创建客户端clientset, err := kubernetes.NewForConfig(config)if err != nil {log.Fatalf("Failed to create clientset: %v", err)}// 统计开始时间startTime := time.Now()// 使用 WaitGroup 追踪请求完成var wg sync.WaitGrouptotalRequests := 50wg.Add(totalRequests)// 发送大量请求for i := 0; i < totalRequests; i++ {go func(i int) {defer wg.Done()_, err := clientset.CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{})if err != nil {log.Printf("Request %d failed: %v", i, err)} else {log.Printf("Request %d succeeded", i)}}(i)}wg.Wait()fmt.Printf("Total time taken: %v\n", time.Since(startTime))
}
配置 QPS 和 Burst:
设置 QPS = 5,表示每秒最多发送 5 个请求。
设置 Burst = 10,允许在瞬时突发时最多发送 10 个请求。
当发生客户端限流时,会出现类似如下输出:
2025/01/10 15:01:50 Request 32 succeeded
I0110 15:01:50.468917 3083 request.go:729] Waited for 1.19372275s due to client-side throttling, not priority and fairness, request: GET:https://127.0.0.1:63092/api/v1/pods
2025/01/10 15:01:50 Request 33 succeeded
当发生客户端限流时,请求排队,实际完成时间会被延长。
实验结果:
当设置 QPS = 5,Burst = 10 时,请求全部成功,完成耗时 8s
当设置 QPS = 1,Burst = 2 时,请求全部成功,完成耗时 48s
调整建议
如果需要高频请求,可适当增大 QPS 和 Burst,避免客户端过度限流。
同时,合理设置参数,可以避免客户端过高的并发负载影响集群稳定性。
源码机制
client-go 使用令牌桶进行速率限制,桶容量为 burst 大小,按照每秒生成 QPS 个令牌的速率产生令牌(不会实际启动协程生成令牌,而是根据时钟计算),只有拿到令牌才能请求 kube-apiserver,如下图所示:

reference: client-go QPS、Burst和令牌桶
相关文章:
client-go 的 QPS 和 Burst 限速
1. 什么是 QPS 和 Burst ? 在 kubernetes client-go 中,QPS 和 Burst 是用于控制客户端与 Kubernetes API 交互速率的两个关键参数: QPS (Queries Per Second) 定义:表示每秒允许发送的请求数量,即限速器的平滑速率…...
使用docker-compose安装Redis的主从+哨兵模式
必看 本文是一主二从一哨兵模式;其余的单机/集群/多哨兵模式的话,不在本文... 本文的环境主要是:应用app在本地,redis在云服务器上; 图解 图如下:这个图很重要; 之所以要这样画图࿰…...
数据结构(Java版)第七期:LinkedList与链表(二)
专栏:数据结构(Java版) 个人主页:手握风云 一、链表的实现(补) 接上一期,下面我们要实现删除所有值为key的元素,这时候有的老铁就会想用我们上一期中讲到的remove方法,循环使用remove方法&#…...
ant-design-vue 1.X 通过id获取a-input组件失败
1.ant-design-vue 1.X 问题描述 当我在a-form组件中,以v-decorator指令绑定表单组件时,无法根据我设置的verify-code-input获取元素 <a-input type"text" id"verify-code-input" class"paIpt":placeholder"$t(…...
Flutter:吸顶效果
在分页中,实现tab吸顶。 TDNavBar的screenAdaptation: true, 开启屏幕适配。 该属性已自动对不同手机状态栏高度进行适配。我们只需关注如何实现吸顶。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import p…...
MATLAB语言的数据类型
MATLAB语言的数据类型详解 MATLAB(矩阵实验室)是一种广泛应用于科学计算、数据分析、算法开发及模型构建的高性能语言和环境。MATLAB的强大之处不仅在于其丰富的数学工具和可视化功能,还有其灵活多变的数据类型。这篇文章将详细介绍MATLAB中…...
priority_queue优先队列
目录 1. 最短路径算法(Dijkstra算法) 应用场景: 优先队列的作用: 2. 最小生成树算法(Prim算法) 应用场景: 优先队列的作用: 3. 哈夫曼编码(Huffman Coding&#x…...
HarmonyOS 鸿蒙Next 预览pdf文件
HarmonyOS 鸿蒙Next 预览pdf文件 1、使用filePreview 2、使用web组件 在线pdf(网址是直接下载的,不是直接可以预览的),先下载再预览 import media from ohos.multimedia.media;import web_webview from ohos.web.webview;import …...
vscode开启调试模式,结合Delve调试器调试golang项目详细步骤
1.前期准备 (1).在vs code中的扩展程序中搜索并安装Go扩展程序 (2).安装 Delve 调试器 go install github.com/go-delve/delve/cmd/dlvlatest (3).打开vs code的命令面板,输入Go: Install/Update Tools,并单击该命令执行,安装或更新Go语…...
身份鉴权(PHP)(小迪网络安全笔记~
免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!!! 附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,…...
【git】-初始git
一、什么是版本控制? 二、Git的安装 三、掌握Linux常用命令 四、Git基本操作 1、提交代码 2、查看历史提交 3、版本回退 一、什么是版本控制? 版本控制是一种用于记录文件或项目内容变化的系统。它通过版本标识和版本历史记录来管理不同版本&#…...
CSS 盒模型
盒模型 CSS盒模型是网页布局的核心概念之一,它描述了网页元素的物理结构和元素内容与周围元素之间的关系。根据W3C规范,每个HTML元素都被视为一个矩形盒子,这个盒子由以下四个部分组成: 内容区(Content areaÿ…...
[0405].第05节:搭建Redis主从架构
Redis学习大纲 一、3主3从的集群配置: 1.1.集群规划 1.分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下: 2.每组是一主一从&#x…...
6 分布式限流框架
限流的作用 在API对外互联网开放的情况下,是无法控制调用方的行为的。当遇到请求激增或者黑客攻击的情况下,会导致接口占用大量的服务器资源,使得接口响应效率的降低或者超时,更或者导致服务器宕机。 限流是指对应用服务进行限制…...
sosadmin相关命令
sosadmin命令 以下是本人翻译的官方文档,如有不对,还请指出,引用请标明出处。 原本有个对应表可以跳转的,但是CSDN的这个[](#)跳转好像不太一样,必须得用html标签,就懒得改了。 sosadmin help 用法 sosadm…...
关于大数据的基础知识(四)——大数据的意义与趋势
成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于大数据的基础知识(四&a…...
【EI,Scopus检索 | 往届均已检索见刊】第四届智能系统、通信与计算机网络国际学术会议(ISCCN 2025)
重要信息: 大会官网:更多详情【论文投稿】 截稿时间:以官网信息为准 大会时间:2025年2月21-23日 接受/拒稿通知:投稿后3-5个工作日内 收录检索:EI,Scopus 出版信息: 本会议所有…...
smplx blender插件笔记
目录 liunx安装: liunx安装: pip install smplx 这个创建模型报错 SMPL_blender_addon...
【算法】移除元素
今天讲的是力扣题目的题解: 力扣题目: 72.移除元素 题目描述: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不…...
【后端面试总结】设计一个分布式锁需要考虑哪些东西
分布式锁是我们在分布式场景中经常用到的一种技术,在后端面试中也是出镜率很高,那么我们设计分布式锁的时候应该从那几方面去考虑呢 实现分布式锁需要考虑的点 设置超时时间 设置超时时间的目的是为了避免这个场景:进程A拿了锁,…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
