A values file worth starting from
values.yaml
Three values decide whether it works
ReadWriteMany
required
An RWO claim does not fail. Kubernetes gives each pod its own volume, so a multi-node job’s
checkpoint shards split across pods and the run cannot be resumed — with nothing in the logs to
say why. The chart defaults to RWX; the StorageClass has to actually support it.
url
required
Training pods POST their metrics to it. Use the in-cluster service name. An external ingress
address leaves the cluster and comes back in;
127.0.0.1 is the worker’s own loopback.string
required
Without
FORGE_WEB_JWT_SECRET each process signs with its own key: every restart logs everyone
out, and more than one replica cannot work at all. The chart’s install notes warn when neither
this nor secrets.create is set.Secrets
secrets.create: true renders a Secret from secrets.data — convenient on a test cluster, wrong in
production, because the values land in your release history.
Point secrets.existingSecret at a Secret from kubectl create secret, Sealed Secrets, or the
External Secrets Operator:
One thing the chart does for you
FORGE_K8S_STORAGE_PVC is filled in from the claim the chart creates, so the executor is always
told about the claim that actually exists. That pairing is easy to break by hand — the executor
checks a claim that is not the one mounted, reports healthy, and the mismatch only surfaces when a
multi-node run fails to resume.
Override it only when reusing a claim the chart does not own:
Verify before you apply
Confirm it worked
FORGE_K8S_STORAGE_SHARED declaration
against the claim’s real access modes, which is the check that catches an RWO claim before a job
does.
The chart is verified with
helm lint and helm template on every change. Installing it against a
live cluster is not something CI here can do — no runner has one — so the first install on your
cluster is the first real test. Run the dry-run above first.