第6章 Red Hat Quay Operator によって管理される Red Hat Quay のバックアップおよび復元
OpenShift Container Platform で Red Hat Quay Operator によって管理される場合、このセクション内のコンテンツを使用して Red Hat Quay をバックアップおよび復元します。
6.1. オプション: Red Hat Quay on OpenShift Container Platform の読み取り専用モードを有効にする リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay on OpenShift Container Platform デプロイメントで読み取り専用モードを有効にすると、レジストリーの操作を管理できるようになります。管理者は、読み取り専用モードを有効にしてレジストリーへの書き込みアクセスを制限できます。これは、データの整合性の確保、メンテナンス期間中のリスクの軽減、レジストリーデータへの意図しない変更に対する保護に役立ちます。また、Red Hat Quay レジストリーがオンライン状態を維持し、ユーザーにイメージを提供できるようにするのにも役立ちます。
バックアップおよび復元を行う場合、Red Hat Quay on OpenShift Container Platform デプロイメントをスケールダウンする必要があります。その結果、バックアップ期間中にサービスを利用できなくなります。場合によっては、そのような状況は許容できません。読み取り専用モードを有効にすると、Red Hat Quay on OpenShift Container Platform デプロイメントのバックアップおよび復元手順を実行している間も、サービスの可用性が確保されます。
場合によっては、サービスキーの挿入やその他の手動での設定変更が必要になるため、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リポジトリーのクローンを作成した。 -
ocCLI がインストールされている。 -
cluster-admin権限でクラスターにアクセスできる。
6.1.1. Red Hat Quay on OpenShift Container Platform のサービスキーを作成する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay はサービスキーを使用してさまざまなコンポーネントと通信します。サービスキーは、イメージのスキャン、ログイン、ストレージアクセスなどの要求など、完了した要求に署名するために使用されます。
手順
次のコマンドを入力して、Red Hat Quay Pod のリストを取得します。
$ oc get pods -n <namespace>出力例
example-registry-clair-app-7dc7ff5844-4skw5 0/1 Error 0 70d example-registry-clair-app-7dc7ff5844-nvn4f 1/1 Running 0 31d example-registry-clair-app-7dc7ff5844-x4smw 0/1 ContainerStatusUnknown 6 (70d ago) 70d example-registry-clair-app-7dc7ff5844-xjnvt 1/1 Running 0 60d example-registry-clair-postgres-547d75759-75c49 1/1 Running 0 70d example-registry-quay-app-76c8f55467-52wjz 1/1 Running 0 70d example-registry-quay-app-76c8f55467-hwz4c 1/1 Running 0 70d example-registry-quay-app-upgrade-57ghs 0/1 Completed 1 70d example-registry-quay-database-7c55899f89-hmnm6 1/1 Running 0 70d example-registry-quay-mirror-6cccbd76d-btsnb 1/1 Running 0 70d example-registry-quay-mirror-6cccbd76d-x8g42 1/1 Running 0 70d example-registry-quay-redis-85cbdf96bf-4vk5m 1/1 Running 0 70d次のコマンドを入力して、
Quayコンテナーへのリモートシェルセッションを開きます。$ oc rsh example-registry-quay-app-76c8f55467-52wjz次のコマンドを入力して、必要なサービスキーを作成します。
sh-4.4$ python3 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
6.1.2. PostgreSQL データベースへのキーの追加 リンクのコピーリンクがクリップボードにコピーされました!
PostgreSQL データベースにサービスキーを追加するには、次の手順に従います。
前提条件
- サービスキーを作成した。
手順
次のコマンドを入力して、Red Hat Quay データベース環境に入ります。
$ oc rsh example-registry-quay-database-76c8f55467-52wjz psql -U <database_username> -d <database_name>次のコマンドを入力して、
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
6.1.3. Red Hat Quay on OpenShift Container Platform を読み取り専用モードに設定する リンクのコピーリンクがクリップボードにコピーされました!
サービスキーを作成し、PostgreSQL データベースに追加したら、OpenShift Container Platform デプロイメントで Quay コンテナーを再起動する必要があります。
OpenShift Container Platform に Red Hat Quay を読み取り専用モードでデプロイするには、OpenShift Container Platform クラスター内に保存されているシークレットを変更する必要があります。シークレットを変更する前に、シークレットのバックアップを作成することを強く推奨します。
前提条件
- サービスキーを作成し、PostgreSQL データベースに追加した。
手順
次のコマンドを入力して、Red Hat Quay on OpenShift Container Platform デプロイメントのシークレット名を読み取ります。
$ oc get deployment -o yaml <quay_main_app_deployment_name>base64コマンドを使用して、quay-readonly.kidファイルとquay-readonly.pemファイルをエンコードします。$ base64 -w0 quay-readonly.kid出力例
ZjUyNDFm...$ base64 -w0 quay-readonly.pem出力例
LS0tLS1CRUdJTiBSU0E...次のコマンドを入力して、現在の設定バンドルとシークレットを取得します。
$ oc get secret quay-config-secret-name -o json | jq '.data."config.yaml"' | cut -d '"' -f2 | base64 -d -w0 > config.yamlconfig.yamlファイルを編集し、次の情報を追加します。# ... REGISTRY_STATE: readonly INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid' INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem' # ...次のコマンドを実行してファイルを保存し、
base64でエンコードします。$ base64 -w0 quay-config.yamlRed Hat Quay Operator Pod を
0にスケールダウンします。これにより、シークレットの編集後に Operator がシークレットを調整することがなくなります。$ oc scale --replicas=0 deployment quay-operator -n openshift-operatorsシークレットを編集し、新しい内容を追加します。
$ oc edit secret quay-config-secret-name -n quay-namespace# ... data: "quay-readonly.kid": "ZjUyNDFm..." "quay-readonly.pem": "LS0tLS1CRUdJTiBSU0E..." "config.yaml": "QUNUSU9OX0xPR19..." # ...Red Hat Quay on OpenShift Container Platform デプロイメントを読み取り専用モードで実行すると、レジストリーの操作を安全に管理しながら、バックアップや復元などのアクションを実行できます。
6.1.3.1. Red Hat Quay on OpenShift Container Platform を読み取り専用デプロイメントからスケールアップする リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay on OpenShift Container Platform を読み取り専用モードにしておく必要がなくなったら、デプロイメントをスケールアップし、追加した内容をシークレットから削除できます。
手順
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 Operator をスケールアップします。
oc scale --replicas=1 deployment quay-operator -n openshift-operators