2. k6 环境搭建:安装方式、Docker 部署、Cloud 与 OSS 区别及验证
在开始容量压测巡检脚本编排之前,必须完成 k6 运行环境的搭建。本章覆盖 k6 在主流操作系统上的安装方式、Docker 容器化部署、k6 Cloud 与 k6 OSS 的核心差异,以及安装后的验证方法。请根据你的实际工作环境选择对应的安装路径。
2.1 操作系统原生安装
k6 官方提供 Linux、macOS 和 Windows 三种主流操作系统的安装包。以下为各系统的推荐安装方式:
| 操作系统 | 安装方式 | 命令 / 步骤 | 备注 |
|---|---|---|---|
| Linux (Debian/Ubuntu) | APT 仓库 | |
自动处理依赖,推荐生产环境使用 |
| Linux (RHEL/CentOS/Fedora) | YUM 仓库 | |
适用于 RPM 系发行版 |
| macOS | Homebrew | |
最简洁,自动配置 PATH |
| Windows | Chocolatey / 官方 MSI |
或下载 k6-latest-amd64.msi 手动安装 |
Chocolatey 需管理员权限;MSI 安装后需手动添加 PATH |
| 通用 (任意 OS) | 预编译二进制 | |
适合离线环境或 CI 容器 |
推荐做法: 在 Linux 服务器上优先使用 APT/YUM 仓库安装,便于后续版本升级;在本地开发机上使用 Homebrew 或 Chocolatey 保持与系统包管理一致。
2.2 Docker 部署 k6
Docker 是运行 k6 最隔离、最可复用的方式,尤其适合 CI/CD 流水线和容器化压测环境。k6 官方镜像托管于 Docker Hub,标签与 GitHub Release 版本同步。
2.2.1 拉取并运行 k6 容器
# 拉取最新稳定版镜像
docker pull grafana/k6:latest
# 运行一个简单的测试脚本(内联脚本)
docker run --rm -i grafana/k6 run - <<EOF
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
http.get('https://test.k6.io');
sleep(1);
}
EOF
2.2.2 挂载本地脚本运行
# 假设本地脚本路径为 ./scripts/loadtest.js
docker run --rm -i -v $(pwd)/scripts:/scripts grafana/k6 run /scripts/loadtest.js
2.2.3 Docker Compose 集成(推荐)
# docker-compose.yml
version: '3.8'
services:
k6:
image: grafana/k6:latest
container_name: k6-runner
volumes:
- ./scripts:/scripts
- ./reports:/reports
command: run /scripts/loadtest.js
environment:
- K6_OUT=json=/reports/result.json
Docker 部署优势:
- 环境一致性:开发、测试、生产使用同一镜像
- 无残留:容器运行结束后自动清理,不污染宿主机
- 资源隔离:可限制 CPU/内存,模拟资源受限场景
- CI 友好:直接集成到 Jenkins、GitLab CI、GitHub Actions 等流水线
2.3 k6 Cloud 与 k6 OSS 的区别
k6 提供两个主要版本:开源版(OSS)和云版(Cloud)。理解两者的差异有助于根据团队规模和压测需求做出正确选择。
| 对比维度 | k6 OSS(开源版) | k6 Cloud(云版) |
|---|---|---|
| 执行环境 | 本地机器、自建服务器、Docker 容器 | Grafana 托管的基础设施,全球多区域执行 |
| 分布式压测 | 需自行搭建多节点协调(k6-operator 或手动分发) | 内置分布式执行引擎,一键扩展至数百虚拟节点 |
| 结果存储与可视化 | 终端输出、JSON/CSV 导出、集成 Prometheus + Grafana | 内置实时仪表盘、历史趋势、自动报告生成 |
| 团队协作 | 依赖 Git + CI 流程,无原生协作功能 | 项目级权限管理、共享测试配置、评论与审批 |
| 阈值与告警 | 脚本内定义阈值,告警需外部系统(如 Alertmanager) | 内置阈值引擎,支持邮件、Slack、PagerDuty 等通知 |
| 成本 | 免费,仅需基础设施成本 | 按虚拟用户小时或订阅计费 |
| 适用场景 | 单机压测、开发调试、内部 CI 门禁 | 大规模压测、SLA 验证、生产环境巡检、团队级测试平台 |
注意: k6 OSS 与 k6 Cloud 使用相同的脚本语法和 API。脚本可以在两者之间无缝迁移。Cloud 版本质上是 OSS 的托管增强版,并非独立产品。你可以在本地用 OSS 编写调试脚本,然后一键上传到 Cloud 执行大规模压测。
2.4 验证安装
无论选择哪种安装方式,安装完成后都应执行以下验证步骤,确保 k6 可正常运行:
- 检查版本号
k6 version # 预期输出示例:k6 v0.49.0 (2024-03-15T10:00:00+0000, go1.22.1, linux/amd64) - 运行内置 smoke test
k6 run --vus 1 --duration 5s -然后粘贴以下脚本并回车(或使用
echo管道):import http from 'k6/http'; import { check } from 'k6'; export default function () { const res = http.get('https://test.k6.io'); check(res, { 'status is 200': (r) => r.status === 200, }); } - 检查 Docker 容器运行(如果使用 Docker)
docker run --rm -i grafana/k6 version - 验证输出格式
k6 run --vus 1 --duration 3s --out json=test-output.json - <<EOF import http from 'k6/http'; export default function () { http.get('https://test.k6.io'); } EOF cat test-output.json | head -5
验证成功标志: 终端输出包含
✓ status is 200 或类似通过检查的标记,且最后一行显示 checks.........................: 100.00% ✓ 1。如果看到错误信息,请检查网络连接、防火墙或代理设置。
2.5 常见安装问题与解决
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
k6: command not found |
k6 未加入 PATH 环境变量 | 将 k6 二进制所在目录添加到 ~/.bashrc 或 ~/.zshrc 的 PATH 中 |
permission denied |
二进制文件无执行权限 | chmod +x /path/to/k6 |
docker: Error response from daemon |
Docker 未运行或当前用户无权限 | 启动 Docker 服务;将用户加入 docker 组:sudo usermod -aG docker $USER |
unable to resolve host 或 connection refused |
网络代理或 DNS 问题 | 设置 HTTP_PROXY/HTTPS_PROXY 环境变量;检查 DNS 配置 |
| Windows 上双击 MSI 安装后仍找不到命令 | 安装程序未自动添加 PATH | 手动将 C:\Program Files\k6 添加到系统环境变量 PATH 中,重启终端 |
环境就绪检查清单:
- ✅ k6 版本命令正常输出
- ✅ 能成功运行一次 HTTP 请求并返回 200
- ✅ 能输出 JSON 格式结果文件
- ✅ Docker 镜像能正常拉取并执行(如使用 Docker)
- ✅ 脚本中
import http from 'k6/http'无报错