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


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

11.1. 备份 Red Hat Quay

此流程描述了如何使用 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
  • 如果组件 明确设置为 managed: true,则组件 clairpostgres 也被设置为 managed: true (从 Red Hat Quay Operator v3.7 或更高版本开始)
注意

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

11.1.1. Red Hat Quay 配置备份

  1. 通过导出 QuayRegistry 自定义资源来备份它:

    $ oc get quayregistry <quay-registry-name> -n <quay-namespace> -o yaml > quay-registry.yaml
  2. 编辑生成的 quayregistry.yaml 并删除 status 部分和以下 metadata 字段:

      metadata.creationTimestamp
      metadata.finalizers
      metadata.generation
      metadata.resourceVersion
      metadata.uid
  3. 备份受管密钥 secret:

    注意

    如果您正在运行早于 Red Hat Quay 3.7.0 的版本,可以跳过这一步。首次部署 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
  4. 编辑生成的 managed-secret-keys.yaml 文件,并删除条目 metadata.ownerReferences。您的 managed-secret-keys.yaml 文件应类似如下:

    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: <quayname>-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>

    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
  6. 备份挂载到 Quay pod 中的 /conf/stack/config.yaml 文件:

    $ oc exec -it quay-pod-name -- cat /conf/stack/config.yaml > quay-config.yaml

11.1.2. 缩减 Red Hat Quay 部署

重要

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

  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
    1
    禁用 Quay、Clair 和 mirroring worker 的自动扩展
    2
    将访问数据库和对象的组件的副本数设置为 0
  2. 对于 Operator 版本 3.6 及更早版本 :首先缩减 Red Hat Quay Operator,然后扩展受管 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>
  3. 等待 registry-quay-appregistry-quay-mirrorregistry-clair-app pod (取决于您设置为由 Red Hat Quay Operator 管理的组件)消失。您可以运行以下命令来检查其状态:

    $ oc get pods -n <quay-namespace>

    输出示例:

    $ oc get pod
    
    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-config-editor-6dfdcfc44f-hlvwm   1/1     Running     0             73s
    quayregistry-quay-database-859d5445ff-cqthr        1/1     Running     0             12m
    quayregistry-quay-redis-84f888776f-hhgms           1/1     Running     0             12m

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

注意

如果您的 Red Hat Quay 部署配置了外部(未协调) Postgres 数据库,请参阅您的厂商文档来了解如何创建这些数据库的一致性备份。

  1. 识别 Quay PostgreSQL pod 名称:

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

    输出示例:

    quayregistry-quay-database-59f54bb7-58xs7
  2. 获取 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}'
    quayregistry-quay-database
  3. 下载备份数据库:

    $ oc exec quayregistry-quay-database-59f54bb7-58xs7 -- /usr/bin/pg_dump -C quayregistry-quay-database  > backup.sql

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

本节中的说明适用于以下配置:

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

如果您的 Red Hat Quay 部署配置了外部(未授权)对象存储,请参阅您的厂商文档来了解如何创建 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_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)
  3. 创建新目录并将所有 Blob 复制到其中:

    $ mkdir blobs
    
    $ 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
注意

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

11.1.4. 扩展 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
    重新启用 Quay、Clair 和 mirroring worker 的自动扩展(如果需要)
    2
    副本覆盖会再次移除,以扩展 Quay 组件备份
  2. 对于 Operator 版本 3.6 及更早版本: 再次扩展 Red Hat Quay Operator,扩展 Red Hat Quay 部署:

    $ oc scale --replicas=1 deployment $(oc get deployment -n <quay-operator-namespace> | awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>
  3. 检查 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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部