第 8 章 备份和恢复由 Red Hat Quay Operator 管理的 Red Hat Quay
在 OpenShift Container Platform 上由 Red Hat Quay Operator 管理时,使用本节中的内容来备份和恢复 Red Hat Quay
8.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。 -
组件
quay、postgres和objectstorage设置为managed: true -
如果组件
明确设置为managed: true,则组件clairpostgres也被设置为managed: true(从 Red Hat Quay Operator v3.7 或更高版本开始)
如果您的部署包含部分非受管数据库或存储组件,且您使用外部服务进行 PostgreSQL 或 S3 兼容对象存储来运行 Red Hat Quay 部署,则必须参考服务提供商或厂商文档来创建数据的备份。您可以参阅本指南中描述的工具,作为如何备份外部 PostgreSQL 数据库或对象存储的起点。
8.1.1. Red Hat Quay 配置备份
使用以下步骤备份 Red Hat Quay 配置。
步骤
要通过导出
QuayRegistry自定义资源来支持 QuayRegistry 自定义资源,请输入以下命令:$ oc get quayregistry <quay_registry_name> -n <quay_namespace> -o yaml > quay-registry.yaml
编辑生成的
quayregistry.yaml并删除 status 部分和以下 metadata 字段:metadata.creationTimestamp metadata.finalizers metadata.generation metadata.resourceVersion metadata.uid
输入以下命令备份受管密钥 secret:
注意如果您正在运行早于 Red Hat Quay 3.7.0 的版本,可以跳过这一步。第一次部署 Red Hat Quay 时会自动生成一些 secret。它们存储在
QuayRegistry资源命名空间中的名为 <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
编辑生成的
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属性下的所有信息都应保持不变。输入以下命令重定向当前的
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备份挂载到
Quaypod 中的/conf/stack/config.yaml文件:$ oc exec -it quay_pod_name -- cat /conf/stack/config.yaml > quay_config.yaml
8.1.2. 缩减 Red Hat Quay 部署
使用以下步骤缩减 Red Hat Quay 部署。
此步骤需要创建 Red Hat Quay 部署状态的一致性备份。不要省略这一步,包括在由外部服务(由 Red Hat Quay Operator 管理)提供的 PostgreSQL 数据库和/或 S3 兼容对象存储的设置中。
步骤
根据 Red Hat Quay 部署的版本,使用以下选项之一缩减部署。
对于 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 …对于 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>
等待
registry-quay-app、registry-quay-mirror和registry-clair-apppod (取决于您设置为由 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
8.1.3. 备份 Red Hat Quay 管理的数据库
使用以下步骤备份 Red Hat Quay 管理的数据库。
如果您的 Red Hat Quay 部署配置了外部或不需要的 PostgreSQL 数据库,请参阅您的厂商文档,了解如何创建这些数据库的一致性备份。
步骤
识别 Quay PostgreSQL pod 名称:
$ oc get pod -l quay-component=postgres -n <quay_namespace> -o jsonpath='{.items[0].metadata.name}'输出示例:
quayregistry-quay-database-59f54bb7-58xs7
获取 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下载备份数据库:
$ oc exec quayregistry-quay-database-59f54bb7-58xs7 -- /usr/bin/pg_dump -C quayregistry-quay-database > backup.sql
8.1.3.1. 备份 Red Hat Quay 管理的对象存储
使用以下步骤备份 Red Hat Quay 管理的对象存储。本节中的说明适用于以下配置:
- 独立多云对象网关配置
- OpenShift Data Foundation 存储要求 Red Hat Quay Operator 通过 ObjectStorageBucketClaim API 从中置备 S3 对象存储存储桶
如果您的 Red Hat Quay 部署配置了外部(未授权)对象存储,请参阅您的厂商文档来了解如何创建 Quay 存储桶内容副本。
步骤
输入以下命令解码并导出
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)输入以下命令解码并导出
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)创建新目录:
$ mkdir blobs
输入以下命令将所有 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
8.1.4. 扩展 Red Hat Quay 部署备份
根据 Red Hat Quay 部署的版本,使用以下选项之一扩展部署。
对于 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 …对于 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>
输入以下命令检查 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