古いバージョンのアップグレード

GitLabチャートの最近のバージョンをアップグレードしたい場合は、アップグレードガイドをご覧ください。

旧バージョンのアップグレード手順はこのページにあります。

バージョン3.0へのアップグレード

3.0.0 リリースでは、アップグレードを実行するために手動ステップが必要です。

caution
アップグレードを行う前にバックアップを取ることを忘れないでください。これらの手順をドキュメント通りに実行しないと、データベースを失う可能性があります。別のバックアップがあることを確認してください。

バンドルされている PostgreSQL を使用している場合、このアップグレードを行う最善の方法は、古いデータベースをバックアップし、新しいデータベースインスタンスにリストアすることです。この手順の一部は自動化されていますが、手動で行うこともできます。

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

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

  • バンドルされている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': v3.0.0
curl -s "https://gitlab.com/gitlab-org/charts/gitlab/-/raw/${GITLAB_RELEASE}/scripts/database-upgrade" | bash -s pre

クラスター・データベースのシークレットを準備します。

バンドルされている PostgreSQL チャートを使用しない場合 (postgresql.install は false):

  • global.psql.password.key を提供している場合は、この手順を実行する必要はありません。
  • global.psql.password.secret を提供している場合は、さらにglobal.psql.password.key に既存のキーの名前を設定して、この手順を回避します。

アプリケーション・データベース・キーのシークレット・キーは、postgres-password からpostgresql-password に変更されます。以下に説明する 2 つの手順のいずれかを使用して、データベース・パスワードのシークレットを更新します:

  1. 自動生成された PostgreSQL パスワードを使いたい場合は、既存のシークレットを削除してアップグレードで新しいパスワードを生成できるようにします。RELEASE-NAME には、helm list からの GitLab リリースの名前を指定します:

    # Create a local copy of the old secret in case we need to restore the old database
    kubectl get secret RELEASE-NAME-postgresql-password -o yaml > postgresql-password.backup.yaml
    # Delete the secret so a new one can be created
    kubectl delete secret RELEASE-NAME-postgresql-password
    
  2. 同じパスワードを使いたい場合は、シークレットを編集してキーをpostgres-password からpostgresql-password に変更します。さらに、スーパーユーザーアカウント用のシークレットも必要です。そのユーザー用のキーを追加しますpostgresql-postgres-password

    # Encode the superuser password into base64
    echo SUPERUSER_PASSWORD | base64
    kubectl edit secret RELEASE-NAME-postgresql-password
    # Make the appropriate changes in your EDITOR window
    

既存サービスの削除

3.0 リリースでは、NGINX Ingress の不変フィールドが更新されるため、アップグレード前にまずすべてのサービスを削除する必要があります。詳細については、トラブルシューティング・ドキュメントの「Immutable Field Error」、「spec.clusterIP.Immutable Field Error」、「spec.clusterIP.Immutable Field Error」を参照してください。

  1. 影響を受けるサービスをすべて削除します。RELEASE_NAME には、helm list からの GitLab リリース名を指定します:

    kubectl delete services -lrelease=RELEASE_NAME
    
caution
NGINX Ingress が使用されている場合、この Chart からLoadBalancer の動的な値が変更されます。externalIPに関する詳細は、Ingress のグローバル設定のドキュメントを参照してください。DNSレコードの更新が必要になる場合があります!

GitLabのアップグレード

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

バンドルされている PostgreSQL を使っている場合は、アップグレードコマンドで以下のフラグを使ってマイグレーションを無効にしてください:

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

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

データベースのリストア

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

  • バンドルされているPostgreSQLチャート(postgresql.install がfalse)を使用していない場合は、この手順を実行する必要はありません。
  • このスクリプトを正常に実行するには、Bash 4.0以上を使用している必要があります。
  1. Toolbox ポッドのアップグレードが完了するまで待ちます。RELEASE_NAME には GitLab のリリース名を指定します。helm list

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

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

    1. webservicesidekiqgitlab-exporter のデプロイに対してレプリカを 0 に設定します。こ れに よ り 、 バ ッ ク ア ッ プの復元中に他のアプ リ ケーシ ョ ンがデー タ ベース を変更で き な く な り ます。
    2. 前ステージで作成したバックアップからデータベースをリストアします。
    3. 新しいバージョンのデータベースマイグレーションを実行します。
    4. 最初のステップからデプロイを再開します。
    # GITLAB_RELEASE should be the version of the chart you are installing, starting with 'v': v3.0.0
    curl -s "https://gitlab.com/gitlab-org/charts/gitlab/-/raw/${GITLAB_RELEASE}/scripts/database-upgrade" | bash -s post
    

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

  • 2.15.xのバグのため、Helm 2.14.3または>= 2.16.1を使用していることを確認してください。
  • アップグレード中に何らかの障害が発生した場合は、gitlab-upgrade-check ポッドの説明で詳細を確認するとよいでしょう:

     kubectl get pods -lrelease=RELEASE,app=gitlab
     kubectl describe pod <gitlab-upgrade-check-pod-full-name>
    
  • helm upgrade を実行すると、以下のようなエラーに直面するかもしれません:

     Error: kind ConfigMap with the name "gitlab-gitlab-shell-sshd" already exists in the cluster and wasn't defined in the previous release.
     Before upgrading, please either delete the resource from the cluster or remove it from the chart
     Error: UPGRADE FAILED: kind ConfigMap with the name "gitlab-gitlab-shell-sshd" already exists in the cluster and wasn't defined in the previous release.
     Before upgrading, please either delete the resource from the cluster or remove it from the chart
    

    このエラーメッセージは、gitlab-redis-healthgitlab-redis-headlessなど、他のコンフィグマップについても言及しています。これを解決するには、3.0リリースのアップグレード手順で述べたように、サービスが削除されていることを確認してください。その後、エラーメッセージに表示されているコンフィグマップも削除してください:kubectl delete configmap <configmap-name>.