Hey+K8s实战:在Pod内运行负载测试压测集群内部服务
HeyK8s实战在Pod内运行负载测试压测集群内部服务【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey本文介绍如何使用轻量级 HTTP 负载生成器hey在 Kubernetes Pod 内运行压力测试。hey 是一个用 Go 编写的 HTTP 负载测试工具HTTP load generator常作为 ApacheBenchab的替代品支持 HTTP/2、按 QPS 限速和 CSV 输出。把 hey 放进集群内部是压测集群内部服务最快、最贴近真实流量的方式。为什么要在 Pod 内做负载测试传统做法是在集群外的机器上跑压测工具请求要经过公网或网关存在三个问题网络路径失真外网带宽、NAT、DNS 都会干扰结果测出的延迟并不等于真实调用方看到的延迟无法访问内部地址K8s 内部服务svc.cluster.local在集群外根本解析不到资源难控制集群外压测机往往配置固定不好按测试需求调整并发而把 hey 部署成一个 Pod 后压测流量与真实用户请求走完全相同的网络路径Service → Endpoint → Pod结果才真正可信。 适合场景新服务上线前验收、网关扩容评估、依赖链路数据库/缓存瓶颈排查。认识 hey极简的 HTTP 压测工具hey 的核心非常精简入口在 hey.go所有压测参数都通过命令行 flag 控制-n总请求数默认 200-c并发 worker 数默认 50-z持续时间如30s指定后忽略-n-q每个 worker 的 QPS 限速-o csv输出 CSV 格式指标方便接入 CI完整参数说明可参考 README.md。一键构建 hey 镜像仓库自带 Dockerfile采用两阶段构建先用golang:1.15编译出静态二进制最终镜像基于scratch只有几 MB非常适合做临时压测 Pod# 最终阶段极小镜像直接以 hey 为入口 FROM scratch COPY --frombuild /go/bin/hey /hey ENTRYPOINT [/hey]构建并推送到你的镜像仓库docker build -t registry.example.com/loadtest/hey:latest . docker push registry.example.com/loadtest/hey:latest在 Pod 内压测集群内部服务1. 启动压测 Pod使用kubectl run一条命令即可拉起 hey把目标换成集群内部服务地址服务名.命名空间.svc.cluster.localkubectl run load-test --rm -it --restartNever \ --imageregistry.example.com/loadtest/hey:latest \ -- hey -n 1000 -c 50 \ http://my-api.default.svc.cluster.local:8080/health--rm表示测试结束后自动删除 Pod-it让你实时看到输出。2. 常用压测姿势速查表目的命令示例默认快速摸底hey http://my-api.default.svc.cluster.local:8080/api固定时长 30 秒hey -z 30s http://my-api...高并发100 并发、1000 请求hey -n 1000 -c 100 http://my-api...限速压测每 worker 10 QPShey -q 10 -c 5 -z 30s http://my-api...POST 接口压测hey -m POST -d a1b2 http://my-api...携带鉴权头hey -H Authorization: Bearer token http://my-api...启用 HTTP/2hey -h2 http://my-api...导出 CSV 指标hey -o csv -z 60s http://my-api...3. 解读结果hey 跑完后会打印请求数、状态码分布、吞吐量req/s以及延迟的分位数统计如 10/25/50/75/90/99/100 百分位。重点关注P99 延迟长尾情况判断服务是否在高并发下劣化非 2xx 状态码占比出现 5xx 通常意味着服务已触达瓶颈吞吐量曲线结合-z持续压测观察是否随时间下降CSV 输出-o csv的每一行包含本次压测的各分位延迟与 QPS可直接丢进脚本做版本间对比。实战注意事项控制压测规模先用小并发如-c 10确认链路通畅再逐步加大用-q限速可以避免瞬间打爆依赖及时清理务必加--rm或用独立命名空间如loadtest避免压测 Pod 残留占用资源⚖️资源隔离生产集群建议通过节点亲和把 hey Pod 调度到专用节点避免与业务 Pod 抢 CPU注意安全压测内部服务时用-H携带正确的服务间鉴权头防止被网关 403总结把 hey 塞进一个 Pod是 Kubernetes 里成本最低、保真度最高的集群内压测方案几 MB 的镜像、一条kubectl run命令、分钟级拿到分位延迟报告。配合 README.md 中的参数说明你可以快速完成从服务能不能扛住到瓶颈在哪里的完整验证。【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考