6.2. 备份 Red Hat Quay
数据库备份应该定期使用 PostgreSQL 镜像中提供的工具或您自己的备份基础架构来执行。Red Hat Quay Operator 并不保证 PostgreSQL 数据库已被备份。
此流程涵盖了备份 Red Hat Quay PostgreSQL 数据库。它没有涵盖 Clair PostgreSQL 数据库的备份。严格说,不需要备份 Clair PostgreSQL 数据库,因为它可以被重新创建。如果您选择从头开始重新创建它,请等待在 Red Hat Quay 部署中的所有镜像扫描后重新填充信息。在此停机时间中,安全报告不可用。
如果您要考虑备份 Clair PostgreSQL 数据库,则必须考虑其大小取决于 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 -
如果组件
clair设置为managed: true,则组件clairpostgres也被设置为managed: true(从 Red Hat Quay v3.7 或更高版本开始)
如果您的部署包含部分非受管数据库或存储组件,并且您使用外部服务 PostgreSQL 或 S3 兼容对象存储来运行 Red Hat Quay 部署,您必须引用服务提供商或供应商文档来创建数据的备份。您可以参考本指南中描述的工具,作为如何备份外部 PostgreSQL 数据库或对象存储的起点。
6.2.1. Red Hat Quay 配置备份 复制链接链接已复制到粘贴板!
使用以下步骤备份 Red Hat Quay 配置。
步骤
要通过导出
QuayRegistry自定义资源来支持 QuayRegistry 自定义资源,请输入以下命令:oc get quayregistry <quay_registry_name> -n <quay_namespace> -o yaml > quay-registry.yaml
$ oc get quayregistry <quay_registry_name> -n <quay_namespace> -o yaml > quay-registry.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑生成的
quayregistry.yaml并删除 status 部分和以下 metadata 字段:metadata.creationTimestamp metadata.finalizers metadata.generation metadata.resourceVersion metadata.uid
metadata.creationTimestamp metadata.finalizers metadata.generation metadata.resourceVersion metadata.uidCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令备份受管密钥 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
$ oc get secret -n <quay_namespace> <quay_registry_name>-quay-registry-managed-secret-keys -o yaml > managed_secret_keys.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑生成的
managed_secret_keys.yaml文件,并删除条目metadata.ownerReferences。您的managed_secret_keys.yaml文件应类似于如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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$ oc get secret -n <quay-namespace> $(oc get quayregistry <quay_registry_name> -n <quay_namespace> -o jsonpath='{.spec.configBundleSecret}') -o yaml > config-bundle.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 备份挂载到
Quaypod 中的/conf/stack/config.yaml文件:oc exec -it quay_pod_name -- cat /conf/stack/config.yaml > quay_config.yaml
$ oc exec -it quay_pod_name -- cat /conf/stack/config.yaml > quay_config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取
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}'$ 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}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
quayregistry-quay-database
quayregistry-quay-databaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.2. 缩减 Red Hat Quay 部署 复制链接链接已复制到粘贴板!
使用以下步骤缩减 Red Hat Quay 部署。
需要此步骤来创建 Red Hat Quay 部署状态的一致性备份。不要省略此步骤,包括在 PostgreSQL 数据库和/或 S3 兼容对象存储由外部服务(由 Red Hat Quay Operator 管理)提供的设置中。
步骤
根据 Red Hat Quay 部署的版本,使用以下选项之一缩减部署。
对于 Operator 版本 3.7 及更新版本: 通过禁用自动扩展并覆盖 Red Hat Quay、mirror worker 和 Clair (如果受管)的副本数来缩减 Red Hat Quay 部署。您的
QuayRegistry资源应类似于如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Operator 版本 3.6 及更早版本 :首先缩减 Red Hat Quay registry,然后是管理的 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-operator-namespace>|awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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-app/ {print $1}') -n <quay-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 '/quay-mirror/ {print $1}') -n <quay-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/clair-app/ {print $1}') -n <quay-namespace>$ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/clair-app/ {print $1}') -n <quay-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
等待
registry-quay-app、registry-quay-mirror和registry-clair-apppod (取决于您设置为由 Red Hat Quay Operator 管理的组件)消失。您可以运行以下命令来检查其状态:oc get pods -n <quay_namespace>
$ oc get pods -n <quay_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
oc get pod
$ oc get podCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
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-database-859d5445ff-cqthr 1/1 Running 0 12m quayregistry-quay-redis-84f888776f-hhgms 1/1 Running 0 12m
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-database-859d5445ff-cqthr 1/1 Running 0 12m quayregistry-quay-redis-84f888776f-hhgms 1/1 Running 0 12mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.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}'$ 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-58xs7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下载备份数据库:
oc -n <quay_namespace> exec quayregistry-quay-database-59f54bb7-58xs7 -- /usr/bin/pg_dump -C quayregistry-quay-database > backup.sql
$ oc -n <quay_namespace> exec quayregistry-quay-database-59f54bb7-58xs7 -- /usr/bin/pg_dump -C quayregistry-quay-database > backup.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.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)$ 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_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)$ 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 创建新目录:
mkdir blobs
$ mkdir blobsCopy 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}') s3://$(oc get cm -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.BUCKET_NAME}') ./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}') ./blobsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.4. 扩展 Red Hat Quay 部署 复制链接链接已复制到粘贴板!
根据 Red Hat Quay 部署的版本,使用以下选项之一扩展部署:
对于 Operator 版本 3.7 及更新版本: 如果需要,通过重新启用自动扩展(如果需要),并删除 Quay、镜像 worker 和 Clair 的副本覆盖来扩展 Red Hat Quay 部署。您的
QuayRegistry资源应类似于如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Operator 版本 3.6 及更早版本: 通过扩展 Red Hat Quay registry 来扩展 Red Hat Quay 部署:
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
输入以下命令检查 Red Hat Quay 部署的状态:
oc wait quayregistry registry --for=condition=Available=true -n <quay_namespace>
$ oc wait quayregistry registry --for=condition=Available=true -n <quay_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow