Before you upgrade
1
Back up
Take a database backup and confirm you hold
SETTINGS_ENCRYPTION_KEY and
BETTER_AUTH_SECRET. See Backup and restore.2
Read the release notes
Check for breaking changes and required values between your current version
and the target.
3
Capture your current values
This preserves settings that are not in your values file:
Upgrade the control plane
1
Update the repository
2
Render and dry-run the exact values
3
Upgrade
--atomic rolls the release back automatically if the upgrade fails.4
Verify
The control plane uses the
Recreate strategy to stay within namespace pod
quotas, so expect a brief interruption rather than a seamless rolling update.Database migrations
Migrations run in an init container before the new application container starts, guarded by a PostgreSQL advisory lock so concurrent rollouts cannot race.Roll out existing workspaces
New workspaces use the new image automatically. Existing Deployments keep their current image until you update them explicitly.1
Determine the new workspace image
2
Update every workspace Deployment
This replaces only the container image and preserves each Deployment’s
current replica count, so idle workspaces stay scaled to zero.
3
Wait only for the running ones
Roll back
1
Find the revision
2
Roll back the release
3
Restore the previous workspace image
Only if you had already updated existing workspaces:
4
Verify the schema is compatible
If the failed upgrade applied a migration, confirm the older application
still works against the current schema. Restore the database from backup if
it does not.
Upgrade checklist
Pre-upgrade
Pre-upgrade
- Database backup taken and verified
SETTINGS_ENCRYPTION_KEYandBETTER_AUTH_SECRETavailable- Current values exported
- Release notes reviewed
- Rendered manifests pass
kubectl apply --dry-run=server
Post-upgrade
Post-upgrade
/api/healthreturns{"ok":true}- Control-plane logs are free of startup errors
- Login works, including SSO if enabled
- Provider settings still decrypt
- An existing conversation loads
- A workspace starts and runs a command
- Existing workspace Deployments were rolled out if needed