Helm Chart for openQA inside Kubernetes

May 4, 2026 ยท View on GitHub

Prerequisites:

  1. A Kubernetes cluster (for example k3s or minikube)
  2. Installed and configured Helm

For more information, please consult the Helm documentation.

The chart consists of two separate sub-charts, worker and webui, and a parent chart, openqa.

Installation

Make sure first that a Kubernetes cluster is running:

minikube start
minikube status

Gateway API setup

The chart uses the Kubernetes Gateway API for external access. This has to be installed once before the provision of the cluster. Install the Gateway API CRDs and Envoy Gateway controller:

kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/<GW_VERSION>/standard-install.yaml --server-side
helm install eg oci://docker.io/envoyproxy/gateway-helm \
  -n envoy-gateway-system --create-namespace --skip-crds

Install the chart

Update helm dependencies (if needed) and install the parent chart from the container/helm directory:

cd container/helm
helm dependency update openqa/
helm install openqa openqa/ --wait --timeout 5m

The dependency subcommand will build the manifests of the services, which can be found under openqa/charts/. The install will deploy the services in the cluster.

To uninstall and start over, use helm uninstall openqa and rerun helm dependency update openqa/.

Check that everything is up and running:

helm status --show-resources openqa

Accessing the Web UI

The chart creates a Gateway and HTTPRoute by default. For minikube, run minikube tunnel in a separate terminal to assign an external IP to the gateway's LoadBalancer service.

Find the gateway address:

kubectl get gateway

Add the gateway address to /etc/hosts, pointing to the hostname configured in values.yaml (baseUrl):

<GATEWAY_ADDRESS> openqa.internal

Then access the UI at http://openqa.internal.

Note: In production, the cloud provider (AWS, GCP, etc.) provisions the LoadBalancer automatically -- no tunnel or manual IP configuration is needed.

Via port-forward (quick testing)

No gateway setup needed. Forward the service port directly:

kubectl port-forward svc/openqa 8080:80

Then access the UI at http://localhost:8080.

Running a Test Job

The easiest way to run a job is to clone one from an existing openQA instance:

openqa-clone-job --from https://openqa.opensuse.org --host http://openqa.internal <JOB_ID>

Pick a job ID from https://openqa.opensuse.org. This copies the job settings and downloads the needed assets.

Alternatively, use openqa-cli to post a job directly:

openqa-cli api --host http://openqa.internal -X POST jobs \
  DISTRI=opensuse VERSION=Tumbleweed FLAVOR=DVD ARCH=x86_64 TEST=minimalx

Configuration

It might be necessary to customize the charts by overriding some of the variables inside openqa/values.yaml to suit your needs. For testing, it is also useful to create a my_values.yaml and run:

helm install openqa openqa/ -f my_values.yaml

Worker

The worker requires some basic configuration, as described in the documentation.