kube-apiserver限流配置

k8s v1.19.0

普通限流

客户端访问kube-apiserver,限流参数有max-mutating-requests-inflight(默认值是200,对应操作类请求)和max-requests-inflight(默认值是400,对应查询类请求),即同一时刻最多处理200个写请求和400个读请求。

staging/src/k8s.io/apiserver/pkg/server/filters/maxinflight.go
WithMaxInFlightLimit函数
1. 初始化空channel。
2. 写入channel 1个值,处理请求,取出1个值。
3. 如果写入channel失败,请求来自system:master组才处理,否则报错请求太多。

分别创建容量为max-requests-inflight和max-mutating-requests-inflight的channel,在channel中有余量情况下才能处理请求,没有余量时直接丢弃,不是每秒限流值。

根据是否为操作类请求,选择channel。

开启APF

API优先级和公平性(APF)解决多个客户端之间请求相互影响的问题,避免某个客户端请求量大导致别的客户端因限流而处理慢。其中,优先级指高优先级请求比低优先级优先处理,公平性指同级别的请求公平处理。
从k8s 1.20开始,APIPriorityAndFairness门控默认开启。

开启APF,kube-apiserver增加启动参数。
- --runtime-config=flowcontrol.apiserver.k8s.io/v1alpha1=true
- --feature-gates=APIPriorityAndFairness=true

APF限流

请求进入kube-apiserver后,根据FlowSchema拆分成流,FlowSchema绑定优先级。
默认FlowSchema和PriorityLevelConfiguration

kube-apiserver总并发量=max- requests-inflight+max-mutating-requests-inflight,总并发量分配到不同优先级。
global-default的flowschema spec,FlowSchema+Distinguisher确定flow。

global-default的prioritylevelconfiguration spec。

参考资料

https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/feature-gates/

 

posted on   王景迁  阅读(307)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2023-02-12 查询正在执行的SQL的数据库名和表名
2023-02-12 fio测试IOPS
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示