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/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2023-02-12 查询正在执行的SQL的数据库名和表名
2023-02-12 fio测试IOPS