16.2. 恢复 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 上部署。
- 按照 Backing up Red Hat Quay 部分的说明创建了由 Red Hat Quay Operator 管理的 Red Hat Quay 配置的备份
- 您的 Red Hat Quay 数据库已被备份。
- Red Hat Quay 使用的对象存储桶已被备份。
-
组件
quay、postgres和objectstorage设置为managed: true -
如果将组件
冲突设置为managed: true,则组件clairpostgres也被设置为managed: true(从 Red Hat Quay Operator v3.7 或更高版本开始) - 在 OpenShift Container Platform 集群上的目标命名空间中没有由 Red Hat Quay Operator 管理的 Red Hat Quay 部署
如果您的部署包含部分非受管数据库或存储组件,且您使用外部服务进行 PostgreSQL 或 S3 兼容对象存储来运行 Red Hat Quay 部署,则必须在恢复 Red Hat Quay 前从备份中恢复其数据。
16.2.1. 从备份中恢复 Red Hat Quay 及其配置
使用以下步骤从备份中恢复 Red Hat Quay 及其配置文件。
这些说明假设您遵循 备份 Red Hat Quay 指南中的过程,并使用相同的名称创建备份文件。
流程
输入以下命令恢复备份的 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重新创建它。输入以下命令从备份中恢复生成的密钥:
$ oc create -f ./managed-secret-keys.yaml
恢复
QuayRegistry自定义资源:$ oc create -f ./quay-registry.yaml
检查 Red Hat Quay 部署的状态并等待它可用:
$ oc wait quayregistry registry --for=condition=Available=true -n <quay-namespace>
16.2.2. 缩减 Red Hat Quay 部署
使用以下步骤缩减 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: 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>
输出示例:
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
16.2.3. 恢复 Red Hat Quay 数据库
使用以下步骤恢复您的 Red Hat Quay 数据库。
流程
输入以下命令识别您的
Quay数据库 pod:$ oc get pod -l quay-component=postgres -n <quay-namespace> -o jsonpath='{.items[0].metadata.name}'输出示例:
quayregistry-quay-database-59f54bb7-58xs7
通过从本地环境复制到 pod 来上传备份:
$ oc cp ./backup.sql -n <quay-namespace> registry-quay-database-66969cd859-n2ssm:/tmp/backup.sql
输入以下命令在数据库中打开远程终端:
$ oc rsh -n <quay-namespace> registry-quay-database-66969cd859-n2ssm
运行以下命令来输入 psql :
bash-4.4$ psql
您可以运行以下命令来列出数据库:
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 |输入以下命令丢弃数据库:
postgres=# DROP DATABASE "quayregistry-quay-database";
输出示例
DROP DATABASE
退出 postgres CLI 以重新输入 bash-4.4:
\q
将 PostgreSQL 数据库重定向到备份数据库:
sh-4.4$ psql < /tmp/backup.sql
输入以下命令退出 bash:
sh-4.4$ exit
16.2.4. 恢复 Red Hat Quay 对象存储数据
使用以下步骤恢复 Red Hat 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:$ 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)运行以下命令,将所有 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}')
16.2.5. 扩展 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