4.21. OADP 和 3scale
4.21.1. 使用 OADP 备份和恢复 3scale API 管理 复制链接链接已复制到粘贴板!
使用红帽 3scale API 管理,您可以管理内部或外部用户的 API。您可以在内部、云端、托管服务或根据您的要求任意组合部署 3scale 组件。
使用 OpenShift API for Data Protection (OADP),您可以通过备份应用程序资源、持久性卷和配置来保护 3scale API 管理部署。
您可以使用 OpenShift API for Data Protection (OADP) Operator 来备份和恢复 3scale API 管理 on-cluster 存储数据库,而不影响正在运行的服务
您可以配置 OADP,以使用 3scale API 管理执行以下操作:
- 按照 备份 3scale API 管理 中的步骤创建 3scale 组件的备份。
- 请按照恢复 3scale API 管理 中的步骤来恢复 3scale 操作器 和部署的组件。
4.21.2. 使用 OADP 备份 3scale API 管理 复制链接链接已复制到粘贴板!
您可以通过备份 3scale operator 和 MySQL 和 Redis 等数据库来备份 Red Hat 3scale API 管理组件。
先决条件
- 已安装并配置了 Red Hat 3scale API Management。如需更多信息,请参阅在 OpenShift 和 Red Hat 3scale API Management 上安装 3scale API 管理。
4.21.2.1. 创建数据保护应用程序 复制链接链接已复制到粘贴板!
您可以为 Red Hat 3scale API Management 创建数据保护应用程序(DPA)自定义资源(CR)。
流程
使用以下配置创建 YAML 文件:
dpa.yaml文件示例apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: dpa-sample namespace: openshift-adp spec: configuration: velero: defaultPlugins: - openshift - aws - csi resourceTimeout: 10m nodeAgent: enable: true uploaderType: kopia backupLocations: - name: default velero: provider: aws default: true objectStorage: bucket: <bucket_name>1 prefix: <prefix>2 config: region: <region>3 profile: "default" s3ForcePathStyle: "true" s3Url: <s3_url>4 credential: key: cloud name: cloud-credentials运行以下命令来创建 DPA CR:
$ oc create -f dpa.yaml
4.21.2.2. 备份 3scale API 管理 operator、secret 和 APIManager 复制链接链接已复制到粘贴板!
您可以备份 Red Hat 3scale API Management operator 资源,以及 Secret 和 APIManager 自定义资源(CR)。
先决条件
- 您创建了数据保护应用程序 (DPA)。
流程
通过创建带有以下配置的 YAML 文件来备份 3scale operator CR,如
operatorgroup、命名空间和订阅 :backup.yaml文件示例apiVersion: velero.io/v1 kind: Backup metadata: name: operator-install-backup1 namespace: openshift-adp spec: csiSnapshotTimeout: 10m0s defaultVolumesToFsBackup: false includedNamespaces: - threescale2 includedResources: - operatorgroups - subscriptions - namespaces itemOperationTimeout: 1h0m0s snapshotMoveData: false ttl: 720h0m0s注意您还可以备份和恢复
ReplicationController、Deployment和Pod对象,以确保所有手动设置环境都已备份和恢复。这不会影响恢复流。运行以下命令来创建备份 CR:
$ oc create -f backup.yaml输出示例
backup.velero.io/operator-install-backup created通过使用以下配置创建 YAML 文件来备份
SecretCR:backup-secret.yaml文件示例apiVersion: velero.io/v1 kind: Backup metadata: name: operator-resources-secrets1 namespace: openshift-adp spec: csiSnapshotTimeout: 10m0s defaultVolumesToFsBackup: false includedNamespaces: - threescale includedResources: - secrets itemOperationTimeout: 1h0m0s labelSelector: matchLabels: app: 3scale-api-management snapshotMoveData: false snapshotVolumes: false ttl: 720h0m0s- 1
- 备份中的
metadata.name参数的值与恢复Secret时使用的metadata.backupName参数的值相同。
运行以下命令来创建
Secret备份 CR:$ oc create -f backup-secret.yaml输出示例
backup.velero.io/operator-resources-secrets created通过创建带有以下配置的 YAML 文件来备份 APIManager CR:
backup-apimanager.yaml 文件示例
apiVersion: velero.io/v1 kind: Backup metadata: name: operator-resources-apim1 namespace: openshift-adp spec: csiSnapshotTimeout: 10m0s defaultVolumesToFsBackup: false includedNamespaces: - threescale includedResources: - apimanagers itemOperationTimeout: 1h0m0s snapshotMoveData: false snapshotVolumes: false storageLocation: ts-dpa-1 ttl: 720h0m0s volumeSnapshotLocations: - ts-dpa-1- 1
- 备份中的
metadata.name参数的值与恢复 APIManager 时使用的metadata.backupName参数的值相同。
运行以下命令来创建 APIManager CR:
$ oc create -f backup-apimanager.yaml输出示例
backup.velero.io/operator-resources-apim created
4.21.2.3. 备份 MySQL 数据库 复制链接链接已复制到粘贴板!
您可以通过创建并附加持久性卷声明(PVC)来备份 MySQL 数据库,以便在指定路径中包含转储的数据。
先决条件
- 您已备份了 Red Hat 3scale API Management operator。
流程
使用以下配置创建 YAML 文件来添加额外 PVC:
ts_pvc.yaml文件示例kind: PersistentVolumeClaim apiVersion: v1 metadata: name: example-claim namespace: threescale spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: gp3-csi volumeMode: Filesystem运行以下命令来创建额外 PVC:
$ oc create -f ts_pvc.yml通过编辑
system-mysql部署以使用 MySQL 转储,将 PVC 附加到系统数据库 pod:$ oc edit deployment system-mysql -n threescalevolumeMounts: - name: example-claim mountPath: /var/lib/mysqldump/data - name: mysql-storage mountPath: /var/lib/mysql/data - name: mysql-extra-conf mountPath: /etc/my-extra.d - name: mysql-main-conf mountPath: /etc/my-extra ... serviceAccount: amp volumes: - name: example-claim persistentVolumeClaim: claimName: example-claim1 ...- 1
- 包含转储数据的 PVC。
使用以下配置创建 YAML 文件以备份 MySQL 数据库:
mysql.yaml文件示例apiVersion: velero.io/v1 kind: Backup metadata: name: mysql-backup1 namespace: openshift-adp spec: csiSnapshotTimeout: 10m0s defaultVolumesToFsBackup: true hooks: resources: - name: dumpdb pre: - exec: command: - /bin/sh - -c - mysqldump -u $MYSQL_USER --password=$MYSQL_PASSWORD system --no-tablespaces > /var/lib/mysqldump/data/dump.sql2 container: system-mysql onError: Fail timeout: 5m includedNamespaces: - threescale includedResources:3 - deployment - pods - replicationControllers - persistentvolumeclaims - persistentvolumes itemOperationTimeout: 1h0m0s labelSelector: matchLabels: app: 3scale-api-management threescale_component_element: mysql snapshotMoveData: false ttl: 720h0m0s运行以下命令备份 MySQL 数据库:
$ oc create -f mysql.yaml输出示例
backup.velero.io/mysql-backup created
验证
运行以下命令验证 MySQL 备份是否已完成:
$ oc get backups.velero.io mysql-backup -o yaml输出示例
status: completionTimestamp: "2025-04-17T13:25:19Z" errors: 1 expiration: "2025-05-17T13:25:16Z" formatVersion: 1.1.0 hookStatus: {} phase: Completed progress: {} startTimestamp: "2025-04-17T13:25:16Z" version: 1
4.21.2.4. 备份后端 Redis 数据库 复制链接链接已复制到粘贴板!
您可以通过添加所需的注解并使用 includedResources 参数列出哪些资源来备份 Redis 数据库。
先决条件
- 备份 Red Hat 3scale API Management Operator。
- 您备份了 MySQL 数据库。
- 在执行备份前,Redis 队列已排空。
流程
运行以下命令,编辑
backend-redis部署上的注解:$ oc edit deployment backend-redis -n threescaleannotations: post.hook.backup.velero.io/command: >- ["/bin/bash", "-c", "redis-cli CONFIG SET auto-aof-rewrite-percentage 100"] pre.hook.backup.velero.io/command: >- ["/bin/bash", "-c", "redis-cli CONFIG SET auto-aof-rewrite-percentage 0"]使用以下配置创建 YAML 文件以备份 Redis 数据库:
redis-backup.yaml文件示例apiVersion: velero.io/v1 kind: Backup metadata: name: redis-backup1 namespace: openshift-adp spec: csiSnapshotTimeout: 10m0s defaultVolumesToFsBackup: true includedNamespaces: - threescale includedResources: - deployment - pods - replicationcontrollers - persistentvolumes - persistentvolumeclaims itemOperationTimeout: 1h0m0s labelSelector: matchLabels: app: 3scale-api-management threescale_component: backend threescale_component_element: redis snapshotMoveData: false snapshotVolumes: false ttl: 720h0m0s- 1
- 备份中的
metadata.name参数的值与恢复 Redis 数据库时使用的metadata.backupName参数的值相同。
运行以下命令备份 Redis 数据库:
$ oc create -f redis-backup.yaml输出示例
backup.velero.io/redis-backup created
验证
运行以下命令验证 Redis 备份是否已完成:
$ oc get backups.velero.io redis-backup -o yaml输出示例
status: completionTimestamp: "2025-04-17T13:25:19Z" errors: 1 expiration: "2025-05-17T13:25:16Z" formatVersion: 1.1.0 hookStatus: {} phase: Completed progress: {} startTimestamp: "2025-04-17T13:25:16Z" version: 1
4.21.3. 使用 OADP 恢复 3scale API 管理 复制链接链接已复制到粘贴板!
您可以通过恢复备份的 3scale operator 资源来恢复 Red Hat 3scale API Management 组件。您还可以恢复 MySQL 和 Redis 等数据库。
恢复数据后,您可以扩展 3scale 操作器和部署。
先决条件
- 已安装并配置了 Red Hat 3scale API Management。如需更多信息,请参阅在 OpenShift 和 Red Hat 3scale API Management 上安装 3scale API 管理。
- 您备份了 3scale 操作器和数据库,如 MySQL 和 Redis。
- 确保您在从备份的同一集群中恢复 3scale。
- 如果要在不同的集群中恢复 3scale,请确保原始备份集群和您要恢复 Operator 的集群使用相同的自定义域。
您可以按照以下流程恢复 Red Hat 3scale API Management operator 资源,以及 Secret 和 APIManager 自定义资源(CR)。
先决条件
- 备份 3scale Operator。
- 您备份了 MySQL 和 Redis 数据库。
您可以在备份的同一集群中恢复数据库。
如果要将 Operator 恢复到您备份的不同集群,请在目标集群上安装和配置 OADP,并在目标集群中启用
nodeAgent。确保 OADP 配置与源集群中的相同。
流程
运行以下命令,删除 3scale operator 自定义资源定义(CRD)和
threescale命名空间:$ oc delete project threescale输出示例
"threescale" project deleted successfully使用以下配置创建 YAML 文件,以恢复 3scale Operator:
restore.yaml文件示例apiVersion: velero.io/v1 kind: Restore metadata: name: operator-installation-restore namespace: openshift-adp spec: backupName: operator-install-backup1 excludedResources: - nodes - events - events.events.k8s.io - backups.velero.io - restores.velero.io - resticrepositories.velero.io - csinodes.storage.k8s.io - volumeattachments.storage.k8s.io - backuprepositories.velero.io itemOperationTimeout: 4h0m0s- 1
- 恢复 3scale Operator 的备份
运行以下命令来恢复 3scale Operator:
$ oc create -f restore.yaml输出示例
restore.velerio.io/operator-installation-restore created运行以下命令手动创建
s3-credentialsSecret对象:$ oc apply -f - <<EOF --- apiVersion: v1 kind: Secret metadata: name: s3-credentials namespace: threescale stringData: AWS_ACCESS_KEY_ID: <ID_123456>1 AWS_SECRET_ACCESS_KEY: <ID_98765544>2 AWS_BUCKET: <mybucket.example.com>3 AWS_REGION: <us-east-1>4 type: Opaque EOF运行以下命令缩减 3scale Operator:
$ oc scale deployment threescale-operator-controller-manager-v2 --replicas=0 -n threescale输出示例
deployment.apps/threescale-operator-controller-manager-v2 scaled使用以下配置创建 YAML 文件,以恢复
Secret:restore-secret.yaml文件示例apiVersion: velero.io/v1 kind: Restore metadata: name: operator-resources-secrets namespace: openshift-adp spec: backupName: operator-resources-secrets1 excludedResources: - nodes - events - events.events.k8s.io - backups.velero.io - restores.velero.io - resticrepositories.velero.io - csinodes.storage.k8s.io - volumeattachments.storage.k8s.io - backuprepositories.velero.io itemOperationTimeout: 4h0m0s- 1
- 恢复
Secret备份。
运行以下命令来恢复
Secret:$ oc create -f restore-secrets.yaml输出示例
restore.velerio.io/operator-resources-secrets created使用以下配置创建 YAML 文件以恢复 APIManager:
restore-apimanager.yaml文件示例apiVersion: velero.io/v1 kind: Restore metadata: name: operator-resources-apim namespace: openshift-adp spec: backupName: operator-resources-apim1 excludedResources:2 - nodes - events - events.events.k8s.io - backups.velero.io - restores.velero.io - resticrepositories.velero.io - csinodes.storage.k8s.io - volumeattachments.storage.k8s.io - backuprepositories.velero.io itemOperationTimeout: 4h0m0s运行以下命令来恢复 APIManager:
$ oc create -f restore-apimanager.yaml输出示例
restore.velerio.io/operator-resources-apim created运行以下命令扩展 3scale Operator:
$ oc scale deployment threescale-operator-controller-manager-v2 --replicas=1 -n threescale输出示例
deployment.apps/threescale-operator-controller-manager-v2 scaled
4.21.3.2. 恢复 MySQL 数据库 复制链接链接已复制到粘贴板!
恢复 MySQL 数据库重新创建以下资源:
-
Pod、ReplicationController和Deployment对象。 - 其他持久性卷(PV)和关联的持久性卷声明(PVC)。
-
example-claimPVC 包含的 MySQL 转储。
不要删除与数据库关联的默认 PV 和 PVC。如果这样做,您的备份会被删除。
先决条件
-
您恢复了
Secret和 APIManager 自定义资源(CR)。
流程
运行以下命令缩减 Red Hat 3scale API Management Operator:
$ oc scale deployment threescale-operator-controller-manager-v2 --replicas=0 -n threescale输出示例
deployment.apps/threescale-operator-controller-manager-v2 scaled创建以下脚本以缩减 3scale Operator:
$ vi ./scaledowndeployment.sh脚本示例:
for deployment in apicast-production apicast-staging backend-cron backend-listener backend-redis backend-worker system-app system-memcache system-mysql system-redis system-searchd system-sidekiq zync zync-database zync-que; do oc scale deployment/$deployment --replicas=0 -n threescale done运行以下命令缩减所有部署 3scale 组件:
$ ./scaledowndeployment.sh输出示例
deployment.apps.openshift.io/apicast-production scaled deployment.apps.openshift.io/apicast-staging scaled deployment.apps.openshift.io/backend-cron scaled deployment.apps.openshift.io/backend-listener scaled deployment.apps.openshift.io/backend-redis scaled deployment.apps.openshift.io/backend-worker scaled deployment.apps.openshift.io/system-app scaled deployment.apps.openshift.io/system-memcache scaled deployment.apps.openshift.io/system-mysql scaled deployment.apps.openshift.io/system-redis scaled deployment.apps.openshift.io/system-searchd scaled deployment.apps.openshift.io/system-sidekiq scaled deployment.apps.openshift.io/zync scaled deployment.apps.openshift.io/zync-database scaled deployment.apps.openshift.io/zync-que scaled运行以下命令来删除
system-mysqlDeployment对象:$ oc delete deployment system-mysql -n threescale输出示例
Warning: apps.openshift.io/v1 deployment is deprecated in v4.14+, unavailable in v4.10000+ deployment.apps.openshift.io "system-mysql" deleted创建以下 YAML 文件以恢复 MySQL 数据库:
restore-mysql.yaml文件示例apiVersion: velero.io/v1 kind: Restore metadata: name: restore-mysql namespace: openshift-adp spec: backupName: mysql-backup1 excludedResources: - nodes - events - events.events.k8s.io - backups.velero.io - restores.velero.io - csinodes.storage.k8s.io - volumeattachments.storage.k8s.io - backuprepositories.velero.io - resticrepositories.velero.io hooks: resources: - name: restoreDB postHooks: - exec: command: - /bin/sh - '-c' - > sleep 30 mysql -h 127.0.0.1 -D system -u root --password=$MYSQL_ROOT_PASSWORD < /var/lib/mysqldump/data/dump.sql2 container: system-mysql execTimeout: 80s onError: Fail waitTimeout: 5m itemOperationTimeout: 1h0m0s restorePVs: true运行以下命令来恢复 MySQL 数据库:
$ oc create -f restore-mysql.yaml输出示例
restore.velerio.io/restore-mysql created
验证
运行以下命令验证
PodVolumeRestore恢复是否已完成:$ oc get podvolumerestores.velero.io -n openshift-adp输出示例
NAME NAMESPACE POD UPLOADER TYPE VOLUME STATUS TOTALBYTES BYTESDONE AGE restore-mysql-rbzvm threescale system-mysql-2-kjkhl kopia mysql-storage Completed 771879108 771879108 40m restore-mysql-z7x7l threescale system-mysql-2-kjkhl kopia example-claim Completed 380415 380415 40m运行以下命令验证额外的 PVC 是否已恢复:
$ oc get pvc -n threescale输出示例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE backend-redis-storage Bound pvc-3dca410d-3b9f-49d4-aebf-75f47152e09d 1Gi RWO gp3-csi <unset> 68m example-claim Bound pvc-cbaa49b0-06cd-4b1a-9e90-0ef755c67a54 1Gi RWO gp3-csi <unset> 57m mysql-storage Bound pvc-4549649f-b9ad-44f7-8f67-dd6b9dbb3896 1Gi RWO gp3-csi <unset> 68m system-redis-storage Bound pvc-04dadafd-8a3e-4d00-8381-6041800a24fc 1Gi RWO gp3-csi <unset> 68m system-searchd Bound pvc-afbf606c-d4a8-4041-8ec6-54c5baf1a3b9 1Gi RWO gp3-csi <unset> 68m
4.21.3.3. 恢复后端 Redis 数据库 复制链接链接已复制到粘贴板!
您可以通过删除部署并指定您不想恢复的资源来恢复后端 Redis 数据库。
先决条件
-
您恢复了 Red Hat 3scale API Management operator 资源、
Secret和 APIManager 自定义资源。 - 您恢复了 MySQL 数据库。
流程
运行以下命令来删除
backend-redis部署:$ oc delete deployment backend-redis -n threescale输出示例
Warning: apps.openshift.io/v1 deployment is deprecated in v4.14+, unavailable in v4.10000+ deployment.apps.openshift.io "backend-redis" deleted使用以下配置创建 YAML 文件,以恢复 Redis 数据库:
restore-backend.yaml文件示例apiVersion: velero.io/v1 kind: Restore metadata: name: restore-backend namespace: openshift-adp spec: backupName: redis-backup1 excludedResources: - nodes - events - events.events.k8s.io - backups.velero.io - restores.velero.io - resticrepositories.velero.io - csinodes.storage.k8s.io - volumeattachments.storage.k8s.io - backuprepositories.velero.io itemOperationTimeout: 1h0m0s restorePVs: true- 1
- 恢复 Redis 备份。
运行以下命令来恢复 Redis 数据库:
$ oc create -f restore-backend.yaml输出示例
restore.velerio.io/restore-backend created
验证
运行以下命令验证
PodVolumeRestore恢复是否已完成:$ oc get podvolumerestores.velero.io -n openshift-adp输出示例:
NAME NAMESPACE POD UPLOADER TYPE VOLUME STATUS TOTALBYTES BYTESDONE AGE restore-backend-jmrwx threescale backend-redis-1-bsfmv kopia backend-redis-storage Completed 76123 76123 21m
4.21.3.4. 扩展 3scale API 管理操作器和部署 复制链接链接已复制到粘贴板!
您可以扩展 Red Hat 3scale API Management operator 以及手动缩减的任何部署。几分钟后,3scale 安装应完全正常工作,其状态应与备份的状态匹配。
先决条件
-
您恢复了 3scale operator 资源,以及
Secret和 APIManager 自定义资源(CR)。 - 您恢复了 MySQL 和后端 Redis 数据库。
-
确保没有扩展部署,或者没有额外的 pod 运行。一些
system-mysql或backend-redispod 在恢复后从部署分离,可以在恢复成功后删除。
流程
运行以下命令扩展 3scale Operator:
$ oc scale deployment threescale-operator-controller-manager-v2 --replicas=1 -n threescale输出示例
deployment.apps/threescale-operator-controller-manager-v2 scaled运行以下命令,确保 3scale pod 正在运行以验证 3scale Operator 是否已部署:
$ oc get pods -n threescale输出示例
NAME READY STATUS RESTARTS AGE threescale-operator-controller-manager-v2-79546bd8c-b4qbh 1/1 Running 0 2m5s创建以下脚本以扩展部署:
$ vi ./scaledeployment.sh脚本文件示例:
for deployment in apicast-production apicast-staging backend-cron backend-listener backend-redis backend-worker system-app system-memcache system-mysql system-redis system-searchd system-sidekiq zync zync-database zync-que; do oc scale deployment/$deployment --replicas=1 -n threescale done运行以下命令来扩展部署:
$ ./scaledeployment.sh输出示例
deployment.apps.openshift.io/apicast-production scaled deployment.apps.openshift.io/apicast-staging scaled deployment.apps.openshift.io/backend-cron scaled deployment.apps.openshift.io/backend-listener scaled deployment.apps.openshift.io/backend-redis scaled deployment.apps.openshift.io/backend-worker scaled deployment.apps.openshift.io/system-app scaled deployment.apps.openshift.io/system-memcache scaled deployment.apps.openshift.io/system-mysql scaled deployment.apps.openshift.io/system-redis scaled deployment.apps.openshift.io/system-searchd scaled deployment.apps.openshift.io/system-sidekiq scaled deployment.apps.openshift.io/zync scaled deployment.apps.openshift.io/zync-database scaled deployment.apps.openshift.io/zync-que scaled运行以下命令,获取
3scale-admin路由以登录到 3scale UI:$ oc get routes -n threescale输出示例
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD backend backend-3scale.apps.custom-cluster-name.openshift.com backend-listener http edge/Allow None zync-3scale-api-b4l4d api-3scale-apicast-production.apps.custom-cluster-name.openshift.com apicast-production gateway edge/Redirect None zync-3scale-api-b6sns api-3scale-apicast-staging.apps.custom-cluster-name.openshift.com apicast-staging gateway edge/Redirect None zync-3scale-master-7sc4j master.apps.custom-cluster-name.openshift.com system-master http edge/Redirect None zync-3scale-provider-7r2nm 3scale-admin.apps.custom-cluster-name.openshift.com system-provider http edge/Redirect None zync-3scale-provider-mjxlb 3scale.apps.custom-cluster-name.openshift.com system-developer http edge/Redirect None在本例中,
3scale-admin.apps.custom-cluster-name.openshift.com是 3scale-admin URL。- 以管理员身份,使用此输出中的 URL 登录 3scale 操作器。您可以验证数据在进行备份时可用。