4.12. OADP および 3scale
4.12.1. OADP を使用した 3scale のバックアップと復元
Red Hat 3scale API Management (APIM)を使用すると、内部ユーザーまたは外部ユーザーの API を管理することができます。パフォーマンス、顧客制御、および将来の拡張を考慮して構築されたインフラストラクチャープラットフォームで API を共有、保護、配布、および収益化します。3scale コンポーネントは、オンプレミス、クラウド、管理サービス、または要件に基づいて、任意の組み合わせにデプロイできます。
この例では、OpenShift API for Data Protection (OADP) Operator を使用して、サービスに影響を与えないアプローチを使用して、クラスター上のストレージをバックアップおよび復元します。さらに、バックアップ元と同じクラスターで 3scale を復元するようにしてください。3scale を別のクラスターに復元する場合は、両方のクラスターが同じカスタムドメインを使用していることを確認してください。
前提条件
- Red Hat 3scale をインストールして設定している。詳細は、Red Hat 3scale API Management を参照してください。
4.12.1.1. Data Protection Application の作成
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 の作成を参照してください。
前提条件
- Data Protection Application (DPA)を作成した。
手順
次の設定で YAML ファイルを作成
し
て、
Operator グループ、namespace、サブスクリプション
などの 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。
注記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
以下のコマンドを実行してシークレット 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 のバックアップを作成している。
手順
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
ダンプを使用するように 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 データベースのバックアップ
必要なアノテーションを追加するか、include Resources パラメーターを使用して
バックアップするリソースを一覧表示することで、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"]
次の設定で 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
次のステップ
- Secrets および APIManager CR を復元します。
4.12.1.5. シークレットおよび APIManager の復元
次の手順を使用して、シークレットおよび APIManager を復元できます。
前提条件
- 3scale Operator のバックアップを作成している。
-
mysql
データベースと Redis データベースをバックアップしている。 バックアップ先の同じクラスターでデータベースを復元します。
別のクラスターにある場合は、ソースクラスターと同様に宛先クラスターで
nodeAgent
を有効にして OADP をインストールし、設定します。
手順
以下のコマンドを実行して、3scale namespace と共に 3scale Operator カスタムリソース定義(CRD)を削除します。
$ 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 ファイルを作成し、シークレットを復元します。
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
次の設定で 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)
-
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
次の 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 にログインします。バックアップを作成する前に、既存のデータが利用可能であることを確認できます。