第 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 数据库存储的一些关键信息包括:

  • 镜像元数据.数据库存储与容器镜像关联的元数据,如镜像名称、版本、创建时间戳以及拥有该镜像的用户或机构。这些信息可轻松识别和组织注册表中的容器镜像。
  • 镜像标签.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 数据库交互也可用于对授权和身份验证问题进行故障排除。

流程

  1. 执行到 Red Hat Quay 数据库。

    1. 输入以下命令在 OpenShift Container Platform 上的 Red Hat Quay 数据库 pod 中执行:

      $ oc exec -it <quay_database_pod> -- psql
    2. 输入以下命令在独立部署中执行 Red Hat Quay 数据库:

      $ sudo podman exec -it <quay_container_name> /bin/bash
  2. 输入 PostgreSQL shell。

    警告

    与 PostgreSQL 数据库交互可能具有破坏性。强烈建议您通过 Red Hat Quay 支持专家执行以下步骤。

    1. 如果使用 Red Hat Quay Operator,请输入以下命令输入 PostgreSQL shell:

      $ oc rsh <quay_pod_name> psql -U your_username -d your_database_name
    2. 如果您位于独立的 Red Hat Quay 部署中,请输入以下命令输入 PostgreSQL shell:

      bash-4.4$ psql -U your_username -d your_database_name

6.1.1.2. crashloopbackoff 状态故障排除

使用以下步骤 troueblshoot crashloopbackoff 状态。

