使用 TestRun CRD 运行 k6 脚本
本指南介绍如何配置 k6 脚本以使用 k6 Operator 运行。
定义测试脚本
有几种方法可以在 TestRun
CRD 中配置脚本。Operator 使用 configMap
、volumeClaim
和 localFile
为任务提供测试脚本。
ConfigMap
配置脚本的主要方式是创建一个包含脚本内容的 ConfigMap
kubectl create configmap my-test --from-file /path/to/my/test.js
然后在 TestRun
中指定它
script:
configMap:
name: my-test
file: test.js
注意
单个
ConfigMap
的字符限制为 1048576 字节。如果您需要更大的测试文件,则必须使用volumeClaim
或localFile
代替。
VolumeClaim
如果您有一个名为 stress-test-volumeClaim
的 PVC 包含您的脚本和任何其他支持文件,您可以像这样将其传递给测试
spec:
script:
volumeClaim:
name: 'stress-test-volumeClaim'
# test.js should exist inside /test/ folder.
# All the js files and directories test.js is importing
# should be inside the same directory as well.
file: 'test.js'
Pod 将期望在 /test/
文件夹中找到脚本文件。如果 volumeClaim
失败,这是首先要检查的地方。最新的初始化 Pod 不会生成任何日志,并且在找不到文件时会退出并出现错误。有关潜在的改进,请参阅此 GitHub 问题。
示例目录结构
├── test
│ ├── requests
│ │ ├── stress-test.js
│ ├── test.js
在前面的示例中,test.js
从 stress-test.js
导入一个函数,这些文件看起来像这样
// test.js
import stressTest from './requests/stress-test.js';
export const options = {
vus: 50,
duration: '10s',
};
export default function () {
stressTest();
}
// stress-test.js
import { sleep, check } from 'k6';
import http from 'k6/http';
export default () => {
const res = http.get('https://quickpizza.grafana.com');
check(res, {
'status is 200': () => res.status === 200,
});
sleep(1);
};
LocalFile
如果脚本存在于自定义运行器镜像的文件系统中,可以使用 localFile
选项访问它
spec:
parallelism: 4
script:
localFile: /test/test.js
runner:
image: <custom-image>
注意
如果您的集群在使用
volumeClaim
方面存在任何限制,您可以使用localFile
选项。如果可能,我们建议使用volumeClaim
。
多文件测试
如果您的 k6 脚本拆分到多个 JavaScript 文件中,您可以创建一个包含多个数据条目的 ConfigMap
,如下所示
kubectl create configmap scenarios-test --from-file test.js --from-file utils.js
如果要手动指定的文件太多,使用带文件夹的 kubectl
也可能是一种选择
kubectl create configmap scenarios-test --from-file=./test
此外,您还可以使用 k6 创建一个存档文件
k6 archive test.js [args]
k6 archive
命令在当前文件夹中创建 archive.tar
。然后您可以在 configmap
中使用该文件,类似于 JavaScript 脚本
kubectl create configmap scenarios-test --from-file=archive.tar
如果您使用存档文件,则必须编辑 TestRun
部署的 YAML 文件,以便将 file
选项设置为 k6 run
命令的正确入口点
# ...
spec:
script:
configMap:
name: 'crocodile-stress-test'
file: 'archive.tar' # <-- change here
运行测试
通过将自定义资源 TestRun
应用到运行 k6 Operator 的集群来执行测试。TestRun
CRD 的其他可选属性允许您控制分布式执行的一些关键方面。例如:
# k6-resource.yml
apiVersion: k6.io/v1alpha1
kind: TestRun
metadata:
name: k6-sample
spec:
parallelism: 4
script:
configMap:
name: k6-test
file: test.js
separate: false
runner:
image: <custom-image>
metadata:
labels:
cool-label: foo
annotations:
cool-annotation: bar
securityContext:
runAsUser: 1000
runAsGroup: 1000
runAsNonRoot: true
resources:
limits:
cpu: 200m
memory: 1000Mi
requests:
cpu: 100m
memory: 500Mi
starter:
image: <custom-image>
metadata:
labels:
cool-label: foo
annotations:
cool-annotation: bar
securityContext:
runAsUser: 2000
runAsGroup: 2000
runAsNonRoot: true
使用此命令创建 TestRun
CR:
kubectl apply -f /path/to/your/k6-resource.yml
清理资源
完成测试运行后,您需要清理创建的测试任务
kubectl delete -f /path/to/your/k6-resource.yml
此外,您可以使用 cleanup
选项配置资源的自动删除
spec:
cleanup: 'post'
设置 cleanup
选项后,k6 Operator 会在测试运行结束后删除 TestRun
CRD 和所有创建的资源。