Keycloakデータ移行の失敗
分析でKeycloakデータの移行中の障害を検出
	サマリー
分析により、既存のlegacyDBから新しいInnoDBにKeycloakデータを移行する際に、Verrazzanoのアップグレードが失敗したことが検出されました。
ステップ
- 
dump-claimPVCが存在し、PVにバインドされているかどうかを確認します。$ k get pvc -n keycloak dump-claim # Sample Output NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE dump-claim Bound pvc-c246d7c4-3041-4164-8c1e-744dda805686 2Gi RWO standard 12m$ kubectl get pv # Sample Output NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-c246d7c4-3041-4164-8c1e-744dda805686 2Gi RWO Retain Bound keycloak/dump-claim standard 49m
- 
keycloakネームスペースのmysqlまたはmysql-cluster-secretシークレットからmysql-root passwordを取得します。パスワードは、次のステップでrootユーザーとしてMySQLサーバーにアクセスするために必要です。$ kubectl get secret -n keycloak mysql -o jsonpath='{.data.mysql-root-password}' | base64 --decode # Sample Output lvYwPJjwFB
- 
以前のKeycloakデータベース・データを新しいデータベース・インスタンスに移行する際に役立つ load-dumpポッドを作成します。$ kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: my-load-dump namespace: keycloak labels: job-name: load-dump spec: containers: - name: mysqlsh-load-dump image: ghcr.io/verrazzano/mysql-server:8.0.32 volumeMounts: - mountPath: /var/lib/dump name: keycloak-dump volumes: - name: keycloak-dump persistentVolumeClaim: claimName: dump-claim EOF
- 
pod内でシェル・セッションを開始し、次のコマンドを実行します: a.$ kubectl exec -n keycloak my-load-dump -it -- /bin/bashdumpディレクトリ権限を修正します。b.MySQLサーバーが実行中かどうかを確認します。実行されていない場合は、$ chown -R 27:27 /var/lib/dumpkeycloakネームスペースのMySQLポッドの準備ができているかどうかを確認してから、もう一度確認します。c.Keycloakデータを移行します。$ mysqladmin ping -h"mysql.keycloak.svc.cluster.local" -p{{ .RootPassword }} # Sample Output mysqld is alive$ mysqlsh -u root -p{{ .RootPassword }} -h mysql.keycloak.svc.cluster.local -e 'util.loadDump("/var/lib/dump/dump", {includeSchemas: ["keycloak"], includeUsers: ["keycloak"], loadUsers: true})'# Sample Output Loading DDL, Data and Users from '/var/lib/dump/dump' using 4 threads. Opening dump... Target is MySQL 8.0.32. Dump was produced from MySQL 8.0.29 Scanning metadata - done Checking for pre-existing objects... Executing common preamble SQL Executing DDL - done Executing user accounts SQL... NOTE: Skipping CREATE/ALTER USER statements for user 'root'@'%' NOTE: Skipping CREATE/ALTER USER statements for user 'root'@'localhost' NOTE: Skipping GRANT statements for user 'root'@'%' NOTE: Skipping GRANT statements for user 'root'@'localhost' Executing view DDL - done Starting data load 4 thds loading \ 100% (159.79 KB / 159.79 KB), 0.00 B/s, 33 / 93 tables done Recreating indexes - done Executing common postamble SQL 93 chunks (1.31K rows, 159.79 KB) for 93 tables in 1 schemas were loaded in 3 sec (avg throughput 159.79 KB/s) 0 warnings were reported during the load.
- 
db-migrationシークレットで、db-migratedフィールドを追加し、その値をtrue (base64 encoded)に設定します。これにより、Keycloakデータが手動で移行されたことがVerrazzanoプラットフォーム・オペレータに通知されます。$ k edit secret -n keycloak db-migration # Sample Output data: db-migrated: dHJ1ZQ== # true base64 encoded is dHJ1ZQ== database-dumped: dHJ1ZQ== deployment-found: dHJ1ZQ== ...
- 
load-dumpポッドを削除します。$ kubectl delete pod -n keycloak my-load-dump