docs/troubleshooting: cleanup upgrade instructions for postgres k8s (#14773)
* docs/troubleshooting: cleanup upgrade instructions for postgres k8s * website/troubleshooting: upgrade pg on k8s: use lowercase for headers * Update website/docs/troubleshooting/postgres/upgrade_kubernetes.md Signed-off-by: Tana M Berry <tanamarieberry@yahoo.com> * Update website/docs/troubleshooting/postgres/upgrade_kubernetes.md Signed-off-by: Tana M Berry <tanamarieberry@yahoo.com> * Update website/docs/troubleshooting/postgres/upgrade_kubernetes.md Signed-off-by: Tana M Berry <tanamarieberry@yahoo.com> * Update website/docs/troubleshooting/postgres/upgrade_kubernetes.md Signed-off-by: Tana M Berry <tanamarieberry@yahoo.com> * Update website/docs/troubleshooting/postgres/upgrade_kubernetes.md Signed-off-by: Tana M Berry <tanamarieberry@yahoo.com> * Update website/docs/troubleshooting/postgres/upgrade_kubernetes.md Signed-off-by: Tana M Berry <tanamarieberry@yahoo.com> * Update website/docs/troubleshooting/postgres/upgrade_kubernetes.md Signed-off-by: Tana M Berry <tanamarieberry@yahoo.com> * bump build * tweak --------- Signed-off-by: Tana M Berry <tanamarieberry@yahoo.com> Co-authored-by: Tana M Berry <tanamarieberry@yahoo.com> Co-authored-by: Tana M Berry <tana@goauthentik.io>
This commit is contained in:
		| @ -1,98 +1,161 @@ | ||||
| --- | ||||
| title: Upgrade PostgreSQL on Kubernetes | ||||
| title: Upgrading PostgreSQL on Kubernetes | ||||
| --- | ||||
|  | ||||
| ## Preparation | ||||
| This guide walks you through upgrading PostgreSQL in your authentik Kubernetes deployment. The process requires a brief downtime period while the database is migrated. | ||||
|  | ||||
| - `authentik-postgresql-0` is the Kubernetes Pod running PostgreSQL. | ||||
| :::note | ||||
| For this guide, we assume the PostgreSQL pod is named `authentik-postgresql-0`, which is the default name in the authentik Helm chart. | ||||
| ::: | ||||
|  | ||||
| ### Prerequisites | ||||
| ## Prerequisites | ||||
|  | ||||
| This migration requires some downtime, during which authentik must be stopped. To do this, run the following command: | ||||
| - `kubectl` access with permissions to `scale` deployments and `exec` into pods | ||||
| - Your existing `values.yaml` file used for authentik deployment | ||||
| - Basic understanding of Kubernetes and Helm commands | ||||
|  | ||||
| ## Overview of workflow | ||||
|  | ||||
| The basic steps to upgrades PostgreSQL on Kubernetes are: | ||||
|  | ||||
| 1. Stop authentik services | ||||
| 2. Back up the database | ||||
| 3. Prepare the data directory | ||||
| 4. Upgrade PostgreSQL | ||||
| 5. Restore database content | ||||
| 6. Restart authentik services | ||||
|  | ||||
| ## Stop authentik services | ||||
|  | ||||
| Begin by scaling down authentik services to prevent database access during the migration: | ||||
|  | ||||
| ```shell | ||||
| kubectl scale deploy --replicas 0 authentik-server | ||||
| kubectl scale deploy --replicas 0 authentik-worker | ||||
| ``` | ||||
|  | ||||
| ### Dump the current database | ||||
| ## Back up the database | ||||
|  | ||||
| Run `kubectl exec -it authentik-postgresql-0 -- bash` to get a shell in the PostgreSQL pod. | ||||
|  | ||||
| Run the following commands to dump the current data into a `.sql` file: | ||||
| Connect to your PostgreSQL pod: | ||||
|  | ||||
| ```shell | ||||
| # This is the path where the PVC is mounted, so we'll place the dump here too | ||||
| kubectl exec -it authentik-postgresql-0 -- bash | ||||
| ``` | ||||
|  | ||||
| After you are connected, execute these commands to create a database backup: | ||||
|  | ||||
| ```shell | ||||
| # Navigate to the PostgreSQL data directory | ||||
| cd /bitnami/postgresql/ | ||||
| # Set the postgres password based on the `POSTGRES_POSTGRES_PASSWORD` environment variable | ||||
|  | ||||
| # Set the PostgreSQL password from environment variable | ||||
| export PGPASSWORD=$POSTGRES_POSTGRES_PASSWORD | ||||
| # Dump the authentik database into an sql file | ||||
| pg_dump -U $POSTGRES_USER $POSTGRES_DB > dump-11.sql | ||||
|  | ||||
| # Create a full database dump | ||||
| pg_dump -U $POSTGRES_USER $POSTGRES_DB > /bitnami/postgresql/dump.sql | ||||
| ``` | ||||
|  | ||||
| ### Stop PostgreSQL and start the upgrade | ||||
|  | ||||
| To upgrade, change the following entries in your `values.yaml` used to deploy authentik: | ||||
|  | ||||
| ```yaml | ||||
| postgresql: | ||||
|     diagnosticMode: | ||||
|         enabled: true | ||||
|     image: | ||||
|         tag: 15.2.0-debian-11-r26 | ||||
| ``` | ||||
|  | ||||
| Now run `helm upgrade --install authentik authentik/authentik -f values.yaml` to apply these changes. Depending on your configuration, you might have to repeat the steps from [Prerequisites](#prerequisites). | ||||
|  | ||||
| After the upgrade is finished, you should have a new PostgreSQL pod running with the updated image. | ||||
|  | ||||
| ### Remove the old data | ||||
|  | ||||
| Because the PVC mounted by the PostgreSQL pod still contains the old data, we need to remove/rename that data, so that PostgreSQL can initialize it with the new version. | ||||
|  | ||||
| Run `kubectl exec -it authentik-postgresql-0 -- bash` to get a shell in the PostgreSQL pod. | ||||
|  | ||||
| Run the following commands to move the old data: | ||||
| :::tip | ||||
| Consider copying the dump file to a safe location outside the pod: | ||||
|  | ||||
| ```shell | ||||
| # This is the path where the PVC is mounted | ||||
| cd /bitnami/postgresql/ | ||||
| # Move Postgres' data folder to data-11, which is the version we're upgrading to. | ||||
| # The data folder can also be deleted; however it is recommended to rename it first | ||||
| # in case the upgrade fails. | ||||
| mv data data-11 | ||||
| # From a separate terminal | ||||
| kubectl cp authentik-postgresql-0:/bitnami/postgresql/dump.sql ./authentik-db-backup.sql | ||||
| ``` | ||||
|  | ||||
| ### Restart PostgreSQL | ||||
| This ensures you have a backup even if something goes wrong with the pod or storage. | ||||
| ::: | ||||
|  | ||||
| In the step [Stop PostgreSQL and start the upgrade](#stop-postgresql-and-start-the-upgrade), we enabled the _diagnostic mode_, which means the PostgreSQL pod is running, but the actual Postgres process isn't running. Now that we've removed the old data directory, we can disable the diagnostic mode. | ||||
| ## Prepare the data directory | ||||
|  | ||||
| Once again, change the following entries in your `values.yaml` used to deploy authentik: | ||||
| While still connected to the PostgreSQL pod, prepare the data directory for the upgrade: | ||||
|  | ||||
| ```shell | ||||
| # Ensure you're in the PostgreSQL data directory | ||||
| cd /bitnami/postgresql/ | ||||
|  | ||||
| # Verify the SQL dump exists and has content | ||||
| ls -lh dump.sql | ||||
|  | ||||
| # Preserve the existing data by renaming the directory | ||||
| mv data data-old | ||||
| ``` | ||||
|  | ||||
| :::caution | ||||
| Do not delete the old data directory immediately. Keeping it as `data-old` allows for recovery if the upgrade encounters issues. | ||||
| ::: | ||||
|  | ||||
| ## Upgrade PostgreSQL | ||||
|  | ||||
| Now update your `values.yaml` to specify the new PostgreSQL version: | ||||
|  | ||||
| ```yaml | ||||
| postgresql: | ||||
|     image: | ||||
|         tag: 15.2.0-debian-11-r26 | ||||
|         tag: <NEW_VERSION> | ||||
| ``` | ||||
|  | ||||
| And once again run `helm upgrade --install authentik authentik/authentik -f values.yaml` to apply these changes. Depending on your configuration, you might have to repeat the steps from [Prerequisites](#prerequisites). | ||||
| Apply these changes using Helm to deploy the updated configuration. | ||||
|  | ||||
| After the PostgreSQL pod is running again, we need to restore the data from the dump we created above. | ||||
| This will restart the PostgreSQL pod with the new image. When the pod starts, PostgreSQL will initialize a new, empty data directory since the previous directory was renamed. | ||||
|  | ||||
| Run `kubectl exec -it authentik-postgresql-0 -- bash` to get a shell in the PostgreSQL pod. | ||||
| ## Restore database content | ||||
|  | ||||
| Run the following commands to restore the data: | ||||
| Connect to the PostgreSQL pod again: | ||||
|  | ||||
| ```shell | ||||
| # This is the path where the PVC is mounted | ||||
| cd /bitnami/postgresql/ | ||||
| # Set the Postgres password based on the `POSTGRES_POSTGRES_PASSWORD` environment variable. | ||||
| export PGPASSWORD=$POSTGRES_POSTGRES_PASSWORD | ||||
| psql -U $POSTGRES_USER $POSTGRES_DB < dump-11.sql | ||||
| kubectl exec -it authentik-postgresql-0 -- bash | ||||
| ``` | ||||
|  | ||||
| After the last command finishes, all of the data is restored, and you can restart authentik. | ||||
| Restore your database from the backup: | ||||
|  | ||||
| ### Restarting authentik | ||||
| ```shell | ||||
| # Navigate to the PostgreSQL directory | ||||
| cd /bitnami/postgresql/ | ||||
|  | ||||
| Run `helm upgrade --install authentik authentik/authentik -f values.yaml` once again, which will restart your authentik server and worker containers. | ||||
| # Verify your dump file is still there | ||||
| ls -lh dump.sql | ||||
|  | ||||
| # Set the PostgreSQL password | ||||
| export PGPASSWORD=$POSTGRES_POSTGRES_PASSWORD | ||||
|  | ||||
| # Import the database dump | ||||
| psql -U $POSTGRES_USER $POSTGRES_DB < dump.sql | ||||
| ``` | ||||
|  | ||||
| ## Restart authentik services | ||||
|  | ||||
| After the database restoration completes successfully, restart authentik using Helm with your updated configuration. | ||||
|  | ||||
| This will scale your authentik server and worker deployments back to their original replica counts. | ||||
|  | ||||
| ## Troubleshooting | ||||
|  | ||||
| If you encounter issues during the upgrade process: | ||||
|  | ||||
| - Check PostgreSQL logs: | ||||
|     ```shell | ||||
|     kubectl logs authentik-postgresql-0 | ||||
|     ``` | ||||
| - Verify the values in your `values.yaml` file match the recommended settings | ||||
| - Ensure you have sufficient storage available for both the database dump and the database itself | ||||
|  | ||||
| ### Dump file not found | ||||
|  | ||||
| If your dump file is missing after upgrading: | ||||
|  | ||||
| - You may need to restore from the external backup if you copied it out of the pod | ||||
| - The volume might have been recreated if you're using ephemeral storage | ||||
|  | ||||
| ### Restoring the original database | ||||
|  | ||||
| For persistent problems, you can restore from the `data-old` directory if needed: | ||||
|  | ||||
| ```shell | ||||
| kubectl exec -it authentik-postgresql-0 -- bash | ||||
| cd /bitnami/postgresql/ | ||||
| mv data data-new-failed | ||||
| mv data-old data | ||||
| ``` | ||||
|  | ||||
| Then restart PostgreSQL with the original version in your `values.yaml`. | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Dominic R
					Dominic R