如何对Kubernetes API服务器进行负载测试?Fluentd日志采集场景相关问询
测试实施方法
前置准备
- 测试环境配置尽可能和生产环境对齐:包括APIServer实例规格、etcd存储配置、集群节点规模、已有工作负载密度,避免测试结果出现不可控偏差
- 部署和生产完全同配置的Fluentd测试版本,保持采集路径、字段过滤规则、输出目标、K8s元数据 enrichment 开关等配置完全一致,Fluentd的APIServer调用大多来自元数据补全逻辑,这一配置对测试结果影响极大
- 测试前清空无关流量变量:暂停集群内CICD任务、HPA/VPA自动扩缩容规则、其他批量操作类工作负载,排除非Fluentd请求的干扰
测试步骤
- 先做基准测试:关闭所有Fluentd采集任务,持续30分钟记录APIServer各项指标,作为空白对照数据
- 梯度加压测试:先启动1/3规模的Fluentd Pod,运行15分钟记录指标;再扩容到2/3规模运行15分钟;最后开满全量Fluentd Pod,持续运行1小时以上,覆盖日常峰值采集场景
- 极端场景验证:模拟Fluentd批量重启、节点宕机重建的场景,观测此时APIServer的负载波动,验证极端情况下的稳定性
目标指标统计方法
API调用频次
- 直接通过APIServer自带的metrics接口抓取,接口路径为
/metrics,对应指标为apiserver_request_total,可通过component="fluentd"标签过滤出Fluentd发起的所有请求,按时间维度聚合即可得到调用频次 - 已部署Prometheus的环境可直接用PromQL统计:
sum(rate(apiserver_request_total{component="fluentd"}[5m]))即可得到5分钟窗口内Fluentd的平均请求QPS
CPU使用率
- APIServer进程CPU使用率可通过Prometheus指标
container_cpu_usage_seconds_total{pod=~"kube-apiserver.*", namespace="kube-system"}做rate计算得到,也可直接登录APIServer所在节点用top命令查看实时值 - 如需统计Fluentd自身的CPU消耗,可过滤Fluentd Pod对应的同名指标计算
内存占用
- APIServer内存占用对应Prometheus指标为
container_memory_working_set_bytes{pod=~"kube-apiserver.*", namespace="kube-system"},也可直接执行命令kubectl top pods -n kube-system | grep kube-apiserver查看实时值 - 统计时需同时观测内存波动趋势,排查是否存在内存持续上涨的泄漏问题
K8s API Server负载核心观测指标
- 请求维度
- 总体QPS:所有客户端的请求总频率,需确认负载下数值未超过APIServer设计承载阈值
- 请求延迟:重点观测P95、P99请求延迟,可通过
apiserver_request_duration_seconds_bucket指标统计,延迟超过1s的请求占比过高即说明负载过高 - 错误码占比:统计4xx、5xx错误请求占比,尤其是503(服务不可用)、504(请求超时)的出现频率,出现上述错误码即可判定APIServer已过载
- 资源维度
- CPU使用率:单实例CPU使用率长期超过70%就需要考虑扩容
- 内存占用:内存占用持续超过实例内存限额的80%需要重点关注,避免出现OOMKill
- etcd延迟:APIServer核心操作强依赖etcd,需同时观测
etcd_disk_wal_fsync_duration_seconds、etcd_network_peer_round_trip_time_seconds等指标,避免etcd成为性能瓶颈
- 队列维度
- 请求队列长度:对应指标
apiserver_request_queue_length,队列持续堆积说明APIServer处理能力不足 - 限流触发次数:对应指标
apiserver_throttled_requests_total,指标有值即说明已触发APIServer限流机制,负载超出承载上限
- 请求队列长度:对应指标
内容的提问来源于stack exchange,提问作者Koala
相关产品推荐
相关产品推荐

