バンドルされているPostgreSQLバージョンのアップグレード

note
これらの手順は、バンドルされているPostgreSQLのチャート(postgresql.install はfalseではありません)を使用している場合であり、外部のPostgreSQLセットアップのためのものではありません。

バンドルされているPostgreSQLチャートを使用してPostgreSQLの新しいメジャーバージョンに変更する場合は、既存のデータベースのバックアップを行い、新しいデータベースにリストアします。

note
このチャートの7.0.0 リリースの一環として、デフォルトの PostgreSQL のバージョンを12.7.0 から14.8.0 にアップグレードしました。 これはPostgreSQL チャートのバージョンを8.9.4 から12.5.2 にアップグレードすることで行います。

これはドロップイン置き換えではありません。データベースをアップグレードするには、手動で手順を実行する必要があります。その手順は、アップグレードの手順に記載されています。

note
このChartの5.0.0 リリースの一環として、バンドルされているPostgreSQLのバージョンを11.9.0 から12.7.0 にアップグレードしました。 これはドロップインで置き換えるものではありません。データベースをアップグレードするには、手動で手順を実行する必要があります。その手順は、アップグレード手順の中に文書化されています。
note
このChartの4.0.0 リリースの一環として、バンドルされているPostgreSQLのChartを 7.7.0 から8.9.4へアップグレードしました。 これは、ドロップインで置き換えるものではありません。データベースをアップグレードするには、手動で手順を実行する必要があります。その手順は、アップグレード手順の中に文書化されています。

バンドルされている PostgreSQL をアップグレードする手順

note
7.0.0 以降、GitLab チャートは PostgreSQL の認証情報を PostgreSQL インスタンスの内部にファイルとしてマウントしなくなりました。これは、postgresql.auth.usePasswordFilesfalse に設定することで行われます。つまり、このコンポーネントに限り、データベースのクレデンシャルはパスワードファイルではなく環境変数として渡されます。

これはアップストリームPostgreSQLチャートのイシューによるものです。PostgreSQLのパスワードに環境変数を使用せず、ファイルを使用したい場合は、以下の手順を実行する前に、既存のPostgreSQLのパスワードSecretを手動で編集し、PostgreSQL Chartのパスワードファイルを有効にする手順に従ってください。

既存のデータベースを準備します。

以下に注意してください。

  • バンドルされているPostgreSQLチャート(postgresql.install がfalse)を使用していない場合は、これらの手順を実行する必要はありません。
  • 同じ名前空間に複数のChartをインストールしている場合。Helmのリリース名をdatabase-upgradeスクリプトにも渡す必要があるかもしれません。後で提供するコマンド例のbash -s STAGEbash -s -- -r RELEASE STAGE に置き換えてください。
  • kubectl コンテキストのデフォルト以外の名前空間に Chart をインストールした場合は、その名前空間を database-upgrade スクリプトに渡す必要があります。後で説明するコマンド例のbash -s STAGEbash -s -- -n NAMESPACE STAGE に置き換えてください。このオプションは-r RELEASE とともに使用できます。kubectl config set-context --current --namespace=NAMESPACEを実行するか、kubectx](https://github.com/ahmetb/kubectx)から[kubens を使用して、コンテキストのデフォルトのネームスペースを設定できます。

pre ステージでは、Toolboxのbackup-utilityスクリプトを使用してデータベースのバックアップが作成され、設定されたs3バケット(デフォルトではMinIO)に保存されます:

# GITLAB_RELEASE should be the version of the chart you are installing, starting with 'v': v6.0.0
curl -s "https://gitlab.com/gitlab-org/charts/gitlab/-/raw/${GITLAB_RELEASE}/scripts/database-upgrade" | bash -s pre

既存のPostgreSQLデータの削除

note
PostgreSQLのデータ形式が変更されたため、リリースをアップグレードする前に、既存のPostgreSQL StatefulSetを削除する必要があります。StatefulSetは次のステップで再作成します。
caution
前のステップでデータベースのバックアップを作成していることを確認してください。バックアップがないと、GitLabのデータは失われます。
kubectl delete statefulset RELEASE-NAME-postgresql
kubectl delete pvc data-RELEASE_NAME-postgresql-0

GitLabのアップグレード

GitLabのアップグレードは、標準的な手順に従い、以下の追加を行います:

アップグレードコマンドの以下のフラグを使ってマイグレーションを無効にします:

  1. --set gitlab.migrations.enabled=false

バンドルされている PostgreSQL については、後のステップでデータベースのマイグレーションを実行します。

データベースのリストア

以下に注意してください。

  • このスクリプトを正常に実行するには、Bash 4.0以上を使用している必要があります。
  1. Toolbox ポッドのアップグレードが完了するまで待ちます。RELEASE_NAME には GitLab のリリース名を指定します。helm list

    kubectl rollout status -w deployment/RELEASE_NAME-toolbox
    
  2. Toolbox ポッドが正常にデプロイされたら、post の手順を実行します:

    # GITLAB_RELEASE should be the version of the chart you are installing, starting with 'v': v6.0.0
    curl -s "https://gitlab.com/gitlab-org/charts/gitlab/-/raw/${GITLAB_RELEASE}/scripts/database-upgrade" | bash -s post
    

    このステップでは次のことを行います:

    1. webservicesidekiqgitlab-exporter のデプロイに対してレプリカを 0 に設定します。こ れに よ り 、 バ ッ ク ア ッ プの復元中に他のアプ リ ケーシ ョ ンがデー タ ベース を変更で き な く な り ます。
    2. 前ステージで作成したバックアップからデータベースをリストアします。
    3. 新しいバージョンのデータベースマイグレーションを実行します。
    4. 最初のステップからデプロイを再開します。

データベースアップグレードプロセスのトラブルシューティング

  • アップグレード中に何らかの障害が発生した場合は、gitlab-upgrade-check ポッドの説明で詳細を確認するとよいでしょう:

     kubectl get pods -lrelease=RELEASE,app=gitlab
     kubectl describe pod <gitlab-upgrade-check-pod-full-name>
    

既存のPostgreSQLパスワードを編集する Secret

note
これは7.0.0 、PostgreSQLサービスコンテナ内部でパスワードファイルを使用するように強制する場合のみです。

新しいバージョンのPostgreSQL Chartでは、Secrets内のパスワードを参照するために異なるキーを使用します。postgresql-passwordpostgresql-postgres-password の代わりに、passwordpostgres-passwordを使用するようになりました。これらのキーはRELEASE-postgresql-password のシークレットで値を変更_せずに_変更する必要があります。

このシークレットはGitLab chartによって最初に生成され、アップグレード中やアップグレード後に変更されることはありません。そのため、シークレットを編集してシークレットを変更する必要があります。

シークレットを編集した後は、Helm upgrade valuespostgresql.auth.usePasswordFilestrue に設定_しなければなりません_。デフォルトはfalse です。

以下のスクリプトはシークレットを修正するのに役立ちます:

  1. まず既存のシークレットのバックアップを作成します。次のコマンドはそれを新しいシークレットに-backup という名前のサフィックスをつけてコピーします:

    kubectl get secrets ${RELEASE}-postgresql-password -o yaml | sed 's/name: \(.*\)$/name: \1-backup/' | kubectl apply -f -
    
  2. パッチが正しく見えることを確認してください:

    kubectl get secret ${RELEASE}-postgresql-password \
      -o go-template='{"data":{"password":"{{index .data "postgresql-password"}}","postgres-password":"{{index .data "postgresql-postgres-password"}}","postgresql-password":null,"postgresql-postgres-password":null}}'
    
  3. それから適用してください:

    kubectl patch secret ${RELEASE}-postgresql-password --patch "$(
      kubectl get secret ${RELEASE}-postgresql-password \
        -o go-template='{"data":{"password":"{{index .data "postgresql-password"}}","postgres-password":"{{index .data "postgresql-postgres-password"}}","postgresql-password":null,"postgresql-postgres-password":null}}')"