使用 Kind 和 k6 对 http-echo 进行 CI 负载测试
发布: (2026年1月10日 GMT+8 11:48)
4 分钟阅读
原文: Dev.to
Source: Dev.to

解决方案概述
- Kind – 创建一个多节点 Kubernetes 集群,以实现真实的测试环境。
- NGINX Ingress Controller – 根据主机名将 HTTP 请求路由到不同的服务。
- k6 – 执行负载测试,提供详细的指标和性能分析。
架构
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ k6 Load Test │───▶│ NGINX Ingress │───▶│ http‑echo apps │
│ │ │ Controller │ │ │
│ - foo.localhost │ │ │ │ - foo service │
│ - bar.localhost │ │ (Port 80/443) │ │ - bar service │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌──────────────────┐
│ Kind Cluster │
│ │
│ - Control plane │
│ - Worker node │
└──────────────────┘
项目结构
kind-http-echo-test/
├── README.md # This documentation
├── kind-config.yaml # Kind cluster configuration
├── k8s/ # Kubernetes manifests
│ ├── http-echo-foo.yaml # Foo service deployment
│ └── http-echo-bar.yaml # Bar service deployment
└── loadtest/ # Load‑testing scripts
└── load-test.js # k6 load‑test script
前置条件
确保在 CI 环境中安装以下工具:
CI 工作流
该项目旨在用于在每次对默认分支的拉取请求触发的自动化 CI/CD 流水线。工作流由四个顺序阶段组成。
阶段 1 – 环境设置
目的: 为 CI 运行器准备所有必要的工具和依赖(支持 AMD64 和 ARM64 代理)。
关键活动
- 检出代码仓库。
- 通过包管理器安装 k6 负载测试工具。
- 下载并安装 Kind 用于本地 Kubernetes 集群。
- 为集群管理设置
kubectl。 - 配置所需的权限和环境变量。
阶段 2 – 集群供应
目的: 创建并配置完整的 Kubernetes 环境以进行测试。
关键活动
- 使用
kind-config.yaml创建多节点 Kind 集群。 - 安装 NGINX Ingress Controller 以进行请求路由。
- 等待所有控制平面组件就绪。
- 部署
http‑echo应用(foo 和 bar 服务)。 - 验证所有 Pod 正在运行且服务可访问。
- 为基于主机名的路由配置 Ingress 规则。
阶段 3 – 负载测试
目的: 对已部署的服务执行全面的负载测试。
关键活动
- 执行健康检查探针以验证端点可用性。
- 使用预定义场景运行 k6 脚本(
load-test.js)。 - 在运行期间实时监控性能指标。
- 生成 JSON 格式的详细测试结果。
- 捕获 foo 和 bar 服务的自定义指标(响应时间、错误率、吞吐量)。
测试配置
| 阶段 | 持续时间 | 虚拟用户数 | 目的 |
|---|---|---|---|
| Ramp‑up | 10 秒 | 0 → 10 | 逐步增加负载至目标负载 |
| Sustained | 30 秒 | 20 | 峰值性能评估 |
| Ramp‑down | 10 秒 | 20 → 0 | 平稳降低负载 |
性能阈值
- Ramp‑up:10 秒内达到目标负载
- Sustained load:30 秒的峰值虚拟用户数
- Ramp‑down:10 秒降至零负载
- P95 响应时间
参考:Goodnotes Take‑Home Assignment – DevOps Engineering
注意: 该方案未能满足团队的期望。