15.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 上部署。
- 由 Red Hat Quay Operator 管理的 Red Hat Quay 配置的备份已按照 备份 Red Hat Quay 部分中的说明创建。
- 您的 Red Hat Quay 数据库已备份。
- Red Hat Quay 使用的对象存储存储桶已被备份。
-
组件
quay
、postgres
和objectstorage
设置为managed: true
-
如果组件
clair
设置为managed: true
,则组件冲突
会设置为managed: true
(从 Red Hat Quay Operator v3.7 或更高版本开始) - 在 OpenShift Container Platform 集群的目标命名空间中没有运行 Red Hat Quay Operator 管理的 Red Hat Quay 部署
如果您的部署包含部分非受管数据库或存储组件,并且您使用 Postgres 或 S3 兼容对象存储的外部服务来运行 Red Hat Quay 部署,您必须在恢复 Red Hat Quay 前引用服务供应商或厂商文档从备份中恢复数据
15.2.1. 从备份中恢复 Red Hat Quay 及其配置
这些说明假定您已遵循了 备份 Red Hat Quay 指南中的流程,并使用相同名称创建备份文件。
从备份中恢复备份的 Red Hat Quay 配置和生成的密钥:
$ oc create -f ./config-bundle.yaml $ oc create -f ./managed-secret-keys.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
重新创建它。恢复
QuayRegistry
自定义资源:$ oc create -f ./quay-registry.yaml
检查 Red Hat Quay 部署的状态,并等待它可用:
$ oc wait quayregistry registry --for=condition=Available=true -n <quay-namespace>
15.2.2. 缩减 Red Hat Quay 部署
对于 Operator 版本 3.7 及更新版本: 禁用自动扩展并覆盖 Quay 的副本数(如果受管)缩减 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 资源:
$ 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-app
pod(取决于 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
15.2.3. 恢复 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
15.2.4. 恢复 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}')
15.2.5. 扩展 Red Hat Quay 部署
对于 Operator 版本 3.7 及更新的版本: 通过重新启用自动扩展自动扩展来扩展 Red Hat Quay 部署,并在需要时删除 Quay 的副本覆盖,镜像 worker 和 Clair。您的
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