7.2. 备份 Red Hat Quay


数据库备份应该使用 PostgreSQL 镜像中提供的工具或您自己的备份基础架构定期执行。Red Hat Quay Operator 不确保 PostgreSQL 数据库已备份。

注意

此流程涵盖了备份 Red Hat Quay PostgreSQL 数据库。它不包括备份 Clair PostgreSQL 数据库。严格说,不需要备份 Clair PostgreSQL 数据库,因为它可以重新创建。如果您选择从头开始重新创建,在 Red Hat Quay 部署中的所有镜像被扫描后,将等待信息被重新填充。在这个停机时间中,安全报告不可用。

如果您考虑备份 Clair PostgreSQL 数据库,您必须考虑其大小取决于存储在 Red Hat Quay 中的镜像数量。因此,数据库可能会非常大。

此流程描述了如何使用 Operator 在 OpenShift Container Platform 上创建 Red Hat Quay 备份。

先决条件

  • 使用 Red Hat Quay Operator 在 OpenShift Container Platform 上部署健康的 Red Hat Quay 部署。状态条件 Available 设置为 True
  • 组件 quaypostgresobjectstorage 设置为 managed: true
  • 如果组件 clair 设为 managed: true,则组件 clairpostgres 也被设为 managed: true (从 Red Hat Quay v3.7 或更高版本开始)
注意

如果您的部署包含部分非受管数据库或存储组件,且您使用外部服务进行 PostgreSQL 或 S3 兼容对象存储来运行 Red Hat Quay 部署,则必须参考服务提供商或厂商文档来创建数据的备份。您可以参阅本指南中描述的工具,作为如何备份外部 PostgreSQL 数据库或对象存储的起点。

7.2.1. Red Hat Quay 配置备份

使用以下步骤备份 Red Hat Quay 配置。

流程

  1. 要通过导出 QuayRegistry 自定义资源来支持 QuayRegistry 自定义资源,请输入以下命令:

    $ oc get quayregistry <quay_registry_name> -n <quay_namespace> -o yaml > quay-registry.yaml
    Copy to Clipboard Toggle word wrap
  2. 编辑生成的 quayregistry.yaml 并删除 status 部分和以下 metadata 字段:

      metadata.creationTimestamp
      metadata.finalizers
      metadata.generation
      metadata.resourceVersion
      metadata.uid
    Copy to Clipboard Toggle word wrap
  3. 输入以下命令备份受管密钥 secret:

    注意

    如果您正在运行一个早于 Red Hat Quay 3.7.0 的版本,可以跳过此步骤。第一次部署 Red Hat Quay 时会自动生成一些 secret。它们存储在 QuayRegistry 资源的命名空间中名为 &lt ;quay_registry_name>-quay-registry-managed-secret-keys 的 secret 中。

    $ oc get secret -n <quay_namespace> <quay_registry_name>-quay-registry-managed-secret-keys -o yaml > managed_secret_keys.yaml
    Copy to Clipboard Toggle word wrap
  4. 编辑生成的 managed_secret_keys.yaml 文件,并删除条目 metadata.ownerReferencesmanaged_secret_keys.yaml 文件应该类似如下:

    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: <quay_registry_name>-quay-registry-managed-secret-keys
      namespace: <quay_namespace>
    data:
      CONFIG_EDITOR_PW: <redacted>
      DATABASE_SECRET_KEY: <redacted>
      DB_ROOT_PW: <redacted>
      DB_URI: <redacted>
      SECRET_KEY: <redacted>
      SECURITY_SCANNER_V4_PSK: <redacted>
    Copy to Clipboard Toggle word wrap

    data 属性下的所有信息都应保持不变。

  5. 输入以下命令重定向当前的 Quay 配置文件:

    $ oc get secret -n <quay-namespace>  $(oc get quayregistry <quay_registry_name> -n <quay_namespace>  -o jsonpath='{.spec.configBundleSecret}') -o yaml > config-bundle.yaml
    Copy to Clipboard Toggle word wrap
  6. 备份挂载到 Quay pod 中的 /conf/stack/config.yaml 文件:

    $ oc exec -it quay_pod_name -- cat /conf/stack/config.yaml > quay_config.yaml
    Copy to Clipboard Toggle word wrap
  7. 获取 Quay 数据库名称:

    $ oc -n <quay_namespace> rsh $(oc get pod -l app=quay -o NAME -n <quay_namespace> |head -n 1) cat /conf/stack/config.yaml|awk -F"/" '/^DB_URI/ {print $4}'
    Copy to Clipboard Toggle word wrap

    输出示例

    quayregistry-quay-database
    Copy to Clipboard Toggle word wrap

7.2.2. 缩减 Red Hat Quay 部署

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

重要

此步骤需要创建 Red Hat Quay 部署状态的一致性备份。不要省略这一步,包括在由外部服务(由 Red Hat Quay Operator 管理)提供的 PostgreSQL 数据库和/或 S3 兼容对象存储的设置中。

流程

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

    1. 对于 Operator 版本 3.7 及更新版本: 通过禁用自动扩展并覆盖 Red Hat 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
      Copy to Clipboard Toggle word wrap
      1
      禁用 Quay、Clair 和镜像 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>
      Copy to Clipboard Toggle word wrap
      $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-app/ {print $1}') -n <quay-namespace>
      Copy to Clipboard Toggle word wrap
      $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-mirror/ {print $1}') -n <quay-namespace>
      Copy to Clipboard Toggle word wrap
      $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/clair-app/ {print $1}') -n <quay-namespace>
      Copy to Clipboard Toggle word wrap
  2. 等待 registry-quay-appregistry-quay-mirrorregistry-clair-app pod (取决于您被设置为由 Red Hat Quay Operator 管理的组件)消失。您可以运行以下命令来检查其状态:

    $ oc get pods -n <quay_namespace>
    Copy to Clipboard Toggle word wrap

    输出示例:

    $ oc get pod
    Copy to Clipboard Toggle word wrap

    输出示例

    quay-operator.v3.7.1-6f9d859bd-p5ftc               1/1     Running     0             12m
    quayregistry-clair-postgres-7487f5bd86-xnxpr       1/1     Running     1 (12m ago)   12m
    quayregistry-quay-app-upgrade-xq2v6                0/1     Completed   0             12m
    quayregistry-quay-database-859d5445ff-cqthr        1/1     Running     0             12m
    quayregistry-quay-redis-84f888776f-hhgms           1/1     Running     0             12m
    Copy to Clipboard Toggle word wrap

7.2.3. 备份 Red Hat Quay 管理的数据库

使用以下步骤备份 Red Hat Quay 管理的数据库。

注意

如果您的 Red Hat Quay 部署配置了外部或不需要的 PostgreSQL 数据库,请参阅您的厂商文档,了解如何创建这些数据库的一致性备份。

流程

  1. 识别 Quay PostgreSQL pod 名称:

    $ oc get pod -l quay-component=postgres -n <quay_namespace> -o jsonpath='{.items[0].metadata.name}'
    Copy to Clipboard Toggle word wrap

    输出示例:

    quayregistry-quay-database-59f54bb7-58xs7
    Copy to Clipboard Toggle word wrap
  2. 下载备份数据库:

    $ oc -n <quay_namespace> exec quayregistry-quay-database-59f54bb7-58xs7 -- /usr/bin/pg_dump -C quayregistry-quay-database  > backup.sql
    Copy to Clipboard Toggle word wrap

7.2.3.1. 备份 Red Hat Quay 管理的对象存储

使用以下步骤备份 Red Hat Quay 管理的对象存储。本节中的说明适用于以下配置:

  • 独立、多云对象网关配置
  • OpenShift Data Foundations 存储要求 Red Hat Quay Operator 通过 ObjectStorageBucketClaim API 从中置备 S3 对象存储桶
注意

如果您的 Red Hat Quay 部署配置了外部(unmanged)对象存储,请参阅厂商的文档,了解如何创建 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)
    Copy to Clipboard Toggle word wrap
  2. 输入以下命令解码并导出 AWS_SECRET_ACCESS_KEY_ID

    $ 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)
    Copy to Clipboard Toggle word wrap
  3. 创建新目录:

    $ mkdir blobs
    Copy to Clipboard Toggle word wrap
注意

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

  1. 输入以下命令将所有 Blob 复制到目录中:

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

7.2.4. 扩展 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
      Copy to Clipboard Toggle word wrap
      1
      重新启用 Quay 的自动扩展、Clair 和镜像 worker (如果需要)
      2
      副本覆盖会再次删除以扩展 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>
      Copy to Clipboard Toggle word wrap
  2. 输入以下命令检查 Red Hat Quay 部署的状态:

    $ oc wait quayregistry registry --for=condition=Available=true -n <quay_namespace>
    Copy to Clipboard Toggle word wrap

    输出示例:

    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
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat