第6章 Red Hat Quay コンポーネントのトラブルシューティング
このドキュメントは、Red Hat Quay 内の特定のコンポーネントのトラブルシューティングに焦点を当てており、発生する可能性のある問題を解決するための対象を絞ったガイダンスを提供します。このリソースはシステム管理者、operator、開発者向けに設計されており、Red Hat Quay の個々のコンポーネントに関連する問題の診断とトラブルシューティングを支援することを目的としています。
以下の手順に加えて、Red Hat Quay をデバッグモードで実行し、ログ情報を取得して、設定情報を取得し、エンドポイントでヘルスチェックを実行することで、Red Hat Quay コンポーネントのトラブルシューティングを行うこともできます。
次の手順を使用すると、コンポーネントの一般的な問題のトラブルシューティングを行うことができます。その後、Red Hat ナレッジベース でソリューションを検索したり、Red Hat サポートチームにサポートチケットを提出したりできます。
6.1. Red Hat Quay データベースのトラブルシューティング
Red Hat Quay で使用される PostgreSQL データベースには、コンテナーイメージとその管理に関連するさまざまな種類の情報が保存されます。PostgreSQL データベースが保存する情報の重要な部分には以下が含まれます。
- イメージのメタデータ: データベースには、イメージ名、バージョン、作成タイムスタンプ、イメージを所有するユーザーまたは組織など、コンテナーイメージに関連付けられたメタデータが保存されます。この情報により、レジストリー内のコンテナーイメージを簡単に識別および整理できます。
- イメージタグ: Red Hat Quay を使用すると、ユーザーはコンテナーイメージにタグを割り当てることができ、便利なラベル付けとバージョン管理が可能になります。PostgreSQL データベースは、イメージタグとそれに対応するイメージマニフェスト間のマッピングを維持し、ユーザーが提供されたタグに基づいてコンテナーイメージの特定のバージョンを取得できるようにします。
- イメージレイヤー: コンテナーイメージは複数のレイヤーで構成され、個別のオブジェクトとして保存されます。データベースには、順序、チェックサム、サイズなど、これらのレイヤーに関する情報が記録されます。このデータは、コンテナーイメージの効率的な保存と取得にとって非常に重要です。
- ユーザーおよび組織のデータ: Red Hat Quay はユーザーと組織の管理をサポートしており、ユーザーがコンテナーイメージへのアクセスを認証および管理できるようにします。PostgreSQL データベースには、ユーザー名、電子メールアドレス、認証トークン、アクセス許可などのユーザーと組織の情報が保存されます。
- レポジトリー情報: Red Hat Quay は、コンテナーイメージをリポジトリーに編成します。リポジトリーは、関連するイメージをグループ化するための論理ユニットとして機能します。データベースは、名前、説明、表示設定、アクセス制御情報などのリポジトリーデータを維持し、ユーザーがリポジトリーを効果的に管理および共有できるようにします。
- イベントログ: Red Hat Quay は、イメージ管理とリポジトリーの操作に関連するさまざまなイベントとアクティビティーを追跡します。イメージのプッシュ、プル、削除、リポジトリーの変更を含むこれらのイベントログは PostgreSQL データベースに保存されて、監査証跡が提供されます。このため、管理者はシステムアクティビティーを監視および分析できます。
このセクションの内容では、次の手順について説明します。
- デプロイメントのタイプの確認: データベースが仮想マシン上のコンテナーとしてデプロイされているか、OpenShift Container Platform 上の Pod としてデプロイされているかを確認します。
-
コンテナーまたは Pod のステータスの確認: デプロイメントタイプに基づいた特定のコマンドを使用して、
データベース
Pod またはコンテナーのステータスを確認します。 - データベースコンテナーまたは Pod のログの調査: データベース Pod またはコンテナーのログ (さまざまなデプロイメントタイプのコマンドを含む) にアクセスして調査します。
-
Red Hat Quay とデータベース Pod 間の接続を確認する: 関連するコマンドを使用して、Red Hat Quay と
database
Pod 間の接続を確認します。 - データベース設定の確認: デプロイメントタイプに基づいて、さまざまなレベル (OpenShift Container Platform または PostgreSQL レベル) でデータベース設定を確認します。
- リソース割り当ての確認: ディスク使用量やその他のリソース使用量を含む、Red Hat Quay デプロイメントのリソース割り当てを監視します。
- Red Hat Quay データベースとの対話: データベースにアクセスしてクエリーを実行するコマンドなど、PostgreSQL データベースと対話する方法を学びます。
6.1.1. Red Hat Quay データベースの問題のトラブルシューティング
PostgreSQL データベースのトラブルシューティングを行うには、次の手順を使用します。
6.1.1.1. Red Hat Quay データベースとの対話
PostgreSQL データベースと対話するには、次の手順を使用します。
PostgreSQL データベースとの対話は潜在的に破壊的です。Red Hat Quay サポートスペシャリストの助けを借りて次の手順を実行することを強く推奨します。
PostgreSQL データベースとの対話は、認可と認証の問題のトラブルシューティングにも使用できます。
手順
Red Hat Quay データベースを実行します。
次のコマンドを入力して、OpenShift Container Platform 上の Red Hat Quay データベース Pod を実行します。
$ oc exec -it <quay_database_pod> -- psql
次のコマンドを入力して、スタンドアロンデプロイメントで Red Hat Quay データベースを実行します。
$ sudo podman exec -it <quay_container_name> /bin/bash
PostgreSQL シェルに入ります。
警告PostgreSQL データベースとの対話は潜在的に破壊的です。Red Hat Quay サポートスペシャリストの助けを借りて次の手順を実行することを強く推奨します。
Red Hat Quay Operator を使用している場合は、次のコマンドを入力して PostgreSQL シェルに入ります。
$ oc rsh <quay_pod_name> psql -U your_username -d your_database_name
スタンドアロン Red Hat Quay デプロイメントを使用している場合は、次のコマンドを入力して PostgreSQL シェルに入ります。
bash-4.4$ psql -U your_username -d your_database_name
6.1.1.2. crashloopbackoff 状態のトラブルシューティング
crashloopbackoff
状態のトラブルシューティングを行うには、次の手順を使用します。
手順
コンテナーまたは Pod が
crashloopbackoff
状態にある場合は、次のコマンドを入力できます。次のコマンドを入力して、Red Hat Quay Operator をスケールダウンします。
$ oc scale deployment/quay-operator.v3.8.z --replicas=0
出力例
deployment.apps/quay-operator.v3.8.z scaled
次のコマンドを入力して、Red Hat Quay データベースをスケールダウンします。
$ oc scale deployment/<quay_database> --replicas=0
出力例
deployment.apps/<quay_database> scaled
次のコマンドを入力して、Red Hat Quay データベースを編集します。
警告PostgreSQL データベースとの対話は潜在的に破壊的です。Red Hat Quay サポートスペシャリストの助けを借りて次の手順を実行することを強く推奨します。
$ oc edit deployment <quay_database>
... template: metadata: creationTimestamp: null labels: quay-component: <quay_database> quay-operator/quayregistry: quay-operator.v3.8.z spec: containers: - env: - name: POSTGRESQL_USER value: postgres - name: POSTGRESQL_DATABASE value: postgres - name: POSTGRESQL_PASSWORD value: postgres - name: POSTGRESQL_ADMIN_PASSWORD value: postgres - name: POSTGRESQL_MAX_CONNECTIONS value: "1000" image: registry.redhat.io/rhel8/postgresql-10@sha256:a52ad402458ec8ef3f275972c6ebed05ad64398f884404b9bb8e3010c5c95291 imagePullPolicy: IfNotPresent name: postgres command: ["/bin/bash", "-c", "sleep 86400"] 1 ...
- 1
- この行を同じインデントに追加します。
出力例
deployment.apps/<quay_database> edited
<quay_database>
内で次のコマンドを実行します。$ oc exec -it <quay_database> -- cat /var/lib/pgsql/data/userdata/postgresql/logs/* /path/to/desired_directory_on_host
6.1.1.3. Red Hat Quay とデータベース Pod 間の接続を確認する
次の手順を使用して、Red Hat Quay とデータベース Pod 間の接続を確認します。
手順
Red Hat Quay とデータベース Pod 間の接続を確認します。
OpenShift Container Platform で Red Hat Quay Operator を使用している場合は、次のコマンドを入力します。
$ oc exec -it _quay_pod_name_ -- curl -v telnet://<database_pod_name>:5432
Red Hat Quay のスタンドアロンデプロイメントを使用している場合は、次のコマンドを入力します。
$ podman exec -it <quay_container_name >curl -v telnet://<database_container_name>:5432
6.1.1.4. リソース割り当ての確認
リソースの割り当てを確認するには、次の手順を実行します。
手順
- 実行中のコンテナーのリストを取得します。
Red Hat Quay デプロイメントのディスク使用量を監視します。
OpenShift Container Platform で Red Hat Quay Operator を使用している場合は、次のコマンドを入力します。
$ oc exec -it <quay_database_pod_name> -- df -ah
Red Hat Quay のスタンドアロンデプロイメントを使用している場合は、次のコマンドを入力します。
$ podman exec -it <quay_database_conatiner_name> df -ah
他のリソースの使用状況を監視します。
次のコマンドを入力して、Red Hat Quay Operator デプロイメントでのリソース割り当てを確認します。
$ oc adm top pods
次のコマンドを入力して、Red Hat Quay のスタンドアロンデプロイメント上の特定の Pod のステータスを確認します。
$ podman pod stats <pod_name>
次のコマンドを入力して、Red Hat Quay のスタンドアロンデプロイメント上の特定のコンテナーのステータスを確認します。
$ podman stats <container_name>
以下の情報が返されます。
- CPU %.前回の測定以降のコンテナーによる CPU 使用率のパーセンテージ。この値は、利用可能な CPU リソースのコンテナーの共有を表します。
-
MEM USAGE / LIMIT: コンテナーの現在のメモリー使用量とそのメモリー制限が続きます。値は
current_usage/memory_limit
の形式で表示されます。たとえば、300.4MiB/7.795GiB
は、コンテナーが現在 7.795 ギガバイトの制限のうち 300.4 メガバイトのメモリーを使用していることを示します。 - MEM %: メモリー制限に対するコンテナーによるメモリー使用量の割合。
-
NET I/O: コンテナーのネットワーク I/O (入力/出力) 統計。コンテナーがネットワーク上で送受信したデータの量が表示されます。値は、
transmitted_bytes / received_bytes
の形式で表示されます。 -
BLOCK I/O: コンテナーのブロック I/O (入力/出力) 統計。これは、コンテナーによって使用されるブロックデバイス (ディスクなど) に対して読み書きされるデータの量を表します。値は
read_bytes/write_bytes
の形式で表示されます。
6.1.2. Red Hat Quay スタンドアロンデプロイメントでのスーパーユーザーのパスワードのリセット
スーパーユーザーのパスワードをリセットするには、次の手順を使用します。
前提条件
- Red Hat Quay スーパーユーザーを作成している。
- Python 3.9 がインストールされている。
-
Python 用の
pip
パッケージマネージャーがインストールされている。 -
pip
用のbcrypt
パッケージがインストールされている。
手順
次のコマンドを入力して、Python 3.9 の
bcrypt
パッケージを使用して、安全なハッシュ化されたパスワードを生成します。$ python3.9 -c 'import bcrypt; print(bcrypt.hashpw(b"newpass1234", bcrypt.gensalt(12)).decode("utf-8"))'
出力例
$2b$12$T8pkgtOoys3G5ut7FV1She6vXlYgU.6TeoGmbbAVQtN8X8ch4knKm
次のコマンドを入力して、Red Hat Quay コンテナーレジストリーのコンテナー ID を表示します。
$ sudo podman ps -a
出力例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 70560beda7aa registry.redhat.io/rhel8/redis-5:1 run-redis 2 hours ago Up 2 hours ago 0.0.0.0:6379->6379/tcp redis 8012f4491d10 registry.redhat.io/quay/quay-rhel8:v3.8.2 registry 3 minutes ago Up 8 seconds ago 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp quay 8b35b493ac05 registry.redhat.io/rhel8/postgresql-10:1 run-postgresql 39 seconds ago Up 39 seconds ago 0.0.0.0:5432->5432/tcp postgresql-quay
次のコマンドで、
postgresql
コンテナーイメージの対話型シェルを実行します。$ sudo podman exec -it 8b35b493ac05 /bin/bash
データベース、ユーザー名、およびホストアドレスを指定して、
quay
PostgreSQL データベースサーバーに再入力します。bash-4.4$ psql -d quay -U quayuser -h 192.168.1.28 -W
パスワードを紛失したスーパーユーザー管理者の
password_hash
を更新します。quay=> UPDATE public.user SET password_hash = '$2b$12$T8pkgtOoys3G5ut7FV1She6vXlYgU.6TeoGmbbAVQtN8X8ch4knKm' where username = 'quayadmin';
出力例
UPDATE 1
次のコマンドを入力して、
password_hash
が更新されたことを確認します。quay=> select * from public.user;
出力例
id | uuid | username | password_hash | email | verified | stripe_id | organization | robot | invoice_email | invalid_login_attempts | last_invalid_login |removed_tag_expiration_s | enabled | invoice_email_address | company | family_name | given_name | location | maximum_queued_builds_count | creation_date | last_accessed ----+--------------------------------------+-----------+--------------------------------------------------------------+-----------------------+--- -------+-----------+--------------+-------+---------------+------------------------+----------------------------+--------------------------+------ ---+-----------------------+---------+-------------+------------+----------+-----------------------------+----------------------------+----------- 1 | 73f04ef6-19ba-41d3-b14d-f2f1eed94a4a | quayadmin | $2b$12$T8pkgtOoys3G5ut7FV1She6vXlYgU.6TeoGmbbAVQtN8X8ch4knKm | quayadmin@example.com | t | | f | f | f | 0 | 2023-02-23 07:54:39.116485 | 1209600 | t | | | | | | | 2023-02-23 07:54:39.116492
新しいパスワードを使用して Red Hat Quay デプロイメントにログインします。
$ sudo podman login -u quayadmin -p newpass1234 http://quay-server.example.com --tls-verify=false
出力例
Login Succeeded!
関連情報
詳細は、Quay のスーパーユーザーパスワードのリセット を参照してください。
6.1.3. Red Hat Quay Operator でのスーパーユーザーのパスワードのリセット
前提条件
- Red Hat Quay スーパーユーザーを作成している。
- Python 3.9 がインストールされている。
-
Python 用の
pip
パッケージマネージャーがインストールされている。 -
pip
用のbcrypt
パッケージがインストールされている。
手順
- Red Hat Quay デプロイメントにログインします。
-
OpenShift Container Platform UI で、Workloads
Secrets に移動します。 -
Red Hat Quay デプロイメントの名前空間 (例えば、
Project quay
を選択します。 - PostgreSQL データベースの認証情報を見つけて保存します。
次のコマンドを入力して、Python 3.9 の
bcrypt
パッケージを使用して、安全なハッシュ化されたパスワードを生成します。$ python3.9 -c 'import bcrypt; print(bcrypt.hashpw(b"newpass1234", bcrypt.gensalt(12)).decode("utf-8"))'
出力例
$2b$12$zoilcTG6XQeAoVuDuIZH0..UpvQEZcKh3V6puksQJaUQupHgJ4.4y
CLI で、たとえば次のようにデータベースにログインします。
$ oc rsh quayuser-quay-quay-database-669c8998f-v9qsl
次のコマンドを入力して、データベース、ユーザー名、およびホストアドレスを指定して、
quay
PostgreSQL データベースサーバーへの接続を開きます。sh-4.4$ psql -U quayuser-quay-quay-database -d quayuser-quay-quay-database -W
次のコマンドを入力して、現在のユーザーのデフォルトのデータベースに接続します。
quay=> \c
パスワードを紛失したスーパーユーザー管理者の
password_hash
を更新します。quay=> UPDATE public.user SET password_hash = '$2b$12$zoilcTG6XQeAoVuDuIZH0..UpvQEZcKh3V6puksQJaUQupHgJ4.4y' where username = 'quayadmin';
次のコマンドを入力して、
password_hash
が更新されたことを確認します。quay=> select * from public.user;
出力例
id | uuid | username | password_hash | email | verified | stripe_id | organization | robot | invoice_email | invalid_login_attempts | last_invalid_login |removed_tag_expiration_s | enabled | invoice_email_address | company | family_name | given_name | location | maximum_queued_builds_count | creation_date | last_accessed ----+--------------------------------------+-----------+--------------------------------------------------------------+-----------------------+--- -------+-----------+--------------+-------+---------------+------------------------+----------------------------+--------------------------+------ ---+-----------------------+---------+-------------+------------+----------+-----------------------------+----------------------------+----------- 1 | 73f04ef6-19ba-41d3-b14d-f2f1eed94a4a | quayadmin | $2b$12$zoilcTG6XQeAoVuDuIZH0..UpvQEZcKh3V6puksQJaUQupHgJ4.4y | quayadmin@example.com | t | | f | f | f | 0 | 2023-02-23 07:54:39.116485 | 1209600 | t | | | | | | | 2023-02-23 07:54:39.116492
- OpenShift Container Platform 上の Red Hat Quay UI に移動し、新しい認証情報を使用してログインします。