kube-burner¶
kube-burner 可以用于创建大量 namespace、deployments、daemonsets、jobs 等,评估 API Server、scheduler 等承载能力。
kubernetes 集群性能评测
目标与衡量指标
- 目标(示例):在 X 节点集群上,验证可支持 N 个并发请求 / 秒,P95 响应时间 < 200 ms,CPU 使用率 < 70%,不发生 OOM 或容器重启。
- 关键指标(必收):
- 吞吐(requests/sec)
- 响应时延分位数(P50/P90/P95/P99)
- 错误率(5xx/4xx)
- 节点与Pod资源:CPU、内存、磁盘 I/O、网络带宽
- kube-apiserver 延迟与 QPS
- kubelet / cAdvisor 指标(容器级)
- 调度延迟、重启次数、OOM、eviction
- 系统层:load average、interrupts、context switches
- 网络丢包、连接数、socket time_wait 等
推荐工具(组合使用)
- 负载生成:k6(HTTP/gRPC/JS 脚本化)、wrk2、vegeta
- 集群级负载:kube-burner(模拟大量资源对象、job、ingress 等)、kubemark(controller/scale tests)
- 容器/节点压力:stress-ng、stress
- 网络压测:iperf3(节点间带宽)
- 监控/采集:Prometheus + Grafana + node-exporter + kube-state-metrics + cAdvisor + kubelet metrics-server
- 分布式追踪:Jaeger / Zipkin(排查延迟来源)
- 日志:ELK/EFK 或 Loki
- 可视化/分析:Grafana dashboard、benchmarks csv、k6 report HTML
- 负载测试报告:k6 cloud/local HTML / jq + csv
压测环境准备(必做)
- **在非生产环境**搭建与线上尽量接近的集群(节点规格、网络、存储类型、CNI、服务网格是否开启都应一致)。
- 部署完整监控栈(Prometheus + Grafana,node-exporter,kube-state-metrics)。保证抓取间隔(scrape_interval)为 10s 或更低(如 5s)以便捕获峰值。
- 关闭自动伸缩(HPA/cluster-autoscaler)或根据测试需要明确开启/关闭(做伸缩测试时才开启)。
- 确认调度策略、Pod QoS(requests/limits)、StorageClass 性能模式、CNI MTU、内核参数(net.ipv4.tcp_tw_recycle 已废弃,注意 tcp_tw_reuse 等)。
- 准备一个“控制机”(可以是开发机或专用压测机)来运行 k6/wrk/kube-burner,尽量不要在集群节点上跑负载生成器以免污染监测数据。
测试设计流程(逐步)
- 基线测试(低负载):小并发(例如 10-50 并发),观察系统稳定性/启动指标,确认监控正确。
- 线性攀升(ramp-up):每 1~5 分钟提高 QPS,直至到达目标或出现异常(延迟突变、错误率上升)。记录临界点。
- 稳态测试(sustain):在目标 QPS/并发下运行 10-30 分钟(或更长),观察资源与错误。收集 P95/P99。
- 压力测试(stress):继续增加直到系统失效(用于找瓶颈)。
- 恢复测试(soak):在中等到高负载下运行数小时或一天,观察内存泄露、连接泄漏、慢性错误。
- 伸缩测试:开启 HPA 或 cluster-autoscaler,观察伸缩触发时间与效果。
- 网络与存储极限测试:使用 iperf3 和 fio(对于 PV)进行 I/O/带宽测试。
- 混合负载与故障注入:用 chaos 工具(如 LitmusChaos)模拟节点故障、网络抖动、磁盘满等,观察可用性与恢复。
一、前置条件¶
1.1 prometheus¶
1.2 elasticsearch¶
1.3 binary¶
BINARY_VERSION=v1.17.7
wget https://github.com/kube-burner/kube-burner/releases/download/${BINARY_VERSION}/kube-burner-${BINARY_VERSION}-linux-x86_64.tar.gz
tar xzf kube-burner-${BINARY_VERSION}-linux-x86_64.tar.gz
mkdir -p ~/bin && mv kube-burner ~/bin/
kube-burner version
kube-burner help
Kube-burner 🔥
Tool aimed at stressing a kubernetes cluster by creating or deleting lots of objects.
Usage:
kube-burner [command]
Available Commands:
check-alerts Evaluate alerts for the given time range
completion Generates completion scripts for bash shell
destroy Destroy old namespaces labeled with the given UUID.
health-check Check for Health Status of the cluster
help Help about any command
import Import metrics tarball
index Index kube-burner metrics
init Launch benchmark
measure Take measurements for a given set of resources without running workload
version Print the version number of kube-burner
Flags:
-h, --help help for kube-burner
--log-level string Allowed values: debug, info, warn, error, fatal (default "info")
Use "kube-burner [command] --help" for more information about a command.
二、workloads¶
git clone https://github.com/kube-burner/kube-burner.git
cd examples/workloads/
# 修改里面引用的镜像为私有
2.1 api-intensive¶
# hub.8ops.top/bitnami/nginx:1.23.4
# hub.8ops.top/google_containers/pause:3.10.1
# init
kube-burner init -c api-intensive.yml --uuid api-intensive
# destroy
kube-burner destroy --uuid api-intensive