Skip to main content

Backing up 3scale API Management by using OADP

Back up Red Hat 3scale API Management components, including the 3scale Operator, MySQL database, and Redis database, by using OpenShift API for Data Protection (OADP). This helps you protect your API management infrastructure and provides recovery in case of data loss.

For more information about installing and configuring Red Hat 3scale API Management, see Installing 3scale API Management on OpenShift and Red Hat 3scale API Management.

Creating the Data Protection Application​

Create a Data Protection Application (DPA) custom resource (CR) to configure backup storage and Velero settings for Red Hat 3scale API Management. This helps you set up the backup infrastructure required for protecting your 3scale components.

Procedure

  1. Create a YAML file with the following configuration:

    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>
    prefix: <prefix>
    config:
    region: <region>
    profile: "default"
    s3ForcePathStyle: "true"
    s3Url: <s3_url>
    credential:
    key: cloud
    name: cloud-credentials

    where:

    <bucket_name>
    Specifies a bucket as the backup storage location. If the bucket is not a dedicated bucket for Velero backups, you must specify a prefix.
    <prefix>
    Specifies a prefix for Velero backups, for example, velero, if the bucket is used for multiple purposes.
    <region>
    Specifies a region for backup storage location.
    <s3_url>
    Specifies the URL of the object store that you are using to store backups.
  2. Create the DPA CR by running the following command:

    $ oc create -f dpa.yaml

Backing up the 3scale API Management operator, secret, and APIManager​

Back up the Red Hat 3scale API Management operator resources, including the Secret and APIManager custom resources (CRs), by creating backup CRs. This helps you preserve your 3scale operator configuration for recovery scenarios.

Prerequisites

  • You created the Data Protection Application (DPA).

Procedure

  1. Back up your 3scale operator CRs, such as operatorgroup, namespaces, and subscriptions, by creating a YAML file with the following configuration:

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
    name: operator-install-backup
    namespace: openshift-adp
    spec:
    csiSnapshotTimeout: 10m0s
    defaultVolumesToFsBackup: false
    includedNamespaces:
    - threescale
    includedResources:
    - operatorgroups
    - subscriptions
    - namespaces
    itemOperationTimeout: 1h0m0s
    snapshotMoveData: false
    ttl: 720h0m0s

    where:

    operator-install-backup
    Specifies the value of the metadata.name parameter in the backup. This is the same value used in the metadata.backupName parameter used when restoring the 3scale operator.
    threescale
    Specifies the namespace where the 3scale operator is installed.
    note

    You can also back up and restore ReplicationControllers, Deployment, and Pod objects to ensure that all manually set environments are backed up and restored. This does not affect the flow of restoration.

  2. Create a backup CR by running the following command:

    $ oc create -f backup.yaml
    Example output
    backup.velero.io/operator-install-backup created
  3. Back up the Secret CR by creating a YAML file with the following configuration:

    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
    name
    Specifies the value of the metadata.name parameter in the backup. Use this value in the metadata.backupName parameter when restoring the Secret.
  4. Create the Secret backup CR by running the following command:

    $ oc create -f backup-secret.yaml
    Example output
    backup.velero.io/operator-resources-secrets created
  5. Back up the APIManager CR by creating a YAML file with the following configuration:

    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
    name
    Specifies the value of the metadata.name parameter in the backup. Use this value in the metadata.backupName parameter when restoring the APIManager.
  6. Create the APIManager CR by running the following command:

    $ oc create -f backup-apimanager.yaml
    Example output
    backup.velero.io/operator-resources-apim created

Backing up a MySQL database​

Back up a MySQL database by creating a persistent volume claim (PVC) to store the database dump. This helps you preserve your 3scale system database data for recovery scenarios.

Prerequisites

  • You have backed up the Red Hat 3scale API Management operator.

Procedure

  1. Create a YAML file with the following configuration for adding an additional PVC:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
    name: example-claim
    namespace: threescale
    spec:
    accessModes:
    - ReadWriteOnce
    resources:
    requests:
    storage: 1Gi
    storageClassName: gp3-csi
    volumeMode: Filesystem
  2. Create the additional PVC by running the following command:

    $ oc create -f ts_pvc.yml
  3. Attach the PVC to the system database pod by editing the system-mysql deployment to use the MySQL dump:

    $ 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
    ...
    claimName
    Specifies the PVC that contains the dumped data.
  4. Create a YAML file with following configuration to back up the MySQL database:

    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
    container: system-mysql
    onError: Fail
    timeout: 5m
    includedNamespaces:
    - threescale
    includedResources:
    - deployment
    - pods
    - replicationControllers
    - persistentvolumeclaims
    - persistentvolumes
    itemOperationTimeout: 1h0m0s
    labelSelector:
    matchLabels:
    app: 3scale-api-management
    threescale_component_element: mysql
    snapshotMoveData: false
    ttl: 720h0m0s

    where:

    mysql-backup
    Specifies the value of the metadata.name parameter in the backup. Use this value in the metadata.backupName parameter when restoring the MySQL database.
    /var/lib/mysqldump/data/dump.sql
    Specifies the directory where the data is backed up.
    includedResources
    Specifies the resources to back up.
  5. Back up the MySQL database by running the following command:

    $ oc create -f mysql.yaml
    Example output
    backup.velero.io/mysql-backup created

Verification

  • Verify that the MySQL backup is completed by running the following command:

    $ oc get backups.velero.io mysql-backup -o yaml
    Example output
    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

Backing up the back-end Redis database​

Back up the back-end Redis database by configuring Velero annotations and creating a backup CR with the required resources. This helps you preserve your 3scale back-end Redis data for recovery scenarios.

Prerequisites

  • You backed up the Red Hat 3scale API Management operator.
  • You backed up your MySQL database.
  • The Redis queues have been drained before performing the backup.

Procedure

  1. Edit the annotations on the backend-redis deployment by running the following command:

    $ 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"]
  2. Create a YAML file with the following configuration to back up the Redis database:

    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
    name
    Specifies the value of the metadata.name parameter in the backup. Use this value in the metadata.backupName parameter when restoring the Redis database.
  3. Back up the Redis database by running the following command:

    $ oc create -f redis-backup.yaml
    Example output
    backup.velero.io/redis-backup created

Verification

  • Verify that the Redis backup is completed by running the following command:

    $ oc get backups.velero.io redis-backup -o yaml
    Example output
    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

Additional resources