5.12. OADP と 3scale
5.12.1. OADP を使用した 3scale のバックアップと復元
Red Hat 3scale API Management (APIM) を使用すると、内部ユーザーまたは外部ユーザーの API を管理できます。パフォーマンスの向上、顧客の管理、および将来的な成長に留意して構築されたインフラストラクチャープラットフォーム上で、API の共有、保護、配布、制御、および収益化を行います。3scale コンポーネントは、オンプレミス、クラウド、マネージドサービスとして、または要件に応じて任意の組み合わせでデプロイできます。
この例では、OpenShift API for Data Protection (OADP) Operator を使用して、サービスに影響を与えないアプローチで 3scale のクラスター上のストレージをバックアップおよび復元します。3scale をバックアップ元と同じクラスターで復元していることを確認してください。別のクラスターで 3scale を復元する場合は、両方のクラスターが同じカスタムドメインを使用していることを確認してください。
前提条件
- Red Hat 3Scale をインストールし、設定した。詳細は、Red Hat 3scale API Management を参照してください。
5.12.1.1. Data Protection Application の作成
3scale の Data Protection Application (DPA) カスタムリソース (CR) を作成できます。DPA の詳細は、「Data Protection Application のインストール」を参照してください。
手順
次の設定で 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 をバックアップします。
5.12.1.2. 3scale Operator のバックアップ
Operator リソース、および Secret と APIManager カスタムリソース (CR) をバックアップできます。詳細は、「バックアップ CR の作成」を参照してください。
前提条件
- Data Protection Application (DPA) を作成した。
手順
以下の設定で YAML ファイルを作成して、
operatorgroup
、namespaces
、subscriptions
などの Operator リソースをバックアップします。例:
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 がインストールされている namespace。
注記ReplicationControllers
、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
以下のコマンドを実行してシークレット 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
データベースをバックアップします。
関連情報
5.12.1.3. mysql データベースのバックアップ
永続ボリューム要求 (PVC) を作成してアタッチし、指定したパスにダンプされたデータを含めることで、mysql
データベースをバックアップできます。
前提条件
- 3scale Operator をバックアップした。
手順
さらに PVC を追加するには、次の設定で YAML ファイルを作成します。
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
ダンプを使用するようにシステムデータベースデプロイメントを編集し、システムデータベース Pod に PVC をアタッチしします。$ 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。
mysql
データベースをバックアップするには、次の設定で YAML ファイルを作成します。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 データベースをバックアップします。
5.12.1.4. バックエンドの Redis データベースのバックアップ
必要なアノテーションを追加し、includedResources
パラメーターを使用してバックアップするリソースをリストすることで、Redis データベースをバックアップできます。
前提条件
- 3scale Operator をバックアップした。
- mysql データベースをバックアップした。
- バックアップを実行する前に、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"]
Redis データベースをバックアップするには、次の設定の YAML ファイルを作成します。
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
次のステップ
- シークレットと APIManager CR を復元します。
5.12.1.5. シークレットと APIManager の復元
以下の手順に従って、Secrets と APIManager を復元できます。
前提条件
- 3scale Operator をバックアップした。
-
mysql
および Redis データベースをバックアップした。 バックアップされたのと同じクラスター上でデータベースを復元しようとしている。
別のクラスター上で行う場合は、ソースクラスターと同様に、
nodeAgent
を有効にして宛先クラスターに OADP をインストールし、設定します。
手順
次のコマンドを実行して、3scale Operator のカスタムリソース定義 (CRD) と
threescale
namespace を削除します。$ oc delete project threescale
出力例
"threescale" project deleted successfully
3scale Operator を復元するには、次の設定で YAML ファイルを作成します。
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
シークレットオブジェクトを手動で作成します。$ 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 ファイルを作成します。
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
次のコマンドを実行して、シークレットを復元します。
$ oc create -f restore-secrets.yaml
APIManager を復元するには、次の設定で YAML ファイルを作成します。
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
データベースを復元します。
5.12.1.6. mysql データベースの復元
mysql
データベースを復元すると、次のリソースが再作成されます。
-
Pod
、ReplicationController
、およびDeployment
オブジェクト。 - 追加の永続ボリューム (PV) と関連する永続ボリューム要求 (PVC)。
-
example-claim
PVC に含まれるmysql
ダンプ。
データベースに関連付けられているデフォルトの 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
mysql
データベースを復元するには、次の YAML ファイルを作成します。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 データベースを復元します。
5.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
Redis データベースを復元するには、次の設定で YAML ファイルを作成します。
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 とデプロイメントをスケーリングします。
5.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 UI にログインするための
3scale-admin
ルートを取得します。$ 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 に管理者としてログインします。バックアップを作成する前に、既存のデータが利用可能かどうかを確認できます。