4.12. OADP 和 3scale
4.12.1. 使用 OADP 备份和恢复 3scale
使用红帽 3scale API 管理(APIM),您可以为内部或外部用户管理 API。在构建的性能、客户控制和未来增长的基础架构平台上共享、安全、分发、控制和货币化您的 API。您可以在内部、云端、托管服务或根据您的要求任意组合部署 3scale 组件。
在本例中,非服务影响方法用于备份和恢复 3scale on-cluster 存储,使用 OpenShift API 进行数据保护(OADP) Operator。另外,请确保在备份时在同一集群中恢复 3scale。如果要在不同的集群中恢复 3scale,请确保两个集群都使用相同的自定义域。
先决条件
- 已安装并配置了 Red Hat 3scale。如需更多信息,请参阅 Red Hat 3scale API Management。
4.12.1.1. 创建数据保护应用程序
您可以为 3scale 创建数据保护应用程序(DPA)自定义资源(CR)。有关 DPA 的更多信息,请参阅"安装数据保护应用程序"。
流程
使用以下配置创建 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
后续步骤
- 备份 3scale Operator。
其他资源
4.12.1.2. 备份 3scale Operator
您可以备份 Operator 资源,以及 Secret 和 APIManager 自定义资源(CR)。如需更多信息,请参阅"创建备份 CR"。
先决条件
- 您创建了数据保护应用程序(DPA)。
流程
使用以下配置创建 YAML 文件,备份 Operator 资源,如
operatorgroup
、命名空间
和订阅
:backup.yaml
文件示例apiVersion: velero.io/v1 kind: Backup metadata: name: operator-install-backup namespace: openshift-adp spec: csiSnapshotTimeout: 10m0s defaultVolumesToFsBackup: false includedNamespaces: - threescale 1 includedResources: - operatorgroups - subscriptions - namespaces itemOperationTimeout: 1h0m0s snapshotMoveData: false ttl: 720h0m0s
- 1
- 安装 3scale Operator 的命名空间。
注意您还可以备份和恢复
ReplicationController
、Deployment
和Pod
对象,以确保所有手动设置环境都已备份和恢复。这不会影响恢复流。运行以下命令来创建备份 CR:
$ oc create -f backup.yaml
通过使用以下配置创建 YAML 文件来备份 Secret CR:
backup-secret.yaml
文件示例apiVersion: velero.io/v1 kind: Backup metadata: name: operator-resources-secrets 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
运行以下命令来创建 Secret CR:
$ oc create -f backup-secret.yaml
通过创建带有以下配置的 YAML 文件来备份 APIManager CR:
backup-apimanager.yaml 文件示例
apiVersion: velero.io/v1 kind: Backup metadata: name: operator-resources-apim 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
运行以下命令来创建 APIManager CR:
$ oc create -f backup-apimanager.yaml
后续步骤
-
备份
mysql
数据库。
其他资源
4.12.1.3. 备份 mysql 数据库
您可以通过创建并附加持久性卷声明(PVC)来备份 mysql
数据库,以便在指定路径中包含转储的数据。
先决条件
- 您已备份了 3scale 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
通过编辑系统数据库部署以使用
mysql
转储,将 PVC 附加到系统数据库 pod:$ oc edit deployment system-mysql -n threescale
volumeMounts: - 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-claim 1 ...
- 1
- 包含转储数据的 PVC。
使用以下配置创建 YAML 文件以备份
mysql
数据库:mysql.yaml
文件示例apiVersion: velero.io/v1 kind: Backup metadata: name: mysql-backup 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.sql 1 container: system-mysql onError: Fail timeout: 5m includedNamespaces: 2 - threescale includedResources: - 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
验证
运行以下命令验证
mysql
备份是否已完成:$ oc get backups.velero.io mysql-backup
输出示例
NAME STATUS CREATED NAMESPACE POD VOLUME UPLOADER TYPE STORAGE LOCATION AGE mysql-backup-4g7qn Completed 30s threescale system-mysql-2-9pr44 example-claim kopia ts-dpa-1 30s mysql-backup-smh85 Completed 23s threescale system-mysql-2-9pr44 mysql-storage kopia ts-dpa-1 30s
后续步骤
- 备份后端 Redis 数据库。
4.12.1.4. 备份后端 Redis 数据库
您可以通过添加所需的注解并使用 includedResources
参数列出哪些资源来备份 Redis 数据库。
先决条件
- 备份 3scale Operator。
- 您备份了 mysql 数据库。
- 在执行备份前,Red Hat Redis 队列已排空。
流程
运行以下命令,编辑
backend-redis
部署上的注解:$ oc edit deployment backend-redis -n threescale
添加以下注解:
annotations: 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-backup 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
运行以下命令备份 Redis 数据库:
$ oc get backups.velero.io redis-backup -o yaml
验证
运行以下命令验证 Redis 备份是否已完成:
$ oc get backups.velero.io
后续步骤
- 恢复 Secret 和 APIManager CR。
4.12.1.5. 恢复 secret 和 APIManager
您可以按照以下流程恢复 Secret 和 APIManager。
先决条件
- 备份 3scale Operator。
-
您备份了
mysql
和 Redis 数据库。 您可以在备份的同一集群中恢复数据库。
如果位于不同的集群中,请在目标集群上启用了
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-backup 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
运行以下命令来恢复 3scale Operator:
$ oc create -f restore.yaml
运行以下命令手动创建
s3-credentials
Secret 对象:$ 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
使用以下配置创建 YAML 文件以恢复 Secret:
restore-secret.yaml
文件示例apiVersion: velero.io/v1 kind: Restore metadata: name: operator-resources-secrets namespace: openshift-adp spec: backupName: operator-resources-secrets 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
运行以下命令来恢复 Secret:
$ oc create -f restore-secrets.yaml
使用以下配置创建 YAML 文件以恢复 APIManager:
restore-apimanager.yaml
文件示例apiVersion: velero.io/v1 kind: Restore metadata: name: operator-resources-apim namespace: openshift-adp spec: backupName: operator-resources-apim excludedResources: 1 - 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
- 您不想恢复的资源。
运行以下命令来恢复 APIManager:
$ oc create -f restore-apimanager.yaml
运行以下命令来扩展 3scale Operator:
$ oc scale deployment threescale-operator-controller-manager-v2 --replicas=1 -n threescale
后续步骤
-
恢复
mysql
数据库。
4.12.1.6. 恢复 mysql 数据库
恢复 mysql
数据库重新创建以下资源:
-
Pod
、ReplicationController
和Deployment
对象。 - 其他持久性卷(PV)和关联的持久性卷声明(PVC)。
-
mysql
转储,example-claim
PVC 包含它。
不要删除与数据库关联的默认 PV 和 PVC。如果这样做,您的备份会被删除。
先决条件
- 已恢复 Secret 和 APIManager 自定义资源(CR)。
流程
运行以下命令缩减 3scale 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-mysql
Deployment
对象:$ 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-backup 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.sql 1 container: system-mysql execTimeout: 80s onError: Fail waitTimeout: 5m itemOperationTimeout: 1h0m0s restorePVs: true
- 1
- 从中恢复数据的路径。
运行以下命令来恢复
mysql
数据库:$ oc create -f restore-mysql.yaml
验证
运行以下命令验证
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
后续步骤
- 恢复后端 Redis 数据库。
4.12.1.7. 恢复后端 Redis 数据库
您可以通过删除部署并指定您不想恢复的资源来恢复后端 Redis 数据库。
先决条件
- 已恢复 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-backup 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
运行以下命令来恢复 Redis 数据库:
$ oc create -f restore-backend.yaml
验证
运行以下命令验证
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
后续步骤
- 扩展 3scale Operator 和部署。
4.12.1.8. 扩展 3scale Operator 和部署
您可以扩展 3scale Operator 以及手动缩减的任何部署。几分钟后,3scale 安装应完全正常工作,其状态应与备份的状态匹配。
先决条件
-
确保没有扩展部署,或者没有额外的 pod 运行。一些
system-mysql
或backend-redis
pod 在恢复后从部署分离,可以在恢复成功后删除。
流程
运行以下命令来扩展 3scale Operator:
$ oc scale deployment threescale-operator-controller-manager-v2 --replicas=1 -n threescale
运行以下命令,确保部署了 3scale Operator:
$ oc get deployment -n threescale
执行以下脚本来扩展部署:
$ ./scaledeployment.sh
运行以下命令,获取
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 Operator。您可以在尝试创建备份前验证现有数据是否可用。