セカンダリRunner
- プラン: Premium、Ultimate
- 提供形態: GitLab Self-Managed、GitLab Dedicated
セカンダリサイトのGeoプロキシを使用すると、gitlab-runnerをセカンダリサイトに登録できます。これにより、プライマインスタンスからの負荷が軽減されます。
パイプラインの最初のステージ中に開始されるジョブは、ほとんどの場合、GitクローンリクエストがプライマリGeoサイトに転送されます。これは、通常、これらのクローンが、セカンダリサイトによってGitデータがレプリケートおよび検証される前に発生するためです。Gitの変更が大きい、帯域幅が小さい、パイプラインステージが短いといった理由により、後続のステージもセカンダリサイトから提供されるとは限りません。ほとんどの場合、パイプラインの後続のステージでは、セカンダリサイトからGitデータが提供されます。Issue 446176は、最初のステージのクローンリクエストがセカンダリサイトから提供される可能性を高めるための機能強化を提案しています。
ロケーションアウェアパブリックURL(Unified URL)でセカンダリrunnerを使用する
- 提供形態: GitLab Self-Managed
ロケーションアウェアDNSを使用すると、機能フラグを有効にすることで、追加の設定なしで動作します。セカンダリサイトと同じ場所にrunnerをインストールして登録すると、最も近いGeoサイトと自動的に通信し、セカンダリが古くなっている場合にのみプライマリにプロキシされます。
個別のURLでセカンダリrunnerを使用する
個別のセカンダリURLを使用すると、runnerは次のようになります:
- セカンダリ外部URLで登録されます。
clone_urlがセカンダリインスタンスのexternal_urlに設定された状態で構成されます。
セカンダリrunnerでの計画フェイルオーバーの処理
計画フェイルオーバーを実行すると、セカンダリrunnerはローカルインスタンスとの通信を維持しようとします。これにより、runnerの容量が減少し、考慮する必要がある場合があります。
ロケーションアウェアパブリックURLを使用
- 提供形態: GitLab Self-Managed
ロケーションアウェアDNSを使用すると、すべてのrunnerが最も近いGeoサイトに自動的に接続します。
新しいプライマリへのフェイルオーバー時:
- 古いプライマリがまだDNSレコードにある間は、以前に古いプライマリに接続されていたrunnerは、引き続き古いプライマリからジョブを読み込むことを試みます。到達できない場合、runnerはこれを検出し、インスタンスが戻った後、一定期間リクエストを停止します。
- 複数のセカンダリノードがある場合、最初のフェイルオーバー後、残りのセカンダリは、新しいプライマリでレプリケートされるまで異常な状態になります。それらに接続されているrunnerはチェックインできなくなり、ヘルスチェックも開始されます。
- 異常なノードをGeo DNSエントリから削除すると、runnerは次に最も近いインスタンスを選択します。アーキテクチャによっては、状態が低下しているGeoサイトに過大な負担がかかる可能性があるため、これは望ましくない場合があります。
これらの問題を軽減するために、Geoサイトが100%に戻るまで、runnerの一部を一時停止またはシャットダウンできます。
これらの問題を心配していない場合は、ここで何もする必要はありません。
個別のURLを使用
- 古いプライマリをサービスに戻す場合は、オンラインに戻るまで古いプライマリrunnerを一時停止できます。これにより、ヘルスチェックの開始を防ぎます。
- 古いプライマリが戻らない場合、または一時的にrunnerの容量が減少することを避けたい場合は、プライマリrunnerが新しいプライマリに接続するように再設定する必要があります。
- 複数のセカンダリが使用されている場合、新しいプライマリにレプリケートされている間、runnerは新しいプライマリに接続するように一時停止、シャットダウン、または再設定する必要があります。
runnerの一時停止
次のいずれかの方法を使用するには、管理者アクセス権が必要です:
- 管理者エリアから:
- 左側のサイドバーの下部で、管理者を選択します。
- 設定 > Runnersを選択します。
- 一時停止するrunnerを特定します。
- 一時停止する各runnerの横にある
pauseボタンを選択します。 - フェイルオーバーが完了したら、前の手順で一時停止したrunnerの一時停止を解除します。
- Runners APIを使用します:
- 管理者アクセス権を持つパーソナルアクセストークンをフェッチまたは作成します。
- Runnerのリストを取得します。APIを使用してリストをフィルタリングできます。
- 一時停止するrunnerを特定し、
idをメモします。 - APIドキュメントに従って、各runnerを一時停止します。
- フェイルオーバーが完了したら、
paused=falseを設定して、APIを使用してrunnerのリストの一時停止を解除します。