第 7 章 备份和恢复由 Red Hat Quay Operator 管理的 Red Hat Quay


当由 OpenShift Container Platform 上的 Red Hat Quay Operator 管理时,请使用本节中的内容备份和恢复 Red Hat Quay。

7.1. 可选:在 OpenShift Container Platform 中为 Red Hat Quay 启用只读模式

在 OpenShift Container Platform 部署中为 Red Hat Quay 启用只读模式,您可以管理 registry 的操作。管理员可以启用只读模式来限制对 registry 的写入访问,这有助于确保数据完整性,降低维护窗口期间的风险,并提供对 registry 数据的意外修改的保护。它还有助于确保您的 Red Hat Quay registry 保持在线状态,并可供用户使用。

在备份和恢复时,您需要在 OpenShift Container Platform 部署中缩减 Red Hat Quay。这会导致在备份期间服务不可用,这在某些情况下可能无法接受。启用只读模式可确保在 OpenShift Container Platform 部署中的 Red Hat Quay 的备份和恢复过程中服务可用性。

注意

在某些情况下,无法进行 Red Hat Quay 的只读选项,因为它需要插入服务密钥和其他手动配置更改。作为只读模式的替代选择,Red Hat Quay 管理员可能会考虑启用 DISABLE_PUSHES 功能。当此字段设置为 true 时,用户无法在使用 CLI 时将镜像或镜像标签推送到 registry。启用 DISABLE_PUSHES只读模式 不同,因为数据库在启用时没有 设置为只读

在某些情况下,此字段可能很有用,如 Red Hat Quay 管理员想要计算其 registry 配额和禁用镜像推送,直到计算完成后为止。使用这个方法,管理员可以避免将整个 registry 置于 只读模式,这会影响数据库,以便仍可执行大多数操作。

有关启用此配置字段的详情,请参考 其它配置字段

先决条件

  • 如果您使用 Red Hat Enterprise Linux (RHEL) 7.x:

    • 您已启用了 Red Hat Software Collections List (RHSCL)。
    • 已安装 Python 3.6。
    • 您已下载了 virtualenv 软件包。
    • 已安装 git CLI。
  • 如果您使用 Red Hat Enterprise Linux (RHEL) 8:

    • 您已在机器上安装了 Python 3。
    • 您已下载了 python3-virtualenv 软件包。
    • 已安装 git CLI。
  • 您已克隆了 https://github.com/quay/quay.git 软件仓库。
  • 已安装 oc CLI。
  • 您可以使用 cluster-admin 权限访问集群。

7.1.1. 在 OpenShift Container Platform 上为 Red Hat Quay 创建服务密钥

Red Hat Quay 使用服务密钥与各种组件进行通信。这些密钥用于签署已完成的请求,如请求扫描镜像、登录、存储访问等。

步骤

  1. 输入以下命令获取 Red Hat Quay pod 列表:

    $ oc get pods -n <namespace>

    输出示例

    example-registry-clair-app-7dc7ff5844-4skw5           0/1     Error                    0             70d
    example-registry-clair-app-7dc7ff5844-nvn4f           1/1     Running                  0             31d
    example-registry-clair-app-7dc7ff5844-x4smw           0/1     ContainerStatusUnknown   6 (70d ago)   70d
    example-registry-clair-app-7dc7ff5844-xjnvt           1/1     Running                  0             60d
    example-registry-clair-postgres-547d75759-75c49       1/1     Running                  0             70d
    example-registry-quay-app-76c8f55467-52wjz            1/1     Running                  0             70d
    example-registry-quay-app-76c8f55467-hwz4c            1/1     Running                  0             70d
    example-registry-quay-app-upgrade-57ghs               0/1     Completed                1             70d
    example-registry-quay-database-7c55899f89-hmnm6       1/1     Running                  0             70d
    example-registry-quay-mirror-6cccbd76d-btsnb          1/1     Running                  0             70d
    example-registry-quay-mirror-6cccbd76d-x8g42          1/1     Running                  0             70d
    example-registry-quay-redis-85cbdf96bf-4vk5m          1/1     Running                  0             70d
  2. 输入以下命令打开到 Quay 容器的远程 shell 会话:

    $ oc rsh example-registry-quay-app-76c8f55467-52wjz
  3. 输入以下命令来创建所需的服务密钥:

    sh-4.4$ python3 tools/generatekeypair.py quay-readonly

    输出示例

    Writing public key to quay-readonly.jwk
    Writing key ID to quay-readonly.kid
    Writing private key to quay-readonly.pem

7.1.2. 在 PostgreSQL 数据库中添加密钥

使用以下步骤将服务密钥添加到 PostgreSQL 数据库中。

先决条件

  • 您已创建了服务密钥。

步骤

  1. 输入以下命令输入 Red Hat Quay 数据库环境:

    $ oc rsh example-registry-quay-app-76c8f55467-52wjz psql -U <database_username> -d <database_name>
  2. 输入以下命令显示 servicekeyapproval 的批准类型和相关备注:

    quay=# select * from servicekeyapproval;

    输出示例

     id | approver_id |          approval_type           |       approved_date        | notes
    ----+-------------+----------------------------------+----------------------------+-------
      1 |             | ServiceKeyApprovalType.AUTOMATIC | 2024-05-07 03:47:48.181347 |
      2 |             | ServiceKeyApprovalType.AUTOMATIC | 2024-05-07 03:47:55.808087 |
      3 |             | ServiceKeyApprovalType.AUTOMATIC | 2024-05-07 03:49:04.27095  |
      4 |             | ServiceKeyApprovalType.AUTOMATIC | 2024-05-07 03:49:05.46235  |
      5 |           1 | ServiceKeyApprovalType.SUPERUSER | 2024-05-07 04:05:10.296796 |
    ...
  3. 输入以下查询在 Red Hat Quay 数据库中添加服务密钥:

    quay=# INSERT INTO servicekey
      (name, service, metadata, kid, jwk, created_date, expiration_date)
      VALUES ('quay-readonly',
               'quay',
               '{}',
               '{<contents_of_.kid_file>}',
               '{<contents_of_.jwk_file>}',
               '{<created_date_of_read-only>}',
               '{<expiration_date_of_read-only>}');

    输出示例

    INSERT 0 1
  4. 接下来,使用以下查询添加密钥批准:

    quay=# INSERT INTO servicekeyapproval ('approval_type', 'approved_date', 'notes')
      VALUES ("ServiceKeyApprovalType.SUPERUSER", "CURRENT_DATE",
               {include_notes_here_on_why_this_is_being_added});

    输出示例

    INSERT 0 1
  5. 将所创建的服务键行中的 approval_ id 字段设置为所创建的服务密钥批准中的 id 字段。您可以使用以下 SELECT 语句来获取必要的 ID:

    UPDATE servicekey
    SET approval_id = (SELECT id FROM servicekeyapproval WHERE approval_type = 'ServiceKeyApprovalType.SUPERUSER')
    WHERE name = 'quay-readonly';
    UPDATE 1

7.1.3. 在 OpenShift Container Platform 中配置只读模式 Red Hat Quay

创建服务密钥并添加到 PostgreSQL 数据库后,您必须在 OpenShift Container Platform 部署中重启 Quay 容器。

重要

以只读模式在 OpenShift Container Platform 上部署 Red Hat Quay 需要修改存储在 OpenShift Container Platform 集群中的 secret。强烈建议您在更改 secret 前创建 secret 的备份。

先决条件

  • 您已创建了服务密钥,并将它们添加到 PostgreSQL 数据库中。

步骤

  1. 输入以下命令在 OpenShift Container Platform 部署中读取 Red Hat Quay 的 secret 名称:

    $ oc get deployment -o yaml <quay_main_app_deployment_name>
  2. 使用 base64 命令对 quay-readonly.kidquay-readonly.pem 文件进行编码:

    $ base64 -w0 quay-readonly.kid

    输出示例

    ZjUyNDFm...
    $ base64 -w0 quay-readonly.pem

    输出示例

    LS0tLS1CRUdJTiBSU0E...
  3. 输入以下命令来获取当前的配置捆绑包和 secret:

    $ oc get secret quay-config-secret-name -o json | jq '.data."config.yaml"' | cut -d '"' -f2 | base64 -d -w0 > config.yaml
  4. 编辑 config.yaml 文件并添加以下信息:

    # ...
    REGISTRY_STATE: readonly
    INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid'
    INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem'
    # ...
  5. 运行以下命令保存文件和 base64 编码:

    $ base64 -w0 quay-config.yaml
  6. 将 Red Hat Quay Operator pod 缩减为 0。这样可确保 Operator 在编辑后不会协调 secret。

    $ oc scale --replicas=0 deployment quay-operator -n openshift-operators
  7. 编辑 secret 使其包含新内容:

    $ oc edit secret quay-config-secret-name -n quay-namespace
    # ...
    data:
      "quay-readonly.kid": "ZjUyNDFm..."
      "quay-readonly.pem": "LS0tLS1CRUdJTiBSU0E..."
      "config.yaml": "QUNUSU9OX0xPR19..."
    # ...

    在 OpenShift Container Platform 以只读模式部署 Red Hat Quay 时,您可以安全地管理 registry 的操作并执行如备份和恢复等操作。

7.1.3.1. 从只读部署扩展 OpenShift Container Platform 上的 Red Hat Quay

当您不再希望 OpenShift Container Platform 上的 Red Hat Quay 处于只读模式时,您可以扩展部署,并从 secret 中删除添加的内容。

步骤

  1. 编辑 config.yaml 文件并删除以下信息:

    # ...
    REGISTRY_STATE: readonly
    INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid'
    INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem'
    # ...
  2. 输入以下命令扩展 Red Hat Quay Operator:

    oc scale --replicas=1 deployment quay-operator -n openshift-operators
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.