Helm ChartからLinuxパッケージへの移行
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed
HelmインストールからLinuxパッケージ(Omnibus)インストールに移行するには、次の手順に従います:
左側のサイドバーの下部で、管理者エリアを選択します。
左側のサイドバーの下部にある概要 > コンポーネントを選択して、現在のGitLabのバージョンを確認します。
クリーンなマシンを準備し、お使いのGitLab Helmチャートのバージョンに一致するLinuxパッケージをインストールします。
移行の前に、GitLab Helmチャートインスタンス上のGitリポジトリの整合性を確認します。
Linuxパッケージインスタンスで
/etc/gitlab/gitlab-secrets.jsonをバックアップします。kubectlコマンドを実行するワークステーションに、yqツール(バージョン4.21.1以降)をインストールします。ワークステーションで
/etc/gitlab/gitlab-secrets.jsonファイルのコピーを作成します。次のコマンドを実行して、GitLab Helmチャートインスタンスからシークレットを取得します。
GITLAB_NAMESPACEとRELEASEを適切な値に置き換えてください:kubectl get secret -n GITLAB_NAMESPACE RELEASE-rails-secret -ojsonpath='{.data.secrets\.yml}' | yq '@base64d | from_yaml | .production' -o json > rails-secrets.json yq eval-all 'select(filename == "gitlab-secrets.json").gitlab_rails = select(filename == "rails-secrets.json") | select(filename == "gitlab-secrets.json")' -ojson gitlab-secrets.json rails-secrets.json > gitlab-secrets-updated.json結果は
gitlab-secrets-updated.jsonです。これを使用して、Linuxパッケージインスタンス上の/etc/gitlab/gitlab-secrets.jsonの古いバージョンを置き換えることができます。/etc/gitlab/gitlab-secrets.jsonを置き換えた後、Linuxパッケージインスタンスを再構成します:sudo gitlab-ctl reconfigureLinuxパッケージインスタンスで、オブジェクトストレージを構成し、LFS、アーティファクト、アップロードなどをテストして、動作することを確認します。
コンテナレジストリを使用する場合は、オブジェクトストレージを個別に構成します。統合されたオブジェクトストレージはサポートされていません。
Helmチャートインスタンスに接続されているオブジェクトストレージから、Linuxパッケージインスタンスに接続されている新しいストレージにデータを同期します。いくつかの注意点があります:
- S3互換ストレージの場合は、
s3cmdユーティリティを使用してデータをコピーします。 - LinuxパッケージインスタンスでMinIOのようなS3互換のオブジェクトストレージを使用する場合は、MinIOを指す
endpointオプションを構成し、/etc/gitlab/gitlab.rbでpath_styleをtrueに設定する必要があります。 - 新しいLinuxパッケージインスタンスで古いオブジェクトストレージを再利用できます。この場合、2つのオブジェクトストレージ間でデータを同期する必要はありません。ただし、組み込みのMinIOインスタンスを使用している場合、GitLab Helmチャートをアンインストールすると、ストレージのプロビジョニングが解除される可能性があります。
- S3互換ストレージの場合は、
GitLab HelmバックアップをLinuxパッケージGitLabインスタンスの
/var/opt/gitlab/backupsにコピーし、復元を実行します。(オプション)Git SSHクライアントでホストの不一致エラーが発生しないように、SSHホストキーを復元します:
次のスクリプトを使用して、
<name>-gitlab-shell-host-keysシークレットをファイルに戻します(必要なツール:jq、base64、kubectl):mkdir ssh HOSTKEYS_JSON="hostkeys.json" GITLAB_NAMESPACE="my_namespace" kubectl get secret -n ${GITLAB_NAMESPACE} gitlab-gitlab-shell-host-keys -o json > ${HOSTKEYS_JSON} for k in $(jq -r '.data | keys | .[]' ${HOSTKEYS_JSON}); \ do \ jq -r --arg host_key ${k} '.data[$host_key]' ${HOSTKEYS_JSON} | base64 --decode > ssh/$k ; \ done変換されたファイルをGitLab Railsノードにアップロードします。
ターゲットRailsノード上:
/etc/ssh/ディレクトリをバックアップします。例:sudo tar -czvf /root/ssh_dir.tar.gz -C /etc ssh既存のホストキーを削除します:
sudo find /etc/ssh -type f -name "/etc/ssh/ssh_*_key*" -delete変換されたホストキーファイルを所定の場所(
/etc/ssh)に移動します:for f in ssh/*; do sudo install -b -D -o root -g root -m 0600 $f /etc/${f} ; doneSSHデーモンを再起動します:
sudo systemctl restart ssh.service
復元が完了したら、doctor Rakeタスクを実行して、シークレットが有効であることを確認します。
すべてが検証されたら、GitLab Helmチャートインスタンスをuninstallできます。