第 6 章 Red Hat Quay 组件故障排除
本文档侧重于对 Red Hat Quay 中特定组件的故障排除,为解决可能的问题提供针对性的指导。此资源专为系统管理员、操作员和开发人员设计,旨在帮助诊断和故障排除与各个 Red Hat Quay 组件相关的问题。
除了以下流程外,Red Hat Quay 组件还可以通过在 debug 模式下运行 Red Hat Quay、获取日志信息、获取配置信息以及对端点执行健康检查,从而进行故障排除。
通过按照以下流程,您可以排除常见组件问题。之后,您可以在 红帽知识库 中搜索解决方案,或使用红帽支持团队提交支持问题单。
6.1. 对 Red Hat Quay 数据库进行故障排除
用于 Red Hat Quay 的 PostgreSQL 数据库存储与容器镜像及其管理有关的各种信息。PostgreSQL 数据库存储的一些关键信息包括:
- 镜像元数据.数据库存储与容器镜像关联的元数据,如镜像名称、版本、创建时间戳以及拥有镜像的用户或机构。通过这些信息,可以在 registry 中轻松识别和组织容器镜像。
- 镜像标签.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
和数据库
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 shell。
警告与 PostgreSQL 数据库交互可能存在破坏性。强烈建议您在 Red Hat Quay 支持专家下执行以下步骤。
如果使用 Red Hat Quay Operator,请输入以下命令进入 PostgreSQL shell:
$ oc rsh <quay_pod_name> psql -U your_username -d your_database_name
如果您位于独立的 Red Hat Quay 部署中,请输入以下命令进入 PostgreSQL shell:
bash-4.4$ psql -U your_username -d your_database_name
6.1.1.2. crashloopbackoff 状态故障排除
使用以下步骤 troueblshoot 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 使用/限制.容器的当前内存用量及其内存限制。这些值以
current_usage / memory_limit
格式显示。例如,300.4MiB / 7.795GiB
表示容器当前使用 300.4 MB 内存,限制为 7.795GB。 - MEM %.容器与内存限制相关的内存用量百分比。
-
网络 I/O.容器的网络 I/O (input/output)统计信息。它显示容器通过网络传输和接收的数据量。这些值以格式显示: transport
_bytes / received_bytes
。 -
块 I/O。容器的块 I/O (input/output)统计信息。它代表了从中读取并写入容器使用的块设备(如磁盘)的数据量。这些值以
read_bytes / written_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 容器 registry 的容器 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
容器镜像执行交互式 shell:$ sudo podman exec -it 8b35b493ac05 /bin/bash
重新输入
quay
PostgreSQL 数据库服务器,指定数据库、用户名和主机地址:bash-4.4$ psql -d quay -U quayuser -h 192.168.1.28 -W
更新超级用户 admin 的
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
更新超级用户 admin 的
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,并使用新凭证登录。