首页/云/Kubernetes 速查/API 请求被限流(429)
集群运维与排障54 条

API 请求被限流(429)

apiserver 具备流控与优先级机制:短时 429 多来自某个客户端并发过高,持续 429 说明请求量已超出集群处理能力。

Kubernetes 速查云更新于 2026-10-13

429 说明什么

API Server 内置优先级与公平性机制,会在过载时主动拒绝请求并返回 429。短时出现通常意味着某个客户端并发太高,稍后重试即可;持续出现则说明集群请求总量已超出控制面处理能力,需要从请求来源侧治理,而不是只调大服务端上限。

基本信息

适用平台Kubernetes 1.20+(优先级与公平性默认开启)
报错形式请求返回 429 Too Many Requests,客户端日志出现限流提示
观察入口apiserver 指标、apiserver 日志、客户端握手限速参数
常见恢复退避重试、降低并发、拆分高频列表请求
本质保护控制面不被瞬时压力拖垮的降级手段

请求量异常的常见来源

  • 控制器或脚本对全量资源列表轮询,间隔设置得过短
  • 多个组件各自维护全量缓存,watch 断开后瞬间重新建链拉取
  • 发布流水线在短时间内并发创建大量资源
  • 监控采集器以过高的频率读取 apiserver 指标
  • 客户端默认并发较低却开了大量实例,叠加后压力成倍放大

观察限流

观察限流
kubectl get --raw /metrics | grep -E 'apiserver_flowcontrol_rejected_requests_total|apiserver_flowcontrol_current_executing_seats'  # 看被拒请求与被占用的执行位
kubectl logs -n kube-system kube-apiserver-node1 | grep -i '429' | tail -20   # 服务端侧限流记录
kubectl get --raw /healthz?verbose | head -20                # 控制面自检
kubectl get pods -n kube-system | grep apiserver             # 确认副本数与重启情况

指标与现象读法

观察项含义判断方向
被拒请求数增长有请求没被处理结合来源定位是哪类客户端在制造压力
执行位持续占满控制面正在满负荷工作说明是总量问题,不只是单个客户端
请求延迟上升排队时间变长负载已接近上限
某客户端高频列表重复拉取全量数据优先改造该客户端,改用增量监听
客户端通常自带请求限速与突发额度参数,默认值偏保守。控制器密集部署时往往不是服务端不够,而是客户端自身限速过低导致处理变慢,需要连同服务端指标一起看。
只调大服务端并发上限而不治理来源,会把压力从入口推到 etcd 与磁盘,控制面故障会来得更突然、更难恢复。

易错点

  • 直接提高服务端并发上限:不定位来源等于把排队问题换成 etcd 压力问题
  • 把所有 429 都归因于集群太小:集群内自带的组件与第三方控制器的高频轮询往往是主要来源
  • 客户端不区分冲突与限流:429 需要退避重试,当成普通失败直接快速重试会加剧拥塞
  • watch 断线后立即无退避重建:大量客户端同时重连时,瞬时请求峰值远高于日常水平

数据来源与参考

  • Kubernetes 官方文档 · API 优先级与公平性(APF)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