第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パッケージをダウンロードした。 -
gitCLI をインストールした。
Red Hat Enterprise Linux (RHEL) 8 を使用している場合:
- マシンに Python 3 をインストールした。
-
python3-virtualenvパッケージをダウンロードした。 -
gitCLI をインストールした。
-
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
Red Hat Quay がすぐに利用できない場合は、仮想環境内でサービスキーを生成する必要があります。
Red Hat Quay デプロイメントのディレクトリーに移動し、そのディレクトリー内に仮想環境を作成します。
$ cd <$QUAY>/quay && virtualenv -v venv次のコマンドを入力して仮想環境をアクティブ化します。
$ source venv/bin/activateオプション:
pipCLI ツールがインストールされていない場合はインストールします。$ venv/bin/pip install --upgrade pipRed Hat Quay ディレクトリーに、次の内容を含む
requirements-generatekeys.txtファイルを作成します。$ cat << EOF > requirements-generatekeys.txt cryptography==3.4.7 pycparser==2.19 pycryptodome==3.9.4 pycryptodomex==3.9.4 pyjwkest==1.4.2 PyJWT==1.7.1 Authlib==1.0.0a2 EOF次のコマンドを入力して、
requirements-generatekeys.txtファイルで定義した Python 依存関係をインストールします。$ venv/bin/pip install -r requirements-generatekeys.txt次のコマンドを入力して、必要なサービスキーを作成します。
$ PYTHONPATH=. venv/bin/python /<path_to_cloned_repo>/tools/generatekeypair.py quay-readonly出力例
Writing public key to quay-readonly.jwk Writing key ID to quay-readonly.kid Writing private key to quay-readonly.pem次のコマンドを入力して、仮想環境を非アクティブ化します。
$ deactivate
17.1.2. PostgreSQL データベースへのキーの追加 リンクのコピーリンクがクリップボードにコピーされました!
PostgreSQL データベースにサービスキーを追加するには、次の手順に従います。
前提条件
- サービスキーを作成した。
手順
次のコマンドを入力して、Red Hat Quay データベース環境に入ります。
$ podman exec -it postgresql-quay psql -U postgres -d quay次のコマンドを入力して、
servicekeyapprovalの承認タイプと関連する注記を表示します。quay=# select * from servicekeyapproval;出力例
id | approver_id | approval_type | approved_date | notes ----+-------------+----------------------------------+----------------------------+------- 1 | | ServiceKeyApprovalType.AUTOMATIC | 2024-05-07 03:47:48.181347 | 2 | | ServiceKeyApprovalType.AUTOMATIC | 2024-05-07 03:47:55.808087 | 3 | | ServiceKeyApprovalType.AUTOMATIC | 2024-05-07 03:49:04.27095 | 4 | | ServiceKeyApprovalType.AUTOMATIC | 2024-05-07 03:49:05.46235 | 5 | 1 | ServiceKeyApprovalType.SUPERUSER | 2024-05-07 04:05:10.296796 | ...次のクエリーを入力して、Red Hat Quay データベースにサービスキーを追加します。
quay=# INSERT INTO servicekey (name, service, metadata, kid, jwk, created_date, expiration_date) VALUES ('quay-readonly', 'quay', '{}', '{<contents_of_.kid_file>}', '{<contents_of_.jwk_file>}', '{<created_date_of_read-only>}', '{<expiration_date_of_read-only>}');出力例
INSERT 0 1次のクエリーを使用してキー承認を追加します。
quay=# INSERT INTO servicekeyapproval ('approval_type', 'approved_date', 'notes') VALUES ("ServiceKeyApprovalType.SUPERUSER", "CURRENT_DATE", {include_notes_here_on_why_this_is_being_added});出力例
INSERT 0 1作成されたサービスキー行の
approval_idフィールドを、作成されたサービスキー承認のidフィールドに設定します。必要な ID を取得するには、次のSELECTステートメントを使用できます。UPDATE servicekey SET approval_id = (SELECT id FROM servicekeyapproval WHERE approval_type = 'ServiceKeyApprovalType.SUPERUSER') WHERE name = 'quay-readonly';UPDATE 1
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_b>次のコマンドを入力して、
quay-readonly.kidファイルとquay-readonly.pemファイルの内容を、Red Hat Quay 設定バンドルが格納されているディレクトリーにコピーします。$ cp quay-readonly.kid quay-readonly.pem $Quay/config次のコマンドを入力して、設定バンドルフォルダー内のすべてのファイルに対するファイル権限を設定します。
$ setfacl -m user:1001:rw $Quay/config/*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' # ...- 新しい設定バンドルをすべての 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}Red Hat Quay を起動すると、インスタンス内のバナーによって、Red Hat Quay が読み取り専用モードで実行されていることがユーザーに通知されます。プッシュが拒否され、405 エラーがログに記録されるはずです。次のコマンドを実行してこれをテストできます。
$ podman push <quay-server.example.com>/quayadmin/busybox:test出力例
613be09ab3c0: Preparing denied: System is currently read-only. Pulls will succeed but all write operations are currently suspended.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' # ...$ podman restart <container_id>
17.1.4. 読み取り専用の有効期限の更新 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay 読み取り専用キーには有効期限があり、その日付が過ぎるとキーは非アクティブ化されます。キーの有効期限が切れる前に、データベース内でその有効期限を更新できます。キーを更新するには、前述の方法を使用して Red Hat Quay の実稼働データベースに接続し、次のクエリーを発行します。
quay=# UPDATE servicekey SET expiration_date = 'new-date' WHERE id = servicekey_id;
サービスキー ID のリストは、次のクエリーを実行することで取得できます。
SELECT id, name, expiration_date FROM servicekey;