流程

  1. 如果容器或 pod 处于 crashloopbackoff 状态,您可以输入以下命令。

    1. 输入以下命令缩减 Red Hat Quay Operator:

      $ oc scale deployment/quay-operator.v3.8.z  --replicas=0

      输出示例

      deployment.apps/quay-operator.v3.8.z scaled

    2. 输入以下命令缩减 Red Hat Quay 数据库:

      $ oc scale deployment/<quay_database> --replicas=0

      输出示例

      deployment.apps/<quay_database> scaled

    3. 输入以下命令来编辑 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

    4. 在 < quay_database> 中执行以下命令

      $ oc exec -it <quay_database> -- cat /var/lib/pgsql/data/userdata/postgresql/logs/* /path/to/desired_directory_on_host

使用以下步骤检查 Red Hat Quay 和数据库 pod 之间的连接

流程

  1. 检查 Red Hat Quay 和数据库 pod 之间的连接。

    1. 如果您在 OpenShift Container Platform 上使用 Red Hat Quay Operator,请输入以下命令:

      $ oc exec -it _quay_pod_name_ -- curl -v telnet://<database_pod_name>:5432
    2. 如果使用独立部署 Red Hat Quay,请输入以下命令:

      $ podman exec -it <quay_container_name >curl -v telnet://<database_container_name>:5432

6.1.1.4. 检查资源分配

使用以下步骤检查资源分配。

流程

  1. 获取运行容器的列表。
  2. 监控 Red Hat Quay 部署的磁盘用量。

    1. 如果您在 OpenShift Container Platform 上使用 Red Hat Quay Operator,请输入以下命令:

      $ oc exec -it <quay_database_pod_name> -- df -ah
    2. 如果使用独立部署 Red Hat Quay,请输入以下命令:

      $ podman exec -it <quay_database_conatiner_name> df -ah
  3. 监控其他资源使用量。

    1. 输入以下命令在 Red Hat Quay Operator 部署中检查资源分配:

      $ oc adm top pods
    2. 输入以下命令在 Red Hat Quay 的独立部署中检查特定 pod 的状态:

      $ podman pod stats <pod_name>
    3. 输入以下命令在 Red Hat Quay 的独立部署中检查特定容器的状态:

      $ podman stats <container_name>

      返回以下信息:

      • CPU %。容器自上次测量以来的 CPU 使用量百分比。这个值代表了容器的可用 CPU 资源的共享。
      • MEM USAGE/ LIMIT。容器的当前内存用量及其内存限值。这些值以 current_usage / memory_limit 格式显示。例如,300.4MiB / 7.795GiB 表示容器目前使用 300.4MB 内存,其限值为 7.795GB。
      • MEM %.容器的内存使用量与内存限制有关。
      • 网络 I/O.容器的网络 I/O (输入/输出)统计信息。它显示容器通过网络传输和接收的数据量。这些值以以下格式显示: transport _bytes / received_bytes
      • 块 I/O.容器的块 I/O (输入/输出)统计信息。它代表了从容器读取和写入到块设备(如磁盘)的数据量。这些值以 read_bytes / written_bytes 格式显示。

使用以下步骤重置超级用户的密码。

先决条件

  • 您已创建了 Red Hat Quay 超级用户。
  • 已安装 Python 3.9。
  • 您已为 Python 安装 pip 软件包管理器。
  • 您已为 pip 安装了 bcrypt 软件包。

流程

  1. 输入以下命令,使用 Python 3.9 中的 bcrypt 软件包生成安全、哈希的密码:

    $ python3.9 -c 'import bcrypt; print(bcrypt.hashpw(b"newpass1234", bcrypt.gensalt(12)).decode("utf-8"))'

    输出示例

    $2b$12$T8pkgtOoys3G5ut7FV1She6vXlYgU.6TeoGmbbAVQtN8X8ch4knKm

  2. 输入以下命令显示 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

  3. 输入以下命令为 postgresql 容器镜像执行交互式 shell:

    $ sudo podman exec -it 8b35b493ac05 /bin/bash
  4. 重新输入 quay PostgreSQL 数据库服务器,指定数据库、用户名和主机地址:

    bash-4.4$ psql -d quay -U quayuser -h 192.168.1.28 -W
  5. 更新超级用户 admin 的 password_hash,其丢失了其密码:

    quay=> UPDATE public.user SET password_hash = '$2b$12$T8pkgtOoys3G5ut7FV1She6vXlYgU.6TeoGmbbAVQtN8X8ch4knKm' where username = 'quayadmin';

    输出示例

    UPDATE 1

  6. 输入以下命令来确保 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

  7. 使用新密码登录到 Red Hat Quay 部署:

    $ sudo podman login -u quayadmin -p newpass1234 http://quay-server.example.com --tls-verify=false

    输出示例

    Login Succeeded!

先决条件

  • 您已创建了 Red Hat Quay 超级用户。
  • 已安装 Python 3.9。
  • 您已为 Python 安装 pip 软件包管理器。
  • 您已为 pip 安装了 bcrypt 软件包。

流程

  1. 登录到您的 Red Hat Quay 部署。
  2. 在 OpenShift Container Platform UI 中,进入到 Workloads Secrets
  3. 为您的 Red Hat Quay 部署选择命名空间,如 Project quay
  4. 查找并存储 PostgreSQL 数据库凭据。
  5. 输入以下命令,使用 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

  6. 在 CLI 中,登录到数据库,例如:

    $ oc rsh quayuser-quay-quay-database-669c8998f-v9qsl
  7. 输入以下命令打开到 quay PostgreSQL 数据库服务器的连接,指定数据库、用户名和主机地址:

    sh-4.4$ psql -U quayuser-quay-quay-database -d quayuser-quay-quay-database -W
  8. 输入以下命令连接到当前用户的默认数据库:

    quay=> \c
  9. 更新超级用户 admin 的 password_hash,其丢失了其密码:

    quay=> UPDATE public.user SET password_hash = '$2b$12$zoilcTG6XQeAoVuDuIZH0..UpvQEZcKh3V6puksQJaUQupHgJ4.4y' where username = 'quayadmin';
  10. 输入以下命令来确保 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

  11. 进入到 OpenShift Container Platform 上的 Red Hat Quay UI,并使用新凭证登录。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部