第5章 チュートリアル
5.1. ワークフローの例: OpenShift イメージバージョン用に新規 Red Hat Single Sign-On に移行する既存データベースの更新 リンクのコピーリンクがクリップボードにコピーされました!
- 以前のバージョンの Red Hat Single Sign-On for OpenShift からバージョン 7.4.10.GA へのローリングアップデートは、データベースおよびキャッシュが後方互換性がないためです。
- アップグレードの前に、OpenShift の以前のバージョンの Red Hat Single Sign-On を実行するすべてのインスタンスを停止します。同じデータベースに対して同時に実行することはできません。
- 事前に生成されたスクリプトは利用できず、データベースに応じて動的に生成されます。
Red Hat Single Sign-On 7.4.10.GA は、データベーススキーマを自動的に移行 するか、手動 で行うこともできます。
デフォルトでは、Red Hat Single Sign-On 7.4.10.GA を初めて起動すると、データベースは自動的に移行されます。
5.1.1. データベースの自動移行 リンクのコピーリンクがクリップボードにコピーされました!
このプロセスは、PostgreSQL データベース (一時的または永続的モードでデプロイ) がサポートする Red Hat Single Sign-On for OpenShift イメージの以前のバージョンを別の Pod で 実行 することを前提としています。
Red Hat Single Sign-On 7.4.10.GA にアップグレードする前に、以前のバージョンの Red Hat Single Sign-On for OpenShift イメージを実行するすべての Pod を停止します。これは、同じデータベースに対して同時に実行できないためです。
データベーススキーマを自動的に移行するには、以下の手順に従います。
Red Hat Single Sign-On for OpenShift イメージの以前のバージョンを実行して、コンテナーをデプロイするために使用されるデプロイメント設定を特定します。
oc get dc -o name --selector=application=sso
$ oc get dc -o name --selector=application=sso deploymentconfig/sso deploymentconfig/sso-postgresqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 現在の名前空間で、以前のバージョンの Red Hat Single Sign-On for OpenShift イメージを実行するすべての Pod を停止します。
oc scale --replicas=0 dc/sso
$ oc scale --replicas=0 dc/sso deploymentconfig "sso" scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 既存のデプロイメント設定のイメージ変更トリガーを更新して、Red Hat Single Sign-On 7.4.10.GA イメージを参照します。
oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso74-openshift-rhel8:7.4"}]'$ oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso74-openshift-rhel8:7.4"}]' "sso" patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow イメージ変更トリガーで定義した最新のイメージをもとに、新しい Red Hat Single Sign-On 7.4.10.GA イメージのロールアウトを開始します。
oc rollout latest dc/sso
$ oc rollout latest dc/sso deploymentconfig "sso" rolled outCopy to Clipboard Copied! Toggle word wrap Toggle overflow 変更したデプロイメント設定を使用して、Red Hat Single Sign-On 7.4.10.GA コンテナーをデプロイします。
oc scale --replicas=1 dc/sso
$ oc scale --replicas=1 dc/sso deploymentconfig "sso" scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow (必要に応じて) データベースが正常に更新されたことを確認します。
oc get pods --selector=application=sso
$ oc get pods --selector=application=sso NAME READY STATUS RESTARTS AGE sso-4-vg21r 1/1 Running 0 1h sso-postgresql-1-t871r 1/1 Running 0 2hCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc logs sso-4-vg21r | grep 'Updating'
$ oc logs sso-4-vg21r | grep 'Updating' 11:23:45,160 INFO [org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider] (ServerService Thread Pool -- 58) Updating database. Using changelog META-INF/jpa-changelog-master.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.2. データベースの手動移行 リンクのコピーリンクがクリップボードにコピーされました!
事前に生成されたスクリプトは利用できません。それらはデータベースに応じて動的に生成されます。Red Hat Single Sign-On 7.4.10.GA を使用すると、後でデータベースに手動で適用できる SQL ファイルにこれらのファイルを生成およびエクスポートできます。データベースの SQL 移行ファイルを動的に生成するには、以下を実行します。
- Red Hat Single Sign-On 7.4.10.GA を正しいデータソースで設定します。
standalone-openshift.xmlファイルに以下の設定オプションを設定します。-
initializeEmpty=false -
migrationStrategy=manual -
migrationExportは、出力 SQL 移行ファイルが保存される Pod のファイルシステム上の場所に移行します (例:migrationExport="${jboss.home.dir}/keycloak-database-update.sql")。
-
詳細は、「 Red Hat Single Sign-On 7.4.10.GA のデータベース設定 」を参照してください。
データベースの移行プロセスでは、データスキーマの更新を処理し、データの操作を実行します。したがって、SQL 移行ファイルを動的に生成する前に、以前のバージョンの Red Hat Single Sign-On for OpenShift イメージを実行するすべての Pod を停止します。
このプロセスは、PostgreSQL データベース (一時的または永続的モードでデプロイ) がサポートする Red Hat Single Sign-On for OpenShift イメージの以前のバージョンを別の Pod で 実行 することを前提としています。
次のコマンドを実行して、データベースの SQL 移行ファイルを生成し、取得します。
OpenShift データベース移行ジョブ のテンプレートを準備し、SQL ファイルを生成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cp job-to-migrate-db-to-sso74.yaml.orig \ job-to-migrate-db-to-sso74.yaml$ cp job-to-migrate-db-to-sso74.yaml.orig \ job-to-migrate-db-to-sso74.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以前のバージョンの Red Hat Single Sign-On for OpenShift イメージを実行するのに使用されるデプロイメント設定から、データソース定義およびデータベースアクセス認証情報をデータベース移行ジョブのテンプレートの適切な場所にコピーします。
以下のスクリプトを使用して、
ssoという名前のデプロイメント設定から、job-to-migrate-db-to-sso74.yamlという名前のデータベースジョブ移行テンプレートに、DB_SERVICE_PREFIX_MAPPING変数およびTX_DATABASE_PREFIX_MAPPING変数の値と、特定のデータソース固有の環境変数の値 (<PREFIX>_JNDI、<PREFIX>_USERNAME、<PREFIX>_PASSWORD、および<PREFIX>_DATABASE) をコピーします。注記DB_SERVICE_PREFIX_MAPPING環境変数では、<name>-<database_type>=<PREFIX> トリプレットのコンマ区切りリスト を値として指定することができますが、この例のスクリプトでは、デモのために 1 つのデータソースのトリプレット定義のみを受け付けます複数のデータソース定義トリプレットを処理するスクリプトを変更できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow スクリプトを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 事前設定されたソース を使用して Red Hat Single Sign-On 7.4.10.GA データベース移行イメージをビルドし、ビルドが完了するまで待ちます。
oc get is -n openshift | grep sso74 | cut -d ' ' -f1
$ oc get is -n openshift | grep sso74 | cut -d ' ' -f1 sso74-openshift-rhel8Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc logs -f bc/sso74-db-migration-image --follow
$ oc logs -f bc/sso74-db-migration-image --follow Cloning "https://github.com/iankko/openshift-examples.git#KEYCLOAK-8500" ... ... Push successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow データベース移行ジョブのテンプレート (
job-to-migrate-db-to-sso74.yaml) をビルドされたsso74-db-migration-imageイメージへの参照で更新します。イメージの docker pull 参照を取得します。
PULL_REF=$(oc get istag -n $(oc project -q) --no-headers | grep sso74-db-migration-image | tr -s ' ' | cut -d ' ' -f 2)
$ PULL_REF=$(oc get istag -n $(oc project -q) --no-headers | grep sso74-db-migration-image | tr -s ' ' | cut -d ' ' -f 2)Copy to Clipboard Copied! Toggle word wrap Toggle overflow ジョブテンプレートの <<SSO_IMAGE_VALUE>> フィールドを、プル仕様に置き換えます。
sed -i "s#<<SSO_IMAGE_VALUE>>#$PULL_REF#g" job-to-migrate-db-to-sso74.yaml
$ sed -i "s#<<SSO_IMAGE_VALUE>>#$PULL_REF#g" job-to-migrate-db-to-sso74.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - フィールドが更新されていることを確認します。
ジョブテンプレートからデータベース移行ジョブをインスタンス化します。
oc create -f job-to-migrate-db-to-sso74.yaml
$ oc create -f job-to-migrate-db-to-sso74.yaml job "job-to-migrate-db-to-sso74" createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要データベースの移行プロセスでは、データスキーマの更新を処理し、データの操作を実行します。したがって、SQL 移行ファイルを動的に生成する前に、以前のバージョンの Red Hat Single Sign-On for OpenShift イメージを実行するすべての Pod を停止します。
Red Hat Single Sign-On for OpenShift イメージの以前のバージョンを実行して、コンテナーをデプロイするために使用されるデプロイメント設定を特定します。
oc get dc -o name --selector=application=sso
$ oc get dc -o name --selector=application=sso deploymentconfig/sso deploymentconfig/sso-postgresqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 現在の名前空間で、以前のバージョンの Red Hat Single Sign-On for OpenShift イメージを実行するすべての Pod を停止します。
oc scale --replicas=0 dc/sso
$ oc scale --replicas=0 dc/sso deploymentconfig "sso" scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow データベースの移行ジョブを実行し、Pod が正しく実行されるのを待機します。
oc get jobs
$ oc get jobs NAME DESIRED SUCCESSFUL AGE job-to-migrate-db-to-sso74 1 0 3mCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale --replicas=1 job/job-to-migrate-db-to-sso74
$ oc scale --replicas=1 job/job-to-migrate-db-to-sso74 job "job-to-migrate-db-to-sso74" scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods
$ oc get pods NAME READY STATUS RESTARTS AGE sso-postgresql-1-n5p16 1/1 Running 1 19h job-to-migrate-db-to-sso74-b87bb 1/1 Running 0 1m sso74-db-migration-image-1-build 0/1 Completed 0 27mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記デフォルトでは、データベース移行ジョブは、移行ファイルの生成後
600 秒後に自動的に終了します。この期間を調整できます。Pod から動的に生成された SQL データベース移行ファイルを取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
keycloak-database-update.sqlファイルを検査して、Red Hat Single Sign-On 7.4.10.GA バージョンへの手動データベース更新内で実行される変更を確認します。 データベースの更新を手動で適用します。
PostgreSQL データベース (一時的または永続的モードでデプロイ) がサポートする Red Hat Single Sign-On for OpenShift イメージの以前のバージョンを別の Pod で実行する場合は、以下のコマンドを実行します。
生成された SQL 移行ファイルを PostgreSQL Pod にコピーします。
oc rsync --no-perms=true ./db-update/ sso-postgresql-1-n5p16:/tmp
$ oc rsync --no-perms=true ./db-update/ sso-postgresql-1-n5p16:/tmp sending incremental file list sent 77 bytes received 11 bytes 176.00 bytes/sec total size is 26,333 speedup is 299.24Copy to Clipboard Copied! Toggle word wrap Toggle overflow PostgreSQL Pod へのシェルセッションを開始します。
oc rsh sso-postgresql-1-n5p16
$ oc rsh sso-postgresql-1-n5p16 sh-4.2$Copy to Clipboard Copied! Toggle word wrap Toggle overflow psqlツールを使用して、データベースの更新を手動で適用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要<PREFIX>_USERNAMEおよび<PREFIX>_DATABASEを、前のセクション で取得した実際のデータベースの認証情報に置き換えます。また、プロンプトが表示されたら、データベースのパスワードとして<PREFIX>_PASSWORDの値を使用します。- PostgreSQL Pod へのシェルセッションを閉じます。「イメージ変更トリガーの更新手順」に進みます。
既存のデプロイメント設定のイメージ変更トリガーを更新して、Red Hat Single Sign-On 7.4.10.GA イメージを参照します。
oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso74-openshift-rhel8:7.4"}]'$ oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso74-openshift-rhel8:7.4"}]' "sso" patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow イメージ変更トリガーで定義した最新のイメージをもとに、新しい Red Hat Single Sign-On 7.4.10.GA イメージのロールアウトを開始します。
oc rollout latest dc/sso
$ oc rollout latest dc/sso deploymentconfig "sso" rolled outCopy to Clipboard Copied! Toggle word wrap Toggle overflow 変更したデプロイメント設定を使用して、Red Hat Single Sign-On 7.4.10.GA コンテナーをデプロイします。
oc scale --replicas=1 dc/sso
$ oc scale --replicas=1 dc/sso deploymentconfig "sso" scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow