7.3. 恢复 Red Hat Quay


当 Red Hat Quay Operator 管理数据库时,请使用以下步骤恢复 Red Hat Quay。它应该在执行 Red Hat Quay registry 备份后执行。如需更多信息,请参阅 备份 Red Hat Quay

先决条件

  • Red Hat Quay 使用 Red Hat Quay Operator 部署到 OpenShift Container Platform 上。
  • 根据 备份 Red Hat Quay 部分中的说明创建由 Red Hat Quay Operator 管理的 Red Hat Quay 配置的备份。
  • 您的 Red Hat Quay 数据库已备份。
  • Red Hat Quay 使用的对象存储桶已被备份。
  • 组件 quay,postgresobjectstorage 设置为 managed: true
  • 如果组件 clair 设置为 managed: true,则组件 clairpostgres 也被设置为 managed: true (从 Red Hat Quay v3.7 或更高版本开始)
  • 在 OpenShift Container Platform 集群上的目标命名空间中没有运行由 Red Hat Quay Operator 管理的 Red Hat Quay 部署
注意

如果您的部署包含部分非受管数据库或存储组件,并且您使用外部服务 PostgreSQL 或 S3 兼容对象存储来运行 Red Hat Quay 部署,则必须参考服务提供商或供应商文档从备份中恢复其数据,然后再恢复 Red Hat Quay

7.3.1. 从备份中恢复 Red Hat Quay 及其配置

使用以下步骤从备份中恢复 Red Hat Quay 及其配置文件。

注意

这些说明假设您遵循了 备份 Red Hat Quay 指南中的流程,并创建同名的备份文件。

步骤

  1. 输入以下命令恢复备份的 Red Hat Quay 配置:

    $ oc create -f ./config-bundle.yaml
    重要

    如果您接收到错误 Error from server (AlreadyExists): error when creating "./config-bundle.yaml": secrets "config-bundle-secret" already exists,您需要使用 $ oc delete Secret config-bundle-secret -n <quay-namespace> 删除现有的资源,并使用 $ oc create -f ./config-bundle.yaml 重新创建它。

  2. 输入以下命令从备份中恢复生成的密钥:

    $ oc create -f ./managed-secret-keys.yaml
  3. 恢复 QuayRegistry 自定义资源:

    $ oc create -f ./quay-registry.yaml
  4. 检查 Red Hat Quay 部署的状态并等待它可用:

    $ oc wait quayregistry registry --for=condition=Available=true -n <quay-namespace>

7.3.2. 缩减 Red Hat Quay 部署

使用以下步骤缩减 Red Hat Quay 部署。

步骤

  1. 根据 Red Hat Quay 部署的版本,使用以下选项之一缩减部署。

    1. 对于 Operator 版本 3.7 及更新版本: 通过禁用自动扩展并覆盖 Quay、mirror worker 和 Clair (如果托管)的副本数来缩减 Red Hat Quay 部署。您的 QuayRegistry 资源应类似于如下:

      apiVersion: quay.redhat.com/v1
      kind: QuayRegistry
      metadata:
        name: registry
        namespace: ns
      spec:
        components:
          …
          - kind: horizontalpodautoscaler
            managed: false 1
          - kind: quay
            managed: true
            overrides: 2
              replicas: 0
          - kind: clair
            managed: true
            overrides:
              replicas: 0
          - kind: mirror
            managed: true
            overrides:
              replicas: 0
          …
      1
      禁用 Quay、Clair 和 Mirroring worker 的自动扩展
      2
      对于访问数据库和 objectstorage 的组件,将副本数设置为 0。
    2. 对于 Operator 版本 3.6 及更早版本: 首先缩减 Red Hat Quay registry,然后是管理的 Red Hat Quay 资源,以缩减 Red Hat Quay 部署:

      $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-operator-namespace>|awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>
      $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-app/ {print $1}') -n <quay-namespace>
      $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-mirror/ {print $1}') -n <quay-namespace>
      $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/clair-app/ {print $1}') -n <quay-namespace>
  2. 等待 registry-quay-appregistry-quay-mirrorregistry-clair-app pod (取决于您设置为由 Red Hat Quay Operator 管理的组件)消失。您可以运行以下命令来检查其状态:

    $ oc get pods -n <quay-namespace>

    输出示例:

    registry-quay-config-editor-77847fc4f5-nsbbv   1/1     Running            0          9m1s
    registry-quay-database-66969cd859-n2ssm        1/1     Running            0          6d1h
    registry-quay-redis-7cc5f6c977-956g8           1/1     Running            0          5d21h

7.3.3. 恢复 Red Hat Quay 数据库

使用以下步骤恢复 Red Hat Quay 数据库。

步骤

  1. 输入以下命令识别您的 Quay 数据库 pod:

    $ oc get pod -l quay-component=postgres -n  <quay-namespace> -o jsonpath='{.items[0].metadata.name}'

    输出示例:

    quayregistry-quay-database-59f54bb7-58xs7
  2. 通过从本地环境复制并复制到 pod 来上传备份:

    $ oc cp ./backup.sql -n <quay-namespace> registry-quay-database-66969cd859-n2ssm:/tmp/backup.sql
  3. 输入以下命令为数据库打开远程终端:

    $ oc rsh -n <quay-namespace> registry-quay-database-66969cd859-n2ssm
  4. 运行以下命令来输入 psql :

    bash-4.4$ psql
  5. 您可以运行以下命令来列出数据库:

    postgres=# \l

    输出示例

                                                      List of databases
               Name            |           Owner            | Encoding |  Collate   |   Ctype    |   Access privileges
    ----------------------------+----------------------------+----------+------------+------------+-----------------------
    postgres                   | postgres                   | UTF8     | en_US.utf8 | en_US.utf8 |
    quayregistry-quay-database | quayregistry-quay-database | UTF8     | en_US.utf8 | en_US.utf8 |

  6. 输入以下命令丢弃数据库:

    postgres=# DROP DATABASE "quayregistry-quay-database";

    输出示例

    DROP DATABASE

  7. 退出 postgres CLI 以重新输入 bash-4.4:

    \q
  8. 将您的 PostgreSQL 数据库重定向到备份数据库:

    sh-4.4$ psql < /tmp/backup.sql
  9. 输入以下命令退出 bash :

    sh-4.4$ exit

7.3.4. 恢复 Red Hat Quay 对象存储数据

使用以下步骤恢复 Red Hat Quay 对象存储数据。

步骤

  1. 输入以下命令导出 AWS_ACCESS_KEY_ID

    $ export AWS_ACCESS_KEY_ID=$(oc get secret -l app=noobaa -n <quay-namespace>  -o jsonpath='{.items[0].data.AWS_ACCESS_KEY_ID}' |base64 -d)
  2. 输入以下命令导出 AWS_SECRET_ACCESS_KEY

    $ export AWS_SECRET_ACCESS_KEY=$(oc get secret -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.AWS_SECRET_ACCESS_KEY}' |base64 -d)
  3. 运行以下命令,将所有 Blob 上传到存储桶:

    $ aws s3 sync --no-verify-ssl --endpoint https://$(oc get route s3 -n openshift-storage  -o jsonpath='{.spec.host}') ./blobs  s3://$(oc get cm -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.BUCKET_NAME}')
注意

您还可以使用 rclonesc3md 而不是 AWS 命令行工具。

7.3.5. 扩展 Red Hat Quay 部署

  1. 根据 Red Hat Quay 部署的版本,使用以下选项之一扩展部署:

    1. 对于 Operator 版本 3.7 及更新版本: 如果需要,通过重新启用自动扩展(如果需要),并删除 Quay、镜像 worker 和 Clair 的副本覆盖来扩展 Red Hat Quay 部署。您的 QuayRegistry 资源应类似于如下:

      apiVersion: quay.redhat.com/v1
      kind: QuayRegistry
      metadata:
        name: registry
        namespace: ns
      spec:
        components:
          …
          - kind: horizontalpodautoscaler
            managed: true 1
          - kind: quay 2
            managed: true
          - kind: clair
            managed: true
          - kind: mirror
            managed: true
          …
      1
      再次启用对 Red Hat Quay 的自动扩展、Clair 和镜像 worker (如果需要)
      2
      副本覆盖会再次删除,以扩展 Red Hat Quay 组件
    2. 对于 Operator 版本 3.6 及更早版本: 再次扩展 Red Hat Quay registry 来扩展 Red Hat Quay 部署:

      $ oc scale --replicas=1 deployment $(oc get deployment -n <quay-operator-namespace> | awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>
  2. 检查 Red Hat Quay 部署的状态:

    $ oc wait quayregistry registry --for=condition=Available=true -n <quay-namespace>

    输出示例:

    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
      ...
      name: registry
      namespace: <quay-namespace>
      ...
    spec:
      ...
    status:
      - lastTransitionTime: '2022-06-20T05:31:17Z'
        lastUpdateTime: '2022-06-20T17:31:13Z'
        message: All components reporting as healthy
        reason: HealthChecksPassing
        status: 'True'
        type: Available
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.