第17章 スタンドアロンデプロイメントでの Red Hat Quay のバックアップと復元
このセクションの内容を使用して、スタンドアロンデプロイメントの Red Hat Quay をバックアップおよび復元します。
17.1. オプション: Red Hat Quay の読み取り専用モードの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay デプロイメントで読み取り専用モードを有効にすると、レジストリーの操作を管理できるようになります。Red Hat Quay 管理者は、読み取り専用モードを有効にしてレジストリーへの書き込みアクセスを制限できます。これは、データの整合性の確保、メンテナンス期間中のリスクの軽減、レジストリーデータへの意図しない変更に対する保護に役立ちます。また、Red Hat Quay レジストリーがオンライン状態を維持し、ユーザーにイメージを提供できるようにするのにも役立ちます。
場合によっては、サービスキーの挿入やその他の手動での設定変更が必要になるため、Red Hat Quay の読み取り専用オプションは使用できないことがあります。読み取り専用モードの代わりに、Red Hat Quay 管理者には DISABLE_PUSHES
機能の有効化を検討することを推奨します。このフィールドを True
に設定すると、ユーザーは CLI を使用するときにイメージまたはイメージタグをレジストリーにプッシュできなくなります。DISABLE_PUSHES
を有効にすることは、データベースが read-only
として設定されないため、read-only
モードとは異なります。
このフィールドは、Red Hat Quay 管理者がレジストリーのクォータを計算し、計算が完了するまでイメージのプッシュを無効にしたい場合など、一部の状況で役立つ場合があります。この方法を使用すると、管理者はレジストリー全体を read-only
モードにしてデータベースに影響を与えることを回避できるため、ほとんどの操作を引き続き実行できます。
この設定フィールドを有効にする方法については、その他の設定フィールドを 参照してください。
前提条件
Red Hat Enterprise Linux (RHEL) 7.x を使用している場合:
- Red Hat Software Collections List (RHSCL) を有効にした。
- Python 3.6 をインストールした。
-
virtualenv
パッケージをダウンロードした。 -
git
CLI をインストールした。
Red Hat Enterprise Linux (RHEL) 8 を使用している場合:
- マシンに Python 3 をインストールした。
-
python3-virtualenv
パッケージをダウンロードした。 -
git
CLI をインストールした。
-
https://github.com/quay/quay.git
リポジトリーのクローンを作成した。
17.1.1. スタンドアロン Red Hat Quay のサービスキーの作成 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay はサービスキーを使用してさまざまなコンポーネントと通信します。サービスキーは、イメージのスキャン、ログイン、ストレージアクセスなどの要求など、完了した要求に署名するために使用されます。
手順
Red Hat Quay レジストリーがすぐに利用できる場合は、
Quay
レジストリーコンテナー内でサービスキーを生成できます。Quay
コンテナー内にキーペアを生成するには、次のコマンドを入力します。podman exec quay python3 tools/generatekeypair.py quay-readonly
$ podman exec quay python3 tools/generatekeypair.py quay-readonly
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Red Hat Quay がすぐに利用できない場合は、仮想環境内でサービスキーを生成する必要があります。
Red Hat Quay デプロイメントのディレクトリーに移動し、そのディレクトリー内に仮想環境を作成します。
cd <$QUAY>/quay && virtualenv -v venv
$ cd <$QUAY>/quay && virtualenv -v venv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して仮想環境をアクティブ化します。
source venv/bin/activate
$ source venv/bin/activate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
pip
CLI ツールがインストールされていない場合はインストールします。venv/bin/pip install --upgrade pip
$ venv/bin/pip install --upgrade pip
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Quay ディレクトリーに、次の内容を含む
requirements-generatekeys.txt
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
requirements-generatekeys.txt
ファイルで定義した Python 依存関係をインストールします。venv/bin/pip install -r requirements-generatekeys.txt
$ venv/bin/pip install -r requirements-generatekeys.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、必要なサービスキーを作成します。
PYTHONPATH=. venv/bin/python /<path_to_cloned_repo>/tools/generatekeypair.py quay-readonly
$ PYTHONPATH=. venv/bin/python /<path_to_cloned_repo>/tools/generatekeypair.py quay-readonly
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Writing public key to quay-readonly.jwk Writing key ID to quay-readonly.kid Writing private key to quay-readonly.pem
Writing public key to quay-readonly.jwk Writing key ID to quay-readonly.kid Writing private key to quay-readonly.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、仮想環境を非アクティブ化します。
deactivate
$ deactivate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
17.1.2. PostgreSQL データベースへのキーの追加 リンクのコピーリンクがクリップボードにコピーされました!
PostgreSQL データベースにサービスキーを追加するには、次の手順に従います。
前提条件
- サービスキーを作成した。
手順
次のコマンドを入力して、Red Hat Quay データベース環境に入ります。
podman exec -it postgresql-quay psql -U postgres -d quay
$ podman exec -it postgresql-quay psql -U postgres -d quay
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
servicekeyapproval
の承認タイプと関連する注記を表示します。quay=# select * from servicekeyapproval;
quay=# select * from servicekeyapproval;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のクエリーを入力して、Red Hat Quay データベースにサービスキーを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
INSERT 0 1
INSERT 0 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のクエリーを使用してキー承認を追加します。
quay=# INSERT INTO servicekeyapproval ('approval_type', 'approved_date', 'notes') VALUES ("ServiceKeyApprovalType.SUPERUSER", "CURRENT_DATE", {include_notes_here_on_why_this_is_being_added});
quay=# INSERT INTO servicekeyapproval ('approval_type', 'approved_date', 'notes') VALUES ("ServiceKeyApprovalType.SUPERUSER", "CURRENT_DATE", {include_notes_here_on_why_this_is_being_added});
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
INSERT 0 1
INSERT 0 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作成されたサービスキー行の
approval_id
フィールドを、作成されたサービスキー承認のid
フィールドに設定します。必要な ID を取得するには、次のSELECT
ステートメントを使用できます。UPDATE servicekey SET approval_id = (SELECT id FROM servicekeyapproval WHERE approval_type = 'ServiceKeyApprovalType.SUPERUSER') WHERE name = 'quay-readonly';
UPDATE servicekey SET approval_id = (SELECT id FROM servicekeyapproval WHERE approval_type = 'ServiceKeyApprovalType.SUPERUSER') WHERE name = 'quay-readonly';
Copy to Clipboard Copied! Toggle word wrap Toggle overflow UPDATE 1
UPDATE 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
17.1.3. スタンドアロン Red Hat Quay の読み取り専用モードの設定 リンクのコピーリンクがクリップボードにコピーされました!
サービスキーを作成し、PostgreSQL データベースに追加したら、スタンドアロンデプロイメントで Quay
コンテナーを再起動する必要があります。
前提条件
- サービスキーを作成し、PostgreSQL データベースに追加した。
手順
すべての仮想マシン上のすべての Red Hat Quay インスタンスをシャットダウンします。以下に例を示します。
podman stop <quay_container_name_on_virtual_machine_a>
$ podman stop <quay_container_name_on_virtual_machine_a>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman stop <quay_container_name_on_virtual_machine_b>
$ podman stop <quay_container_name_on_virtual_machine_b>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
quay-readonly.kid
ファイルとquay-readonly.pem
ファイルの内容を、Red Hat Quay 設定バンドルが格納されているディレクトリーにコピーします。cp quay-readonly.kid quay-readonly.pem $Quay/config
$ cp quay-readonly.kid quay-readonly.pem $Quay/config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、設定バンドルフォルダー内のすべてのファイルに対するファイル権限を設定します。
setfacl -m user:1001:rw $Quay/config/*
$ setfacl -m user:1001:rw $Quay/config/*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Quay
config.yaml
ファイルを変更し、次の情報を追加します。# ... REGISTRY_STATE: readonly INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid' INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem' # ...
# ... REGISTRY_STATE: readonly INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid' INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem' # ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい設定バンドルをすべての Red Hat Quay インスタンスに配布します。
次のコマンドを入力して Red Hat Quay を起動します。
podman run -d --rm -p 80:8080 -p 443:8443 \ --name=quay-main-app \ -v $QUAY/config:/conf/stack:Z \ -v $QUAY/storage:/datastorage:Z \ {productrepo}/{quayimage}:{productminv}
$ podman run -d --rm -p 80:8080 -p 443:8443 \ --name=quay-main-app \ -v $QUAY/config:/conf/stack:Z \ -v $QUAY/storage:/datastorage:Z \ {productrepo}/{quayimage}:{productminv}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Quay を起動すると、インスタンス内のバナーによって、Red Hat Quay が読み取り専用モードで実行されていることがユーザーに通知されます。プッシュが拒否され、405 エラーがログに記録されるはずです。次のコマンドを実行してこれをテストできます。
podman push <quay-server.example.com>/quayadmin/busybox:test
$ podman push <quay-server.example.com>/quayadmin/busybox:test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
613be09ab3c0: Preparing denied: System is currently read-only. Pulls will succeed but all write operations are currently suspended.
613be09ab3c0: Preparing denied: System is currently read-only. Pulls will succeed but all write operations are currently suspended.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Quay デプロイメントを読み取り専用モードで実行すると、レジストリーの操作を安全に管理しながら、バックアップや復元などのアクションを実行できます。
オプション: 読み取り専用モードでの作業が完了したら、
config.yaml
ファイルから次の情報を削除して、通常の運用に戻すことができます。削除したら、Red Hat Quay デプロイメントを再起動します。# ... REGISTRY_STATE: readonly INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid' INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem' # ...
# ... REGISTRY_STATE: readonly INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid' INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem' # ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman restart <container_id>
$ podman restart <container_id>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
17.1.4. 読み取り専用の有効期限の更新 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay 読み取り専用キーには有効期限があり、その日付が過ぎるとキーは非アクティブ化されます。キーの有効期限が切れる前に、データベース内でその有効期限を更新できます。キーを更新するには、前述の方法を使用して Red Hat Quay の実稼働データベースに接続し、次のクエリーを発行します。
quay=# UPDATE servicekey SET expiration_date = 'new-date' WHERE id = servicekey_id;
quay=# UPDATE servicekey SET expiration_date = 'new-date' WHERE id = servicekey_id;
サービスキー ID のリストは、次のクエリーを実行することで取得できます。
SELECT id, name, expiration_date FROM servicekey;
SELECT id, name, expiration_date FROM servicekey;