Upgrades
An upgrade is the same command as an install. Every stage is idempotent.What changes between releases
ROOTKey publishes a new bundle with new image tags. Two files must move together:- Your values file — the
tagof every workload the release rebuilt. bundle/images.txt— the same tags, for an air-gapped install.
Running the whole thing, not a subset
For an upgrade, run every stage. Two of them are seeds that are easy to forget and whose absence is silent:plan-seedmust be re-run after the licence reconciles the catalogue, and after every catalogue bump.contract-seedmust be re-run if it was skipped on a previous run because the migrations had not finished.
Safety during an upgrade
Helm runs with--atomic on a release that is already deployed, so a failed upgrade rolls back to the previous revision rather than leaving the platform half-changed. On a first install --atomic is deliberately off, because rolling back would delete the pods, logs and events that explain the failure.
Licensing
The deployment holds a signed licence with a 24-hour TTL and a 7-day grace period. It renews automatically, well before expiry, over the Control Plane link.
In air-gapped mode there is no link. The licence is an offline signed artefact supplied in the vault, and a new one arrives with each bundle.
Backups
PostgreSQL
The installer configures nightly logical backups, kept for 7 days:Object storage
MinIO holds the files themselves. Its persistent volume is not covered by the PostgreSQL backup. Back it up the way you back up any other volume on that host. The two must be restored together: the database holds the record of a file, MinIO holds its bytes, and a mismatched pair produces records pointing at objects that are not there.Logs
The scheduler workloads have no metrics endpoint by design, and report only through their logs. If a scheduled job’s behaviour is in question — licence renewal, telemetry pruning, the expiry sweep — its log is the record.
Adding Users
On a single-tenant deployment, public sign-up is refused: the invitation is the only front door. One organisation owns the licence, and everyone joins it. An administrator invites by email address from within the platform. Somebody who tries to register without an invitation receives a clear message telling them to ask for one, rather than a generic error.This is deliberate. Before it, the second person to sign up created a second organisation, which made the licence reconciler refuse to materialise entitlements onto any organisation at all — a silent failure whose only trace was one log line.
Rotating Secrets
Edit the vault, re-encrypt it, and re-run the install:ALTER ROLE, so changing the vault and re-running is the whole rotation. It never generates its own credentials.
Uninstalling
- The PostgreSQL databases, which live outside the cluster.
- The MinIO persistent volume and the files in it.
- The Secrets, unless you delete the namespace.
- k3s itself, in Scenario C.
→ Something not behaving? Troubleshooting

