菜单
开源

计划 k6 测试

虽然 k6 Operator 不直接支持计划 k6 测试,但您可以直接使用 Kubernetes 的 CronJob 对象来计划测试。CronJob 将按计划运行,并执行 TestRun 对象的创建和删除操作。

运行这些测试比运行独立的测试需要更多的设置。

创建一个包含 k6 脚本的 ConfigMap

有关如何创建包含 k6 脚本的 ConfigMap 的详细信息,请参阅 使用 TestRun CRD 运行 k6 脚本

TestRun 作业创建 YAML 文件的 ConfigMap

使用 make deploy 安装方法时,向 kustomization.yaml 添加 configMapGenerator

yaml
configMapGenerator:
  - name: <test-name>-config
    files:
      - <test-name>.yaml

CronJob 创建 ServiceAccount

为了让 CronJob 能够创建和删除 TestRun 对象,需要创建一个服务帐户

yaml
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: k6-<namespace>
rules:
  - apiGroups:
      - k6.io
    resources:
      - testruns
    verbs:
      - create
      - delete
      - get
      - list
      - patch
      - update
      - watch
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: k6-<namespace>
roleRef:
  kind: Role
  name: k6-<namespace>
  apiGroup: rbac.authorization.k8s.io
subjects:
  - kind: ServiceAccount
    name: k6-<namespace>
    namespace: <namespace>
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: k6-<namespace>

创建 CronJob

这是一个如何在 YAML 文件中定义 CronJob 的示例

yaml
# snapshotter.yml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: <test-name>-cron
spec:
  schedule: '<cron-schedule>'
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          serviceAccount: k6
          containers:
            - name: kubectl
              image: bitnami/kubectl
              volumeMounts:
                - name: k6-yaml
                  mountPath: /tmp/
              command:
                - /bin/bash
              args:
                - -c
                - 'kubectl delete -f /tmp/<test-name>.yaml; kubectl apply -f /tmp/<test-name>.yaml'
          restartPolicy: OnFailure
          volumes:
            - name: k6-yaml
              configMap:
                name: <test-name>-config