
Orderly Ape – open-source scalable, distributed load testing by ohashi
Orchestrate and run k6 load tests across multiple Kubernetes clusters. It consists of two main components:
- A web application with a traditional API that allows configuring tests and coordinating between independent k6-operators in Kubernetes clusters.
- A k6 operator that consumes the API, executes the load tests, and reports the state back to the web application. This allows the test runs to be coordinated by the webapp and exposed to the user.
- Sponsors
- Architecture
- Installation on Digital Ocean
- Using Orderly Ape
- Installing Additional Testing Locations
- k6-operator State Diagram
- License
Orderly Ape is actively looking for more sponsors or contribute directly via GitHub Sponsors.
This project is supported by Open Source credits from Digital Ocean
- webapp – Web application that allows configuring tests and coordinating between independent k6-operators in Kubernetes clusters.
- k6-operator – k6 operator that consumes the API, executes the load tests, and reports the state back to the web application.
- k6 – k6 container image that can be used to run k6 tests in a Kubernetes cluster.
Asia Kubernetes Cluster`”n K6-AP[“K6 Operator”]n K6-AP –[ fa:fa-arrows-rotate ]–> K6-AP-JOB1[“K6 Job 1”] —> In K6-AP –[ fa:fa-arrows-rotate ]–> K6-AP-JOB2[“K6 Job 2”] —> In K6-AP –[ fa:fa-arrows-rotate ]–> K6-AP-JOBN[“K6 Job N”] —> In endnn subgraph “`Europe Kubernetes Cluster`”n K6-EU[“K6 Operator”]n K6-EU –[ fa:fa-arrows-rotate ]–> K6-EU-JOB1[“K6 Job 1”] —> In K6-EU –[ fa:fa-arrows-rotate ]–> K6-EU-JOB2[“K6 Job 2”] —> In K6-EU –[ fa:fa-arrows-rotate ]–> K6-EU-JOBN[“K6 Job N”] —> In endnn subgraph “`US Kubernetes Cluster`”n K6-US[“K6 Operator”]n K6-US –[ fa:fa-arrows-rotate ]–> K6-US-JOB1[“K6 Job 1”] —> In K6-US –[ fa:fa-arrows-rotate ]–> K6-US-JOB2[“K6 Job 2”] —> In K6-US –[ fa:fa-arrows-rotate ]–> K6-US-JOBN[“K6 Job N”] —> In endnn W –[ fa:fa-arrows-rotate ]–> K6-APn W –[ fa:fa-arrows-rotate ]–> K6-EUn W –[ fa:fa-arrows-rotate ]–> K6-USnn W — Links –> Gn G — Exposes –> In”}” data-plain=”flowchart LR
W[Orderly Ape Webapp]
W[Orderly Ape Webapp]
subgraph “Data”
G[Grafana]
I[InfluxDB]
end
subgraph “`Asia Kubernetes Cluster`”
K6-AP[“K6 Operator”]
K6-AP –[ fa:fa-arrows-rotate ]–> K6-AP-JOB1[“K6 Job 1”] —> I
K6-AP –[ fa:fa-arrows-rotate ]–> K6-AP-JOB2[“K6 Job 2”] —> I
K6-AP –[ fa:fa-arrows-rotate ]–> K6-AP-JOBN[“K6 Job N”] —> I
end
subgraph “`Europe Kubernetes Cluster`”
K6-EU[“K6 Operator”]
K6-EU –[ fa:fa-arrows-rotate ]–> K6-EU-JOB1[“K6 Job 1”] —> I
K6-EU –[ fa:fa-arrows-rotate ]–> K6-EU-JOB2[“K6 Job 2”] —> I
K6-EU –[ fa:fa-arrows-rotate ]–> K6-EU-JOBN[“K6 Job N”] —> I
end
subgraph “`US Kubernetes Cluster`”
K6-US[“K6 Operator”]
K6-US –[ fa:fa-arrows-rotate ]–> K6-US-JOB1[“K6 Job 1”] —> I
K6-US –[ fa:fa-arrows-rotate ]–> K6-US-JOB2[“K6 Job 2”] —> I
K6-US –[ fa:fa-arrows-rotate ]–> K6-US-JOBN[“K6 Job N”] —> I
end
W –[ fa:fa-arrows-rotate ]–> K6-AP
W –[ fa:fa-arrows-rotate ]–> K6-EU
W –[ fa:fa-arrows-rotate ]–> K6-US
W — Links –> G
G — Exposes –> I
” dir=”auto”>
flowchart LR
W[Orderly Ape Webapp]
subgraph "Data"
G[Grafana]
I[InfluxDB]
end
subgraph "`Asia Kubernetes Cluster`"
K6-AP["K6 Operator"]
K6-AP --[ fa:fa-arrows-rotate ]--> K6-AP-JOB1["K6 Job 1"] ---> I
K6-AP --[ fa:fa-arrows-rotate ]--> K6-AP-JOB2["K6 Job 2"] ---> I
K6-AP --[ fa:fa-arrows-rotate ]--> K6-AP-JOBN["K6 Job N"] ---> I
end
subgraph "`Europe Kubernetes Cluster`"
K6-EU["K6 Operator"]
K6-EU --[ fa:fa-arrows-rotate ]--> K6-EU-JOB1["K6 Job 1"] ---> I
K6-EU --[ fa:fa-arrows-rotate ]--> K6-EU-JOB2["K6 Job 2"] ---> I
K6-EU --[ fa:fa-arrows-rotate ]--> K6-EU-JOBN["K6 Job N"] ---> I
end
subgraph "`US Kubernetes Cluster`"
K6-US["K6 Operator"]
K6-US --[ fa:fa-arrows-rotate ]--> K6-US-JOB1["K6 Job 1"] ---> I
K6-US --[ fa:fa-arrows-rotate ]--> K6-US-JOB2["K6 Job 2"] ---> I
K6-US --[ fa:fa-arrows-rotate ]--> K6-US-JOBN["K6 Job N"] ---> I
end
W --[ fa:fa-arrows-rotate ]--> K6-AP
W --[ fa:fa-arrows-rotate ]--> K6-EU
W --[ fa:fa-arrows-rotate ]--> K6-US
W -- Links --> G
G -- Exposes --> I
Loading
🎥 Quick Start: Watch our How to Install Orderly Ape video on YouTube for a visual walkthrough.
⚠️ Important: This installation guide is specifically for Digital Ocean. For other cloud providers, you’ll need to adapt the commands and configuration accordingly.
📋 Note: Make sure you have administrative access to a Kubernetes cluster and the necessary permissions to create namespaces and deploy applications.
Install the following tools:
kubectl
– Kubernetes command-line toolhelm
– Kubernetes package managerhelmfile
– Declarative spec for deploying helm chartsdoctl
– Digital Ocean command-line tool
-
Install dependencies using Homebrew:
brew install kubectl helm helmfile doctl
💡 Tip: For non-macOS systems, install these tools using your system’s package manager or download directly from their official websites.
-
Initialize helmfile:
-
Create Kubernetes Cluster
- Recommended: Use dedicated nodes for tests
- Configure auto-scaling (recommended: min 3 nodes)
⚠️ Warning: Make sure you check the Kubernetes version at the top to know what version Orderly Ape has been tested up to. Installing newer versions may not work. -
Connect to DigitalOcean Cluster
- Use personal access token for authentication
Copy and Configure
values.yaml
Download the configuration template from /deploy/all-in-one/values.yaml
- Fill out all required configuration parameters
- Set admin credentials
Deploy the application
curl -s https://raw.githubusercontent.com/ReviewSignal/orderly-ape/refs/tags/v0.1.2/deploy/all-in-one/helmfile.yaml | helmfile sync -f-
- This pulls the helmfile and automatically deploys the application
📌 Version Note: Replace
v0.1.2
with the latest version from the releases page.Retrieve Service IP
kubectl -n orderly-ape get service
- Locate the service with an external IP
DNS Configuration
- Map your domain to the external IP from the previous step
- Ensure it matches the domain in
values.yaml
Verify SSL certificates
kubectl -n orderly-ape get certificates
Ensure the Ready state is
True
for all certificates.Access Application
- Open
https://
/admin/ - Login with admin credentials set in
values.yaml
- Run your k6 load tests
-
Prerequisites: Verify all tools are installed and accessible in your PATH
-
Connectivity: Check kubernetes cluster connectivity with
kubectl cluster-info
-
Deployment: Ensure helmfile sync completes without errors
-
Certificates: If you get invalid certificate warnings, wait a few minutes for automatic certificate issuance
# Monitor certificate status watch kubectl -n orderly-ape get certificates
📚 Additional Help: Refer to Cert Manager documentation for certificate issues.
🎥 Quick Start: Watch our How to Use Orderly Ape video on YouTube for a visual walkthrough.
Once your Orderly Ape instance is installed, it is accessible at
https://
/admin/ The hostname and your login credentials were set at install in your
values.yaml
file in the orderlyape section:orderlyape: host: orderlyape.example.com adminPassword: yourpassword
Groups are used to manage workers. You likely don’t need to edit or change anything here unless you really know what you are doing.
Users are necessary to create accounts for other users to login to the admin system and to allow additional testing locations to connect to Orderly Ape.
This manages all the testing locations that can be used when running a test. See the Installing Additional Testing Locations Documentation.
This is for advanced users only. It defines where testing data is sent. By default it’s sent to influxdb which is installed when you setup Orderly Ape.
Running k6 tests happens here.
You have a dashboard with all your tests, their results, status, date and other details. Tests can be started, cancelled and deleted from the dashboard using the
Action
menu.This is the URL the test will execute on.
Do not change this unless you know what you’re doing. This sends the data to influxdb.
Currently, Orderly Ape loads tests from GitHub (public repositories only). You put the repository address where the script you want to run is hosted. The file is selected later in Test Script File
📝 Note: Only public GitHub repositories are currently supported. Other options such as private repository support may be added in future versions.
Orderly Ape allows you to select which branch, tag or commit hash you would like the script to load from in the repo.
The test file you want to run in the repo.
How many CPUs will be allocated per worker.
How much memory to allocate to each worker.
Leave empty unless you know what you’re doing. This can help you select which kubernetes node it will execute on.
How long the test is expected to run (add a little additional time for initializing the cluster and test nodes). This makes sure tests don’t run indefinitely.
This uses the golang duration format (e.g.,
1h
or1h30m
or1h45m30s
).This controls where the test will run. The default location is
local
which is on the main kubernetes cluster where the webapp, Grafana and InfluxDB are running. You can add additional test locations to scale up tests to multiple regions. You can control how many workers will run in each region, set the region to 0 to not use a specific location.Test run Environmental Variables are variables passed to the k6 script upon execution. It is equivalent to
-e VAR_NAME=VAR_VALUE
during k6 command line execution. Orderly Ape is designed to allow users to pass as many ENV VARS as needed, this can be useful because you might want to change test properties without changing the script.The k6 WordPress Benchmarks scripts parameterize most of the variables to allow the same test to be run with different durations, number of users, website URL, sleep durations, etc.
Labels are intended to allow sorting/searching/grouping by different labels and values to help organize your test results.
🎥 Quick Start: Watch our How to Install Additional Test Locations on Orderly Ape video on YouTube for a visual walkthrough.
📍 Example Note: In this example we use ‘london’ as the example location but please change it according to your setup and change all references to ‘london’.
-
Add location from Orderly Ape webapp
-
Add user from Orderly Ape webapp
-
Add user to Workers group
-
Create a
values.london.yaml
file in thedeploy/all-in-one/
folder:config: region: london api: endpoint: https://YourOrderlyApeWebApp.com/api user: london password: passwordgoeshere
-
Create a new kubernetes cluster in the location of your choice.
- Make sure to turn on autoscaling and start at minimum 1 node (maximum is up to your scaling needs). The first node needs to be online to connect to the webapp cluster and start auto scaling to run tests.
-
Connect to your kubernetes cluster using the same command as step 4 of the main install:
Ensure you are in the proper context on kubernetes (the one you just created). You can check your contexts
1 Comment
ohashi
Hi HN,
I'm super excited to share the open source project I've been working on for the past year because it is finally ready for general use (I hope!).
The project is called Orderly Ape, it's an open source (MIT) distributed, scalable load testing platform that uses k6, grafana, influxdb and kubernetes. It lets you run k6 load tests on your infrastructure and gives you complete control/ownership of the execution and data.
I was motivated to create Orderly Ape because I work a lot with hosting companies and testing them (I run WPHostingBenchmarks.com). It wasn't financially viable to run many large scale tests to benchmark all these companies, so I built Orderly Ape. It allows me to run tests at a fraction of the cost now, no VUser pricing, just the hardware needed to run the tests – scaled/spun up when I need it.
I finally finished documenting (and creating video tutorials) on how to setup/install/run everything. So now people can hopefully actually give it a try.
I would appreciate any feedback/bugs/suggestions/pull requests :)