Kubernetes via Helm (Production)
The recommended way to deploy Hades in production is with Helm. The chart bundles the API, Scheduler, Operator, and NATS broker, and defaults to the Hades Operator executor - the modern, Kubernetes-native execution mode.
Prerequisites
- Kubernetes v1.25+
- Helm v3.12+
kubectlconfigured to point to your target cluster
Install
Option A - Published chart from GHCR (recommended)
The chart is published to GHCR as an OCI artifact. In every command below, replace
<version> with the chart version you want to install (for example 1.0.0; see the
available versions):
helm upgrade --install hades oci://ghcr.io/hades-scheduler/charts/hades \
--version <version> -n hades --create-namespace
Option B - From a local checkout
# 1. Add the NATS sub-chart dependency
helm repo add nats https://nats-io.github.io/k8s/helm/charts
helm dependency build ./helm/hades/
# 2. Install (default: operator mode)
helm upgrade --install hades ./helm/hades -n hades --create-namespace
Override values inline as needed - at minimum set your ingress host:
helm upgrade --install hades oci://ghcr.io/hades-scheduler/charts/hades --version <version> \
-n hades --create-namespace \
--set ingress.host=hades.example.com \
--set ingress.tls.secretName=my-tls-secret
The first hades is the Helm release name (can be anything). The -n hades flag sets the namespace, created automatically with --create-namespace.
Verify Connectivity
Tail the Scheduler logs to confirm it connected to NATS and started in operator mode:
kubectl -n hades logs deploy/hades-scheduler -f
Expected healthy output:
INFO Connected to NATS server url=nats://hades-nats.hades.svc:4222
INFO Started HadesScheduler in Kubernetes mode
INFO Using operator mode (dynamic client)
Helm applies CRDs only on first install. When a release changes the BuildJob CRD, apply it manually from the matching chart version:
helm show crds oci://ghcr.io/hades-scheduler/charts/hades --version <version> | kubectl apply -f -
Upgrade & Rollback
helm upgrade hades oci://ghcr.io/hades-scheduler/charts/hades --version <version> -n hades
# Roll back to a previous revision
helm history hades -n hades
helm rollback hades <revision> -n hades
Uninstall
helm uninstall hades -n hades
# Optionally remove the namespace and any leftover resources
kubectl delete namespace hades
Next Steps
- Configuration: see the Helm Chart Reference and the generated values table.
- Learn about the Hades Operator execution mode.
- Expose the API with TLS using Traefik (VM deployments).