第8章 PostgreSQL 9 から PostgreSQL 13 への移行
2021 年 11 月 11 日以降、PostgreSQL バージョン 9.6 はサポートされなくなり、CodeReady Workspaces チームはすべてのユーザーがバージョン 13 に移行することを推奨しています。
以下の手順に従って、データの損失なしに、新しいバージョンの PostgreSQL に正常に移行してください。
前提条件
-
oc
ツールが利用できる。 - OpenShift で実行される CodeReady Workspaces のインスタンス。
手順
- CodeReady Workspaces インスタンスの実行中のすべてのワークスペースの Git リポジトリーに変更を保存し、プッシュします。
- CodeReady Workspaces インスタンスのすべてのワークスペースを停止します。
CodeReady Workspaces および RH-SSO デプロイメントをスケールダウンします。
oc scale deployment codeready --replicas=0 -n openshift-workspaces oc scale deployment keycloak --replicas=0 -n openshift-workspaces
利用可能なデータベースのバックアップを作成します。
POSTGRES_POD=$(oc get pods -n openshift-workspaces | grep postgres | awk '{print $1}') CHE_POSTGRES_DB=$(oc get checluster/codeready-workspaces -n openshift-workspaces -o json | jq '.spec.database.chePostgresDb') oc exec -it $POSTGRES_POD -n openshift-workspaces -- bash -c "pg_dump $CHE_POSTGRES_DB > /tmp/che.sql" oc exec -it $POSTGRES_POD -n openshift-workspaces -- bash -c "pg_dump keycloak > /tmp/keycloak.sql"
取得したバックアップをローカルファイルシステムにコピーします。
oc cp openshift-workspaces/$POSTGRES_POD:/tmp/che.sql che.sql oc cp openshift-workspaces/$POSTGRES_POD:/tmp/keycloak.sql keycloak.sql
PostgreSQL デプロイメントをスケールダウンします。
oc scale deployment postgres --replicas=0 -n openshift-workspaces
古いデータをクリーンアップするために、対応する PVC ユニットを削除します。
oc delete pvc postgres-data -n openshift-workspaces
上記のステップから PVC を削除した後に、新規 PVC は自動的に数秒で表示されます。
新規 PostgreSQL データベースのバージョンを 13.3 に設定します。
oc patch checluster codeready-workspaces -n openshift-workspaces --type=json -p '[{"op": "replace", "path": "/spec/database/postgresVersion", "value": "13.3"}]'
PostgreSQL デプロイメントをスケールアップします。
oc scale deployment postgres --replicas=1 -n openshift-workspaces oc wait --for=condition=ready pod -l app.kubernetes.io/component=postgres -n openshift-workspaces --timeout=120s
データベースをプロビジョニングします。
POSTGRES_POD=$(oc get pods -n openshift-workspaces | grep postgres | awk '{print $1}') OPERATOR_POD=$(oc get pods -n openshift-workspaces | grep codeready-operator | awk '{print $1}') IDENTITY_POSTGRES_SECRET=$(oc get checluster/codeready-workspaces -n openshift-workspaces -o json | jq -r '.spec.auth.identityProviderPostgresSecret') IDENTITY_POSTGRES_PASSWORD=$(if [ -z "$IDENTITY_POSTGRES_SECRET" ] || [ $IDENTITY_POSTGRES_SECRET = "null" ]; then oc get checluster/codeready-workspaces -n openshift-workspaces -o json | jq -r '.spec.auth.identityProviderPostgresPassword'; else oc get secret $IDENTITY_POSTGRES_SECRET -n openshift-workspaces -o json | jq -r '.data.password' | base64 -d; fi) oc exec -it $POSTGRES_POD -n openshift-workspaces -- bash -c "psql postgres -tAc \"CREATE USER keycloak WITH PASSWORD '$IDENTITY_POSTGRES_PASSWORD'\"" oc exec -it $POSTGRES_POD -n openshift-workspaces -- bash -c "psql postgres -tAc \"CREATE DATABASE keycloak\"" oc exec -it $POSTGRES_POD -n openshift-workspaces -- bash -c "psql postgres -tAc \"GRANT ALL PRIVILEGES ON DATABASE keycloak TO keycloak\"" POSTGRES_SECRET=$(oc get checluster/codeready-workspaces -n openshift-workspaces -o json | jq -r '.spec.database.chePostgresSecret') CHE_USER=$(if [ -z "$POSTGRES_SECRET" ] || [ $POSTGRES_SECRET = "null" ]; then oc get checluster/codeready-workspaces -n openshift-workspaces -o json | jq -r '.spec.database.chePostgresUser'; else oc get secret $POSTGRES_SECRET -n openshift-workspaces -o json | jq -r '.data.user' | base64 -d; fi) oc exec -it $POSTGRES_POD -n openshift-workspaces -- bash -c "psql postgres -tAc \"ALTER USER $CHE_USER WITH SUPERUSER\""
バックアップを PostgreSQL Pod にコピーします。
oc cp che.sql openshift-workspaces/$POSTGRES_POD:/tmp/che.sql oc cp keycloak.sql openshift-workspaces/$POSTGRES_POD:/tmp/keycloak.sql
データベースを復元します。
oc exec -it $POSTGRES_POD -n openshift-workspaces -- bash -c "psql keycloak < /tmp/keycloak.sql" oc exec -it $POSTGRES_POD -n openshift-workspaces -- bash -c "psql $CHE_POSTGRES_DB < /tmp/che.sql"
RH-SSO および CodeReady Workspaces デプロイメントをスケールアップします。
oc scale deployment keycloak --replicas=1 -n openshift-workspaces oc wait --for=condition=ready pod -l app.kubernetes.io/component=keycloak -n openshift-workspaces --timeout=120s oc scale deployment codeready --replicas=1 -n openshift-workspaces oc wait --for=condition=ready pod -l app.kubernetes.io/component=codeready -n openshift-workspaces --timeout=120s