> ## Documentation Index
> Fetch the complete documentation index at: https://benchgen.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploy with Helm

> Install the BenchGen platform on a Kubernetes cluster with a single Helm release.

BenchGen ships as one Helm chart (`benchgen`) that deploys the whole platform: the core benchmarking stack (Django, Prefect, LiteLLM, MinIO, compute worker) plus the required agentspace bundle (chat UI, AI-bot agent, and their backing services).

The chart carries working defaults for everything structural. Your values file only needs the environment-specific inputs: hostnames, secrets, and per-service credentials. See the [Helm values reference](/docs/deploy/helm-values) for every parameter.

***

## Prerequisites

| Requirement           | Notes                                                                                                                |
| --------------------- | -------------------------------------------------------------------------------------------------------------------- |
| Kubernetes cluster    | Tested on k3s; any conformant cluster works                                                                          |
| Ingress controller    | Traefik or NGINX - set `ingress.provider` to match                                                                   |
| cert-manager          | With a `ClusterIssuer` named `letsencrypt-prod` for TLS certificates                                                 |
| Pull secret           | A `dockerhub-creds` secret in the target namespace for the private `betedo/*` images                                 |
| DNS                   | Every hostname in your values file must point at the cluster (required for routing and HTTP-01 certificate issuance) |
| GPU server (optional) | Ray with vLLM for local model inference - can run remotely; see `config.RAY_URL`                                     |

Create the pull secret before installing:

```bash theme={null}
kubectl create namespace benchgen
kubectl -n benchgen create secret docker-registry dockerhub-creds \
  --docker-username=<user> --docker-password=<token>
```

<Note>
  For air-gapped environments the images are served from the platform registry instead of the public internet - see [Air-gapped environments](/docs/deploy/dt-edge-platform#air-gapped-environments) on the DT Edge Platform page.
</Note>

***

## Install

Start from the minimal values file (`values-minimal.yaml` in the chart) and replace every `CHANGE-ME` placeholder and hostname:

```bash theme={null}
helm upgrade --install benchgen ./benchgen-<version>.tgz \
  -n benchgen --create-namespace \
  -f my-values.yaml
```

The release includes post-install hooks that bootstrap the platform automatically:

* **Database migrations** run before the app starts.
* **`job-chatui-admin-init`** creates the chat UI admin account and applies instance settings (open sign-ups, default role and permissions, API connections) through the admin API.
* **`job-aibot-admin-init`** seeds the agentspace admin and the client account through the AI-bot agent API.

Both hooks are idempotent - they detect existing accounts and skip creation on re-runs.

<Note>
  Ray is the only optional dependency. Keep `ray.enabled: false` and point `config.RAY_URL` / `config.RAY_MODEL_API` at a remote GPU server, or enable it in-cluster on a GPU node.
</Note>

***

## Upgrade

Upgrades are plain Helm upgrades with a newer chart version:

```bash theme={null}
helm upgrade benchgen ./benchgen-<new-version>.tgz -n benchgen -f my-values.yaml
```

Only pods whose rendered spec changed are restarted. Application data lives on PersistentVolumeClaims and survives upgrades.

<Warning>
  StatefulSet volumes (shared PostgreSQL, RabbitMQ, Redis, vector DB) survive even a `helm uninstall`. PVCs defined by the chart itself (agent databases, chat UI, Grafana/Loki/Prefect) are deleted with the release - back them up before removing it.
</Warning>

***

## Verify the deployment

```bash theme={null}
# All pods should reach Running/Completed
kubectl -n benchgen get pods

# Hook jobs should show Completed
kubectl -n benchgen get jobs

# Certificates should become Ready
kubectl -n benchgen get certificates
```

Then open `https://<ingress.hosts.main>` and sign in with the superadmin account (`superadmin` / `secrets.SUPERADMIN_PASSWORD`).
