🦭 mariadb-operator

Run and operate MariaDB in a cloud native way. Declaratively manage your MariaDB using Kubernetes CRDs rather than imperative commands.
Bare minimum installation
This installation flavour provides the minimum resources required to run mariadb operator. You can install it using the helm chart:
helm repo add mariadb-operator https://mmontes11.github.io/mariadb-operator
helm install mariadb-operator mariadb-operator/mariadb-operator
or alternatively just kubectl apply the manifests bundle:
MDB_VERSION=v0.0.5
kubectl apply -f https://github.com/mmontes11/mariadb-operator/releases/download/$MDB_VERSION/manifests.min.yaml
Recommended installation
The recommended installation includes the following features to provide a better user experiende and reliability:
- Validation WebHooks: To ensure resource inmutability and provide more accurate validations. To enable this feature, cert-manager should be installed in the cluster in order to reconcile
Certificate resources for the webhooks.
- Metrics: To provide observability in both the mariadb controller and the provisioned MariaDB instances. To enable this feature, prometheus operator should be present in the cluster to reconcile
ServiceMonitor resources.
helm repo add mariadb-operator https://mmontes11.github.io/mariadb-operator
helm install mariadb-operator mariadb-operator/mariadb-operator \
--set webhook.enabled=true --set metrics.enabled=true
MDB_VERSION=v0.0.5
kubectl apply -f https://github.com/mmontes11/mariadb-operator/releases/download/$MDB_VERSION/manifests.yaml
Quickstart
Let's see mariadb-operator🦭 in action! First of all, install the following configuration manifests that will be referenced by the CRDs further:
kubectl apply -f config/samples/config
To start with, let's provision a MariaDB server with Prometheus metrics:
kubectl apply -f config/samples/database_v1alpha1_mariadb.yaml
kubectl get mariadbs
NAME READY STATUS AGE
mariadb True Running 75s
kubectl get statefulsets
NAME READY AGE
mariadb 1/1 2m12s
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mariadb ClusterIP 10.96.235.145 <none> 3306/TCP,9104/TCP 2m17s
kubectl get servicemonitors
NAME AGE
mariadb 2m37s
Up and running 🚀, we can now create our first logical database and grant access to users:
kubectl apply -f config/samples/database_v1alpha1_databasemariadb.yaml
kubectl apply -f config/samples/database_v1alpha1_usermariadb.yaml
kubectl apply -f config/samples/database_v1alpha1_grantmariadb.yaml
kubectl get databasemariadbs
NAME READY STATUS CHARSET COLLATE AGE
data-test True Created utf8 utf8_general_ci 22s
kubectl get usermariadbs
NAME READY STATUS MAXCONNS AGE
mariadb-metrics True Created 3 19m
user True Created 20 29s
kubectl get grantmariadbs
NAME READY STATUS DATABASE TABLE USERNAME GRANTOPT AGE
mariadb-metrics True Created * * mariadb-metrics false 19m
user True Created * * user true 36s
Now that everything seems to be in place, let's take a backup:
kubectl apply -f config/samples/database_v1alpha1_backupmariadb_scheduled.yaml
After one minute, the backup should have completed:
kubectl get backupmariadbs
NAME COMPLETE STATUS MARIADB AGE
backup-scheduled True Success mariadb 15m
kubectl get cronjobs
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
backup-scheduled */1 * * * * False 0 56s 15m
kubectl get jobs
NAME COMPLETIONS DURATION AGE
backup-scheduled-27782894 1/1 4s 3m2s
Last but not least, let's provision a second MariaDB instance bootstrapping from the previous backup:
kubectl apply -f config/samples/database_v1alpha1_mariadb_from_backup.yaml
kubectl get mariadbs
NAME READY STATUS AGE
mariadb True Running 39m
mariadb-from-backup True Running 85s
kubectl get restoremariadbs
NAME COMPLETE STATUS MARIADB AGE
bootstrap-restore-mariadb-from-backup True Success mariadb-from-backup 72s
kubectl get jobs
NAME COMPLETIONS DURATION AGE
backup 1/1 9s 12m
bootstrap-restore-mariadb-from-backup 1/1 5s 84s
You can take a look at the whole suite of example CRDs available in config/samples.
Roadmap
Take a look at our 🛣️ roadmap and feel free to open an issue to suggest new features.
Contributing
If you want to report a 🐛 or you think something can be improved, please check our contributing guide and take a look at our open issues. PRs are welcome!