Schedule k6 tests
While the k6 Operator doesn’t support scheduling k6 tests directly, you can schedule tests with the CronJob
object from Kubernetes directly. The CronJob
would run on a schedule and execute the creation and deletion of the TestRun
object.
Running these tests requires a little more setup than a standalone test run.
Create a ConfigMap
with k6 scripts
Refer to Run k6 scripts with TestRun
CRD for details on how to create a ConfigMap
with k6 scripts.
Create a ConfigMap of the YAML file for the TestRun
job
When using the make deploy
installation method, add a configMapGenerator
to the kustomization.yaml
:
configMapGenerator:
- name: <test-name>-config
files:
- <test-name>.yaml
Create a ServiceAccount
for the CronJob
For the CronJob
to be able to create and delete TestRun
objects, create a service account:
---
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>
Create a CronJob
This is an example of how to define a CronJob
in a YAML file:
# 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