Kubernetes with Helm

Local clusters (k3d · kind · minikube)

Try the Helm chart on a throwaway local Kubernetes cluster with bundled Postgres + Garage.

No cloud? Stand up a throwaway local cluster and install the chart with bundled Postgres + Garage on a NodePort. (Or just run Docker Compose - simpler for a single node.)

Bundled Postgres/Garage are evaluation only - for real data, use external, backed-up datastores and real secrets.

k3d

k3d can map a host port onto a NodePort, so localhost:8080 works directly:

k3d cluster create eddytor -p "8080:30080@server:0"

kubectl create namespace eddytor
kubectl -n eddytor create secret generic eddytor-secrets \
  --from-literal=EDDYTOR_DATABASE_URL="postgres://eddytor:eddytor@eddytor-postgres:5432/eddytor" \
  --from-literal=EDDYTOR_ENCRYPTION_KEY="$(openssl rand -base64 32)" \
  --from-literal=EDDYTOR_API_KEY_SECRET="$(openssl rand -base64 32)"

helm install eddytor oci://ghcr.io/nordalf/charts/eddytor -n eddytor \
  --set secrets.existingSecret=eddytor-secrets \
  --set postgres.bundled=true --set garage.bundled=true \
  --set server.service.type=NodePort --set server.service.nodePort=30080
# server reachable at http://localhost:8080

The -p "8080:30080@server:0" flag is a k3d feature - it's what maps the host's localhost:8080 onto the NodePort.

minikube

minikube does not surface NodePorts on localhost, so use port-forward (the only path on the default docker driver). Reuse the same secret + bundled flags as k3d, then:

helm install eddytor oci://ghcr.io/nordalf/charts/eddytor -n eddytor \
  --set secrets.existingSecret=eddytor-secrets \
  --set postgres.bundled=true --set garage.bundled=true --set ui.enabled=true
kubectl -n eddytor port-forward svc/eddytor-server 8080:8080 &
kubectl -n eddytor port-forward svc/eddytor-ui     3000:3000 &   # if ui.enabled
# server → http://localhost:8080, UI → http://localhost:3000

Heads up

On the docker driver (default on macOS/Windows), minikube ip is an address inside the Docker VM that your browser can't route to - so NodePort URLs won't work and kubectl port-forward is the reliable path. Option 2 (pointing config at $(minikube ip) NodePorts) only fits Linux docker/none or VM drivers whose node IP the host can reach.

kind / Docker Desktop

Same pattern - install with bundled Postgres + Garage, then kubectl port-forward svc/eddytor-server 8080:8080. Set config.publicUrl to the address your browser actually hits.

Bulk queries (Flight SQL)

eddytor query uses Flight SQL on server port 8082, which stays ClusterIP - port-forward it and point the CLI at it:

kubectl -n eddytor port-forward svc/eddytor-server 8082:8082 &
eddytor config set-flight-url http://localhost:8082

Verify + first admin

Same as any cluster - see Install the chart (verify, first admin). helm install … --set garage.bundled=true prints these commands in its NOTES.

On this page