2.3. システムデータベースのシークレットフィールドのアップグレード
3scale 2.5 の変更の一環として、system-mysql
DeploymentConfig の一部のデータベース環境変数は、値を直接設定する代わりにシークレットから割り当てられます。これらには以下が含まれます。
-
MYSQL_USER 環境変数は、
システムデータベース
のシークレットフィールド DB_USER から値を取得します。 -
MYSQL_PASSWORD 環境変数は、
システムデータベース
のシークレットフィールド DB_PASSWORD から値を取得します。
既存の 3scale 2.4 インストールを 2.5 にアップグレードするには、以下の手順に従います。
次のコマンドが既存の Pod と DeploymentConfig を返すこと、および両方の出力が空でないことを確認します。
$ oc get pod | grep -i system-mysql | awk '{print $1}' $ oc get dc system-mysql
現在の DeploymentConfig 名、および DeploymentConfig の MySQL ユーザーと MySQL 環境変数の値を保存します。
MYSQL_DC="system-mysql" RESULT_MYSQL_USER=$(oc get dc ${MYSQL_DC} -o json | jq -r '.spec.template.spec.containers[0].env[] | select(.name == "MYSQL_USER").value') RESULT_MYSQL_PASSWORD=$(oc get dc ${MYSQL_DC} -o json | jq -r '.spec.template.spec.containers[0].env[] | select(.name == "MYSQL_PASSWORD").value')
RESULT_MYSQL_USER と RESULT_MYSQL_PASSWORD に既存の値があり、空でないことを確認します。
$ echo $RESULT_MYSQL_USER $ echo $RESULT_MYSQL_PASSWORD
- 後で参照できるように、これらの値を保存します。
次のコマンドの出力を保存して、
system-mysql
環境全体のバックアップを作成します。$ oc set env "dc/${MYSQL_DC}" --list
さらに、次のコマンドの出力を保存して、
system-database
secret とsystem-database
DeploymentConfig の現在の値のバックアップを作成します。$ oc get secret system-database -o yaml $ oc get dc system-mysql -o yaml
MySQL ユーザーとパスワードの現在の値を
system-database
シークレットに追加します。$ oc patch secret/system-database -p "{\"stringData\": {\"DB_USER\": \"${RESULT_MYSQL_USER}\"}}" $ oc patch secret/system-database -p "{\"stringData\": {\"DB_PASSWORD\": \"${RESULT_MYSQL_PASSWORD}\"}}"
シークレットが正常に編集されたことを確認します。次のコマンドは、それぞれ RESULT_MYSQL_USER と RESULT_MYSQL_PASSWORD の同じ内容を返す必要があります。
$ oc get secret system-database -o json | jq -r '.data["DB_USER"]' | base64 -d $ oc get secret system-database -o json | jq -r '.data["DB_PASSWORD"]' | base64 -d
system-mysql
DeploymentConfig を手動で編集して、MYSQL_USER および MYSQL_PASSWORD の値を新しく追加されたフィールドからsystem-database
シークレットに設定します。警告この手順を実行すると、
system-mysql
DeploymentConfig の再デプロイがトリガーされ、Pod の再作成中に一時的にサービスが失われます。$ oc edit dc $MYSQL_DC
編集中に、
env
セクションを見つけます。以下が表示されるはずです。- name: MYSQL_USER value: <current_mysql_user_value> - name: MYSQL_PASSWORD value: <current_mysql_password_value>
そのコンテンツを次のものに置き換えます。
- name: MYSQL_USER valueFrom: secretKeyRef: key: DB_USER name: system-database - name: MYSQL_PASSWORD valueFrom: secretKeyRef: key: DB_PASSWORD name: system-database
- 変更を保存して終了します。
この後、DeploymentConfig は Pod を再デプロイします。system-mysql Pod が再び正しい状態で実行され、プラットフォームが再び正しく動作することを確認します。たとえば、DeploymentConfig が 1 に設定されていることを確認できます。
$ oc get dc ${MYSQL_DC}
そして、Pod は最近実行されているはずです。
$ oc get pods | grep -i system-mysql
system-mysql DeploymentConfig の環境変数がシークレットから収集されていることも確認できます。
$ oc set env "dc/${MYSQL_DC}" --list
結果の一部として、次の出力が表示されます。
# MYSQL_USER from secret system-database, key DB_USER # MYSQL_PASSWORD from secret system-database, key DB_PASSWORD
MYSQL_USER と MYSQL_PASSWORD には特定の値は含まれていません。
その他の注意事項:
- system-mysql の再起動中に、system-app、system-sidekiq、および system-sphinx Pod のフェイルオーバーが予想される場合がありますが、それらを再デプロイする必要はおそらくありません。
- Pod の復元に失敗した場合は、対応する DeploymentConfig を手動で再デプロイします。
- フェイルオーバーを防ぐために、移行手順にメンテナンスウィンドウを追加して、system-mysql が再起動する直前に DeploymentConfig をゼロにスケールダウンし、再起動後に再びスケールアップして、readiness プローブを渡すことができます。