5.1. Configuring Backups

The backup functionality in Tungsten Operator is managed through two main resources: TungstenBackup and BackupConfiguration.

Two sample YAML files are provided that allow you to configure and schedule backups, these are tungsten_v1alpha1_backupconfiguration.yaml and tungsten_v1alpha1_mysqlcluster_with_backup.yaml.

TungstenBackup is a custom resource that represents a single backup operation. It includes details such as the source cluster, plus the status and size of the backup. Once a TungstenBackup resource is created, the backup process is initiated.

BackupConfiguration is another custom resource that defines the configuration for backups. It includes details such as backup policies and storage destination and backend configuration.

5.1.1. Configuring backup backends

To build the BackupConfiguration, the example YAML file tungsten_v1alpha1_backupconfiguration.yaml can be used.

BackupConfiguration contains an array of backendConfigurations. Multiple backends can be configured, but only one will be active for new backups at any given moment. This allows the user to switch backends, while supporting restoration and rotation of TungstenBackup that were created on a previous backend.

Currently the only supported backend uploader type is rclone. rclone itself supports all major object storage destinations.

The sample YAML file, shows an example on how to configure an rclone backend using environment variables:

apiVersion: tungsten.continuent.com/v1alpha1
kind: BackupConfiguration
metadata:
  labels:
    app.kubernetes.io/name: backupconfiguration
    app.kubernetes.io/instance: backupconfiguration-sample
    app.kubernetes.io/part-of: tungsten-operator
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/created-by: tungsten-operator
  name: backupconfiguration-sample
spec:
  backend: sample-rclone-backend
  backendConfigurations:
  - name: sample-rclone-backend
    type: rclone
    rclone:
      type: mysqldump
      destination:
        bucket: "backups"
        directory: "test"
      flags:
        purgeRemoteBackupOnDeletion: true
        overwriteExistingPhysicalResource: false
      env:
        - name: RCLONE_CONFIG_REMOTE_TYPE
          value: s3
        - name: RCLONE_CONFIG_REMOTE_ENDPOINT
          value: "http://minio.default.svc.cluster.local"
        - name: RCLONE_CONFIG_REMOTE_ACCESS_KEY_ID
          valueFrom:
            secretKeyRef:
              name: backups-user-1
              key: CONSOLE_ACCESS_KEY
        - name: RCLONE_CONFIG_REMOTE_SECRET_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              name: backups-user-1
              key: CONSOLE_SECRET_KEY

The type defines the method of backup, Currently this can be set to either mysqldump or xtrabackup.

The destination block determines which backend from backendConfigurations will be used for all new backups.

The flags field includes several options that effect behaviour of backups:

  • purgeRemoteBackupOnDeletion: This boolean field determines whether the remote physical backup file should be deleted when the TungstenBackup resource is deleted. If set to true, the remote backup will be deleted upon deletion of the TungstenBackup resource. As alternative life cycle rules of the object storage backend can be used to ensure desired backup retention and rotation, and the Tungsten Operator can be configured to only upload backup artifacts.

  • overwriteExistingPhysicalResource: This boolean field determines whether an existing physical resource should be overwritten during the backup process. If set to true, the backup process will overwrite any existing physical resource with the same name. This should be usually set to false.

When making major changes to the backend, such as changing the type or endpoint, it might be better to introduce a new backend instead, if you are not planning to copy old data between storage destinations. This way new instances of TungstenBackups can use the latest backend, while old backups still stay on the old backend.

Using the example above, you would then apply this to the cluster as follows:

shell> kubectl apply -f tungsten_v1alpha1_backupconfiguration.yaml