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拿了锁,…...
手把手教你用DaVinci Developer和Configurator Pro搞个‘联合作战’环境
实战指南:构建DaVinci工具链协同开发环境 在汽车电子软件开发领域,Vector公司的DaVinci工具链已成为AUTOSAR标准落地的重要支撑。对于需要同时处理软件组件(SWC)设计和ECU配置的团队而言,如何高效协同使用DaVinci Developer和Configurator Pr…...
全志D1s开发板RT-Smart环境搭建:从工具链到烧录的完整实践指南
1. 项目概述与核心价值最近在折腾一块搭载了全志D1s芯片的开发板,目标是在上面跑RT-Smart实时操作系统。这听起来像是一个标准的嵌入式开发流程,但实际操作下来,从环境搭建到第一个程序跑起来,中间踩的坑一个接一个,远…...
Taotoken用量看板与账单追溯为团队开发带来的成本管控体验
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken用量看板与账单追溯为团队开发带来的成本管控体验 对于依赖大模型API进行开发的团队而言,成本的可观测与可控性…...
从零到专业:ComfyUI中文工作流全解析与技术实践
从零到专业:ComfyUI中文工作流全解析与技术实践 【免费下载链接】ComfyUI-Workflows-ZHO 我的 ComfyUI 工作流合集 | My ComfyUI workflows collection 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-Workflows-ZHO 在AI图像生成领域࿰…...
别再死记硬背公式了!用大白话和动图拆解Transformer的注意力机制
用生活场景拆解Transformer:注意力机制就像一场高效会议 想象你正在主持一场跨国团队会议,成员们用不同语言讨论项目进展。作为主持人,你需要快速捕捉每个人的发言重点,判断谁的意见最关键,并协调不同观点之间的关系—…...
从CentOS 7/8老用户视角:快速上手CentOS 9 Stream的3个界面变化与5个安装配置新坑
从CentOS 7/8老用户视角:快速上手CentOS 9 Stream的3个界面变化与5个安装配置新坑 作为一名长期与CentOS打交道的系统管理员,第一次接触CentOS 9 Stream时,那种"熟悉又陌生"的感觉尤为明显。表面上看,它延续了红帽系一贯…...
Yolov5 5.0 vs 6.1:C#部署ONNX模型时,我踩过的版本兼容性大坑
YOLOv5 5.0与6.1版本在C#部署ONNX模型时的关键差异与实战避坑指南 当你在C#环境中尝试部署YOLOv5导出的ONNX模型时,是否遇到过"超出索引"这类令人抓狂的报错?这很可能源于你选择的YOLOv5版本与部署框架之间的兼容性问题。本文将深入剖析YOLOv5…...
Logback彩色日志进阶玩法:自定义颜色规则、区分环境开关,以及文件日志的‘去色’指南
Logback彩色日志进阶实战:从炫彩控制台到严谨生产环境的全链路配置 在软件开发的生命周期中,日志是我们最忠实的伙伴。想象一下深夜调试时,满屏灰白的日志中突然跳出一行醒目的红色ERROR信息——这就是彩色日志赋予我们的"视觉直觉"…...
深入理解 ASP.NET Core 中的 IActionResult
一、从一个问题开始 你写了一个 Web API,有时候要返回数据,有时候要返回 404,有时候要返回 400——这三种情况的返回值类型完全不同,一个 C# 方法怎么能同时返回多种东西? 这就是 IActionResult 存在的根本原因。它的本…...
正交张量、正定张量与材料稳定性:在有限元分析ABAQUS中的实际应用与参数设置
正交张量、正定张量与材料稳定性:在有限元分析ABAQUS中的实际应用与参数设置 当工程师在ABAQUS中遇到材料刚度矩阵非正定警告时,往往意味着仿真结果可能失去物理意义。这种警告背后隐藏着深刻的张量数学原理——正定张量的性质直接决定了材料本构模型的稳…...
