14.3. スタンドアロン Red Hat Quay を使用した Geo レプリケーション
次の図では、Red Hat Quay が 2 つの別々のリージョンでスタンドアロンで実行されており、共通のデータベースと共通の Redis インスタンスが使用されています。ローカライズされたイメージストレージは各リージョンで提供され、最も近くにある利用可能なストレージエンジンからイメージプルが提供されます。コンテナーイメージのプッシュは、Red Hat Quay インスタンスの優先ストレージエンジンに書き込まれ、バックグラウンドで他のストレージエンジンに複製されます。
1 つのクラスター (たとえば、US クラスター) で Clair に障害が発生した場合、米国のユーザーには Red Hat Quay で 2 番目のクラスター (EU) の脆弱性レポートが表示されません。これは、すべての Clair インスタンスの状態が同じであるためです。Clair に障害が発生した場合、通常はクラスター内の問題が原因です。
Geo レプリケーションのアーキテクチャー
14.3.1. ストレージレプリケーションを有効にする - スタンドアロン Quay
以下の手順を使用して、Red Hat Quay でストレージのレプリケーションを有効にします。
手順
- Red Hat Quay 設定エディターで、Registry Storage セクションを見つけます。
- Enable Storage Replication をクリックします。
- データを複製するストレージエンジンをそれぞれ追加します。使用するすべてのストレージエンジンをリストに載せる必要があります。
すべてのイメージをすべてのストレージエンジンに完全に複製する必要がある場合は、各ストレージエンジン設定の下にある Replicate to storage engine by default をクリックします。これにより、すべてのイメージがそのストレージエンジンにレプリケートされます。
注記名前空間ごとのレプリケーションを有効にするには、Red Hat Quay サポートにお問い合わせください。
- 完了したら、Save Configuration Changes をクリックします。設定の変更は、Red Hat Quay の再起動後に有効になります。
ストレージを追加して Geo レプリケーションの Replicate to storage engine by default を有効にした後、すべてのストレージで既存のイメージデータを同期する必要があります。これを行うには、コンテナーに対して
oc exec
(またはdocker exec
またはkubectl exec
) を実行し、次のコマンドを入力する必要があります。# scl enable python27 bash # python -m util.backfillreplication
注記この操作は、新しいストレージを追加した後にコンテンツを同期するための 1 回限りの操作です。
14.3.2. ストレージの環境設定による Red Hat Quay の実行
- config.yaml を Red Hat Quay を実行しているすべてのマシンにコピーします。
各リージョンの各マシンは、マシンが稼働しているリージョンの優先ストレージエンジンを持つ
QUAY_DISTRIBUTED_STORAGE_PREFERENCE
環境変数を追加します。たとえば、ヨーロッパで稼働しているマシンで、ホスト上の config ディレクトリーが
$QUAY/config
から利用できる場合です。$ sudo podman run -d --rm -p 80:8080 -p 443:8443 \ --name=quay \ -v $QUAY/config:/conf/stack:Z \ -e QUAY_DISTRIBUTED_STORAGE_PREFERENCE=europestorage \ registry.redhat.io/quay/quay-rhel8:v3.9.7
注記指定された環境変数の値は、コンフィグパネルで定義されたロケーション ID の名前と一致する必要があります。
- すべての Red Hat Quay コンテナーを再起動します。
14.3.3. スタンドアロン Red Hat Quay デプロイメントから geo レプリケートされたサイトを削除する
以下の手順を使用すると、Red Hat Quay 管理者は geo レプリケートされたセットアップ内のサイトを削除できます。
前提条件
-
少なくとも 2 つのサイト (例:
usstorage
とeustorage
) を使用して Red Hat Quay geo レプリケーションを設定している。 - 各サイトに、独自の組織、リポジトリー、およびイメージタグがある。
手順
次のコマンドを実行して、定義されたすべてのサイト間で BLOB を同期します。
$ python -m util.backfillreplication
警告Red Hat Quay
config.yaml
ファイルからストレージエンジンを削除する前に、定義されているすべてのサイト間ですべての BLOB が同期されていることを確認する 必要があります。続行する前に、この手順を完了してください。-
サイト
usstorage
の Red Hat Quayconfig.yaml
ファイルで、eustorage
サイトのDISTRIBUTED_STORAGE_CONFIG
エントリーを削除します。 次のコマンドを入力して、実行中のコンテナーのリストを取得します。
$ podman ps
出力例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 92c5321cde38 registry.redhat.io/rhel8/redis-5:1 run-redis 11 days ago Up 11 days ago 0.0.0.0:6379->6379/tcp redis 4e6d1ecd3811 registry.redhat.io/rhel8/postgresql-13:1-109 run-postgresql 33 seconds ago Up 34 seconds ago 0.0.0.0:5432->5432/tcp postgresql-quay d2eadac74fda registry-proxy.engineering.redhat.com/rh-osbs/quay-quay-rhel8:v3.9.0-131 registry 4 seconds ago Up 4 seconds ago 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp quay
次のコマンドを入力して、PostgreSQL コンテナー内でシェルを実行します。
$ podman exec -it postgresql-quay -- /bin/bash
次のコマンドを実行して psql を入力します。
bash-4.4$ psql
次のコマンドを入力して、geo レプリケートされたデプロイメント内のサイトのリストを表示します。
quay=# select * from imagestoragelocation;
出力例
id | name ----+------------------- 1 | usstorage 2 | eustorage
次のコマンドを入力して postgres CLI を終了し、bash-4.4 に再度入ります。
\q
次のコマンドを入力して、
eustorage
サイトを完全に削除します。重要次の操作は元に戻すことができません。注意して使用してください。
bash-4.4$ python -m util.removelocation eustorage
出力例
WARNING: This is a destructive operation. Are you sure you want to remove eustorage from your storage locations? [y/n] y Deleted placement 30 Deleted placement 31 Deleted placement 32 Deleted placement 33 Deleted location eustorage