第 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

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

使用以下步骤检查 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 格式显示。

6.1.2. 在 Red Hat Quay 独立部署中重置超级用户密码

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

先决条件

  • 您已创建了 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!

其他资源

如需更多信息,请参阅 为 Quay 重置超级用户密码

6.1.3. 在 Red Hat Quay Operator 上重置超级用户密码

先决条件

  • 您已创建了 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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

© 2024 Red Hat, Inc.