
Percona Kubernetes Operators allow users to simplify deployment and management of MongoDB and MySQL databases on Kubernetes. Both operators allow users to store backups on S3-compatible storage and leverage Percona XtraBackup and Percona Backup for MongoDB to deliver backup and restore functionality. Both backup tools do not work with Azure Blob Storage, which is not compatible with the S3 protocol.
This blog post explains how to run Percona Kubernetes Operators along with MinIO Gateway on Azure Kubernetes Service (AKS) and store backups on Azure Blob Storage:
Setup
Prerequisites:
- Azure account
- Azure Blob Storage account and container (the Bucket in AWS terms)
- Cluster deployed with Azure Kubernetes Service (AKS)
Deploy MinIO Gateway
I have prepared the manifest to deploy the MinIO gateway to Kubernetes, you can find them in the Github repo here.
First, create a separate namespace:
kubectl create namespace minio-gw
Create the secret which contains credentials for Azure Blob Storage:
$ cat minio-secret.yaml apiVersion: v1 kind: Secret metadata: name: minio-secret stringData: AZURE_ACCOUNT_NAME: Azure_account_name AZURE_ACCOUNT_KEY: Azure_account_key $ kubectl -n minio-gw apply -f minio-secret.yaml
Apply minio-gateway.yaml
from the repository. This manifest does two things:
- Creates MinIO Pod backed by Deployment object
- Exposes this Pod on port 9000 as a ClusterIP through a Service object
$ kubectl -n minio-gw apply -f blog-data/operators-azure-blob/minio-gateway.yaml
It is also possible to use Helm Charts and deploy the Gateway with MinIO Operator. You can read more about it here. Running a MinIO Operator might be a good choice, but it is an overkill for this blog post.
Deploy PXC
Get the code from Github:
git clone -b v1.7.0 https://github.com/percona/percona-xtradb-cluster-operator
Deploy the bundle with Custom Resource Definitions:
cd percona-xtradb-cluster-operator kubectl apply -f deploy/bundle.yaml
Create the Secret object for backup. You should use the same Azure Account Name and Key that you used to setup MinIO:
$ cat deploy/backup-s3.yam apiVersion: v1 kind: Secret metadata: name: azure-backup type: Opaque data: AWS_ACCESS_KEY_ID: BASE64_ENCODED_AZURE_ACCOUNT_NAME AWS_SECRET_ACCESS_KEY: BASE64_ENCODED_AZURE_ACCOUNT_KEY
Add storage configuration into cr.yaml
under spec.backup.storages
.
storages: azure-minio: type: s3 s3: bucket: test-azure-container credentialsSecret: azure-backup endpointUrl: http://minio-gateway-svc.minio-gw:9000
bucket
is the container created on Azure Blob Storage.endpointUrl
must point to the MinIO Gateway service that was created in the previous section.
Deploy the database cluster:
$ kubectl apply -f deploy/cr.yaml
Read more about the installation of the Percona XtraDB Cluster Operator in our documentation.
Take Backups and Restore
To take the backup or restore, follow the regular approach by creating corresponding pxc-backup
or pxc-restore
Custom Resources in Kubernetes. For example, to take the backup I use the following manifest:
$ cat deploy/backup/backup.yaml apiVersion: pxc.percona.com/v1 kind: PerconaXtraDBClusterBackup metadata: name: backup1 spec: pxcCluster: cluster1 storageName: azure-minio
This creates the Custom Resource object pxc-backup
and the Operator uploads the backup to the Container in my Storage account:
Read more about backup and restore functionality in the Percona Kubernetes Operator for Percona XtraDB Cluster documentation.
Conclusion
Even though Azure Blob Storage is not S3-compatible, Cloud Native landscape provides production-ready tools for seamless integration. MinIO Gateway will work for both Percona Kubernetes Operators for MySQL and MongoDB, enabling S3-like backup and restore functionality.
The Percona team is committed to delivering smooth integration for its software products for all major clouds. Adding support for Azure Blob Storage is on the roadmap of Percona XtraBackup and Percona Backup for MongoDB, so as the certification on Azure Kubernetes Service for both operators.