11.2. 恢复 Red Hat Quay
当 Red Hat Quay Operator 管理数据库时,这个流程用于恢复 Red Hat Quay。它应该在执行 Quay registry 备份后执行。
先决条件
- Red Hat Quay 使用 Quay Operator 在 OpenShift Container Platform 上部署。
- 您的 Red Hat Quay 数据库已被备份。
流程
- 恢复备份的 Quay 配置和随机生成的密钥: - oc create -f ./config-bundle.yaml - $ oc create -f ./config-bundle.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - oc create -f ./managed-secret-keys.yaml - $ oc create -f ./managed-secret-keys.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 如果您收到错误 - Error from server (AlreadyExists):创建 "./config-bundle.yaml": secrets "config-bundle-secret" already exists- 时的错误,您必须使用 $ oc delete Secret config-bundle-secret -n <quay重新创建它。- -namespace>
- 恢复 QuayRegistry 自定义资源: - oc create -f ./quay-registry.yaml - $ oc create -f ./quay-registry.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 缩减 Quay Operator: - 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-operator-namespace> |awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 缩减 Quay 命名空间: - oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace> -l quay-component=quay -o jsonpath='{.items[0].metadata.name}') -n <quay-namespace>- $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace> -l quay-component=quay -o jsonpath='{.items[0].metadata.name}') -n <quay-namespace>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 识别您的 Quay 数据库 pod: - oc get pod -l quay-component=postgres -n <quay-namespace> -o jsonpath='{.items[0].metadata.name}'- $ oc get pod -l quay-component=postgres -n <quay-namespace> -o jsonpath='{.items[0].metadata.name}'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例: - quayregistry-quay-database-59f54bb7-58xs7 - quayregistry-quay-database-59f54bb7-58xs7- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 通过从本地环境复制到本地环境和 pod 来上传备份: - oc cp ./backup.sql -n <quay-namespace> registry-quay-database-66969cd859-n2ssm:/tmp/backup.sql - $ oc cp ./backup.sql -n <quay-namespace> registry-quay-database-66969cd859-n2ssm:/tmp/backup.sql- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 打开到数据库的远程终端: - oc rsh -n <quay-namespace> registry-quay-database-66969cd859-n2ssm - $ oc rsh -n <quay-namespace> registry-quay-database-66969cd859-n2ssm- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Enter psql: - bash-4.4$ psql - bash-4.4$ psql- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 您可以运行以下命令来列出数据库: - postgres=# \l - postgres=# \l- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例: - 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 |- 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 |- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 丢弃数据库: - postgres=# DROP DATABASE "quayregistry-quay-database"; - postgres=# DROP DATABASE "quayregistry-quay-database";- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例: - DROP DATABASE - DROP DATABASE- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 退出 postgres CLI 以重新输入 bash-4.4 : - \q - \q- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 将您的 PostgreSQL 数据库重定向到备份数据库: - psql < /tmp/backup.sql - sh-4.4$ psql < /tmp/backup.sql- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 退出 bash: - exit - sh-4.4$ exit- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 导出 - 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)- $ 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 Copied! - Toggle word wrap Toggle overflow 
- 导出 - 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)- $ 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 Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令将所有 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}')- $ 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}')- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 扩展 Quay Operator: - oc scale --replicas=1 deployment $(oc get deployment -n <quay-operator-namespace> |awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>- $ oc scale --replicas=1 deployment $(oc get deployment -n <quay-operator-namespace> |awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 扩展 Quay 命名空间: - oc scale --replicas=1 deployment $(oc get deployment -n <quay-namespace> -l quay-component=quay -o jsonpath='{.items[0].metadata.name}') -n <quay-namespace>- $ oc scale --replicas=1 deployment $(oc get deployment -n <quay-namespace> -l quay-component=quay -o jsonpath='{.items[0].metadata.name}') -n <quay-namespace>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 检查 Operator 的状态,并确保它重新上线: - oc get quayregistry -n <quay-namespace> <registry-name> -o yaml - $ oc get quayregistry -n <quay-namespace> <registry-name> -o yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow