Upgrade and Rollback Guide
[!WARNING] Always back up your database before upgrading. Test upgrades in a development environment first.
Pre-Upgrade Checklist
Pre-Upgrade Checklist
| Task | Command | Required |
|---|---|---|
| Review release notes | Check CHANGELOG.md | Critical |
| Backup database | See Backup Guide | Critical |
| Verify current version | helm list -n neurondb | Yes |
| Check migration status | kubectl get jobs -n neurondb | grep migration | Yes |
| Ensure resources | Check cluster capacity | Yes |
| Review values.yaml | Check for deprecated options | High |
Upgrade Procedure
Step 1: Backup
# Ensure backup is recent kubectl get cronjob neurondb-backup -n neurondb kubectl create job --from=cronjob/neurondb-backup manual-backup-$(date +%s) -n neurondb
Step 2: Review Changes
# Dry-run upgrade helm upgrade neurondb ./helm/neurondb \ --version <new-version> \ --dry-run --debug \ -f values-production-external-postgres.yaml \ -n neurondb
Step 3: Run Migrations
Migrations run automatically via pre-upgrade hooks. Monitor:
# Watch migration job kubectl get jobs -n neurondb -w | grep migration kubectl logs -f job/neurondb-migration-<revision> -n neurondb
Step 4: Upgrade Chart
helm upgrade neurondb ./helm/neurondb \ --version <new-version> \ -f values-production-external-postgres.yaml \ -n neurondb
Step 5: Monitor Upgrade
# Watch pods kubectl get pods -n neurondb -w # Check rollout status (PostgreSQL/NeuronDB) kubectl rollout status statefulset/neurondb-neurondb -n neurondb # Check logs kubectl logs -f statefulset/neurondb-neurondb -n neurondb
Step 6: Verify Upgrade
# Check versions helm list -n neurondb kubectl get pods -n neurondb -o jsonpath='{.items[*].spec.containers[*].image}' # Test database and extension kubectl port-forward svc/neurondb-neurondb 5432:5432 -n neurondb # In another terminal: psql -h localhost -p 5432 -U neurondb -d neurondb -c "SELECT neurondb.version();"
Rollback Procedure
Step 1: Identify Previous Revision
# List release history helm history neurondb -n neurondb # Note the revision number to rollback to
Step 2: Rollback Helm Release
# Rollback to previous revision helm rollback neurondb <revision> -n neurondb # Or rollback to previous version helm rollback neurondb -n neurondb
Step 3: Database Rollback (if needed)
If database migrations were applied, rollback them:
# Connect to database kubectl exec -it statefulset/neurondb-neurondb -n neurondb -- \ psql -U neurondb -d neurondb # Run rollback script (if provided) \i /path/to/rollback.sql
Step 4: Verify Rollback
# Check pod versions kubectl get pods -n neurondb -o jsonpath='{.items[*].spec.containers[*].image}' # Verify database and extension kubectl port-forward svc/neurondb-neurondb 5432:5432 -n neurondb # In another terminal: psql -h localhost -p 5432 -U neurondb -d neurondb -c "SELECT neurondb.version();"
Zero-Downtime Upgrades
StatefulSet Rolling Update
Configure update strategy:
neurondb:updateStrategy:type: RollingUpdaterollingUpdate:partition: null # Update all podsmaxUnavailable: 1
Canary Deployment
Gradual rollout using partition:
neurondb:replicas: 3updateStrategy:type: RollingUpdaterollingUpdate:partition: 2 # Only update pod 2 and 3
After verification, reduce partition:
helm upgrade neurondb ./helm/neurondb \ --set neurondb.updateStrategy.rollingUpdate.partition=1 \ -n neurondb
Migration Management
Check Migration Status
# View migration history kubectl get jobs -n neurondb | grep migration # Check database migration version kubectl exec -it statefulset/neurondb-neurondb -n neurondb -- \ psql -U neurondb -d neurondb -c \ "SELECT version, name, applied_at FROM neurondb_agent.schema_migrations ORDER BY version DESC;"
Manual Migration
If automatic migration fails:
# Create migration job manually kubectl create job --from=cronjob/neurondb-migration manual-migration -n neurondb # Or run migration script directly kubectl exec -it statefulset/neurondb-neurondb -n neurondb -- \ psql -U neurondb -d neurondb -f /path/to/migration.sql
Troubleshooting
Upgrade Fails
- Check migration job:
kubectl describe job neurondb-migration-<revision> -n neurondb kubectl logs job/neurondb-migration-<revision> -n neurondb
- Check pod status:
kubectl describe pod <pod-name> -n neurondb kubectl logs <pod-name> -n neurondb
- Rollback if needed:
helm rollback neurondb -n neurondb
Migration Fails
- Check migration logs:
kubectl logs job/neurondb-migration-<revision> -n neurondb
- Fix migration issues and retry:
# Delete failed job kubectl delete job neurondb-migration-<revision> -n neurondb # Retry upgrade helm upgrade neurondb ./helm/neurondb --version <version> -n neurondb
Rollback Fails
- Check release history:
helm history neurondb -n neurondb
- Manual rollback:
# Delete current resources helm uninstall neurondb -n neurondb # Reinstall previous version helm install neurondb ./helm/neurondb \ --version <previous-version> \ -f values-production-external-postgres.yaml \ -n neurondb
Best Practices
[!IMPORTANT] Follow these practices for safe upgrades.
Upgrade Best Practices
| Practice | Description | Priority |
|---|---|---|
| Always backup | Backup before upgrade | Critical |
| Test in staging | Test upgrades in staging first | Critical |
| Review changes | Review breaking changes in release notes | Critical |
| Monitor | Monitor during and after upgrade | Critical |
| Rollback plan | Keep rollback plan ready | Critical |
| Document migrations | Document custom migrations | High |
| Canary deployments | Use canary deployments for major upgrades | High |
Related Documentation
| Document | Description |
|---|---|
| Production Installation | Production setup guide |
| Backup and Restore | Backup procedures |
| Troubleshooting | Common issues |
| CHANGELOG | Version history |