Upgrade and migration¶
Upgrade the operator chart and the Garage image as separate changes when possible. Read the release notes and compatibility matrix before changing a major behavior, API shape, storage template, or reserved environment.
Chart upgrade¶
helm repo update # if using a local repository mirror
helm upgrade garage-operator \
oci://ghcr.io/rajsinghtech/charts/garage-operator \
--version 0.7.4 \
--namespace garage-operator-system \
--reuse-values
kubectl -n garage-operator-system rollout status \
deployment/garage-operator-controller-manager --timeout=180s
For a new values file, render and inspect first:
helm template garage-operator \
oci://ghcr.io/rajsinghtech/charts/garage-operator \
--version 0.7.4 --namespace garage-operator-system > rendered.yaml
CRDs are upgraded separately by Helm's CRD mechanism. Back up custom resources before a release that changes conversion or schema behavior.
Garage image upgrade¶
Pin an image explicitly and let the operator coordinate identity-bearing rollouts:
spec:
image: dxflrs/garage:v2.3.0@sha256:866bd13ed2038ba7e7190e840482bc27234c4afaf77be8cfa439ae088c1e4690
Do not change the image, volume topology, replica count, and replication factor in one unreviewed edit. Watch StorageRolloutReady, StorageTopologyReady, NodeLocalPoolsReady, and the Garage health conditions after each change.
v1beta1 to v1beta2¶
Existing v1beta1 GarageCluster resources continue to work through conversion. New manifests should move from:
to:
For a unified cluster, declare both storage and gateway in v1beta2. Use the v1beta2 endpoint for tools that need gateway tiers, node-local pools, or conversion-preserved fields. See API versions and the repository's detailed migration guide.
Reserved environment migrations¶
Recent releases reserve Garage config and credential environment names so the operator can prove mesh identity and drain safety. Existing objects with these overrides reconcile only through a fail-closed migration.
RPC secret override¶
- Keep the old
GARAGE_RPC_SECREToverride in place. - Create a Secret with the exact same 64-hex value.
- Set
spec.network.rpcSecretRefand annotategarage.rajsingh.info/migrate-legacy-rpc-secret=truein a staging-only update. - Wait for the cluster status to confirm every managed Pod, Secret, and snapshot matches.
- Remove only the old RPC environment entry; leave the typed reference and migration annotation until the operator consumes it.
The operator never overwrites a mismatched existing Secret or guesses the value.
Config-file override¶
Remove GARAGE_CONFIG_FILE only after comparing the old effective TOML with the operator-rendered config, then add garage.rajsingh.info/acknowledge-legacy-config-migration=true until the coordinated rollout completes.
Broad envFrom, file-based credential overrides, and Admin/metrics credential overrides do not have an automatically provable startup value. Convert them before upgrading or use an explicit manual migration while workloads remain frozen.
Node-local pools¶
Node-local pools are introduced in the v0.7 line and require Kubernetes 1.27+, scheduling-gate support, enabled webhooks, and privileged workload namespaces. Existing LocalPath PVC GarageNodes are not automatically adoptable as node-local identities. Follow the migration section in the node-local guide.
Rollback¶
Rollback the chart only when the CRD and controller contracts are compatible with the stored resources. Do not roll back an on-disk Garage layout or a completed identity drain by restoring a container image. If a rollout is stuck, use garage.rajsingh.info/recover-storage-rollout with a new nonce after correcting the workload-only failure; do not delete the identity's PVCs.