セカンダリサイトのコンテナレジストリ
セカンダリGeo サイトに、プライマリGeo サイトのものと同じコンテナ レジストリをセットアップできます。
サポートされるコンテナレジストリ
Geo は以下のタイプのコンテナ レジストリをサポートしています:
サポートされるイメージ形式
Geo では、以下のコンテナ・イメージ・フォーマットをサポートしています:
さらに、GeoはBuildKitキャッシュイメージもサポートしています。
対応ストレージ
Docker
サポートされているレジストリ・ストレージ・ドライバの詳細については、Dockerレジストリ・ストレージ・ドライバを参照してください。
レジストリをデプロイする際のロードバランシングの考慮点、GitLab統合コンテナレジストリのストレージドライバの設定方法をお読みください。
OCIアーティファクトをサポートするレジストリ
以下のレジストリがOCIアーティファクトをサポートしています:
- CNCF ディストリビューション - ローカル/オフライン検証
- Azureコンテナレジストリ(ACR)
- Amazon Elasticコンテナレジストリ(ECR)
- Googleアーティファクトレジストリ(GAR)
- GitHub Packages コンテナレジストリ(GHCR)
- バンドルバー
詳細については、OCIディストリビューション仕様を参照してください。
コンテナレジストリのレプリケーション設定
ストレージに依存しないレプリケーションを有効にすることで、クラウドまたはローカルストレージに使用できます。新しいイメージがプライマリサイトにプッシュされるたびに、各セカンダリサイトはそれを自分のコンテナリポジトリにプルします。
コンテナレジストリのレプリケーションを設定するには、以下の手順に従います:
- プライマリ・サイトを設定します。
- セカンダリ・サイトを設定します。
- コンテナレジストリのレプリケーションを確認します。
プライマリサイトの設定
次の手順を実行する前に、プライマリサイトでコンテナレジストリが設定され、動作していることを確認してください。
新しいコンテナイメージをレプリケートできるようにするには、Container レジストリからプライマリサイトにプッシュごとに通知イベントを送信する必要があります。コンテナレジストリとプライマリ上のウェブノード間で共有されるトークンを使用して、通信をよりセキュアにします。
-
GitLabプライマリサーバにSSHでログインし、rootでログインします(GitLab HAではレジストリノードのみが必要です):
sudo -i
-
/etc/gitlab/gitlab.rb
を編集します:registry['notifications'] = [ { 'name' => 'geo_event', 'url' => 'https://<example.com>/api/v4/container_registry_event/events', 'timeout' => '500ms', 'threshold' => 5, 'backoff' => '1s', 'headers' => { 'Authorization' => ['<replace_with_a_secret_token>'] } } ]
<example.com>
をプライマリ・サイトの/etc/gitlab/gitlab.rb
ファイルで定義されているexternal_url
に置き換え、<replace_with_a_secret_token>
を大文字と小文字を区別する英数字で始まる文字列に置き換えます。で生成できます。< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c 32 | sed "s/^[0-9]*//"; echo
GitLab にインテグレーションされていない)外部のレジストリを使う場合は、/etc/gitlab/gitlab.rb
ファイルで通知シークレット (registry['notification_secret']
) を指定するだけです。 -
GitLab HAのみ。各Webノードで
/etc/gitlab/gitlab.rb
を編集します:registry['notification_secret'] = '<replace_with_a_secret_token_generated_above>'
-
先ほど更新した各ノードを再設定します:
gitlab-ctl reconfigure
セカンダリサイトの設定
次の手順を実行する前に、セカンダリサイトでコンテナレジストリが設定され、動作していることを確認してください。
以下の手順は、レプリケートされたコンテナイメージを確認する予定の各セカンダリサイトで実行する必要があります。
セカンダリサイトが プライマリサイトのコンテナレジストリとセキュアに通信できるようにする必要があるため、すべてのサイトに対して単一のキーペアを用意する必要があります。セカンダリサイトはこのキーを使用して、プライマリサイトのコンテナレジストリにアクセスするためのプル専用の短命JWTを生成します。
セカンダリサイトの各アプリケーションとSidekiqノードについて:
-
ノードにSSH接続し、
root
ユーザーとしてログインします:sudo -i
-
/var/opt/gitlab/gitlab-rails/etc/gitlab-registry.key
をプライマリからノードにコピーします。 -
/etc/gitlab/gitlab.rb
を編集し、追加してください:gitlab_rails['geo_registry_replication_enabled'] = true # Primary registry's hostname and port, it will be used by # the secondary node to directly communicate to primary registry gitlab_rails['geo_registry_replication_primary_api_url'] = 'https://primary.example.com:5050/'
-
変更を有効にするには、ノードを再設定してください:
gitlab-ctl reconfigure
レプリケーションの確認
セカンダリサイトでコンテナレジストリのレプリケーションが機能していることを確認します:
- 左のサイドバーで、Search を選択するか、次のページに進んでください。
- Admin Areaを選択します。
- 左サイドバーで、Geo > Nodesを選択します。最初のレプリケーション(”backfill”)はおそらくまだ進行中です。
ブラウザでプライマリサイトの Geo ノードダッシュボードから各 Geo サイトの同期プロセスを監視できます。