搜索

第 6 章 Red Hat Quay 组件故障排除

download PDF

本文档侧重于对 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 数据库交互也可用于对授权和身份验证问题进行故障排除。

流程

  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 使用/限制.容器的当前内存用量及其内存限制。这些值以 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 软件包管理器。
  • 您已安装了用于 pipbcrypt 软件包。

流程

  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 软件包管理器。
  • 您已安装了用于 pipbcrypt 软件包。

流程

  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.