🦭 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:
- Metrics: Leverage prometheus operator to scrape metrics from both the
mariadb-operator and the provisioned MariaDB instances.
- Webhook certificate renewal: Automatic webhook certificate issuance and renewal using cert-manager. By default, a static self-signed certificate is generated.
helm repo add mariadb-operator https://mmontes11.github.io/mariadb-operator
helm install mariadb-operator mariadb-operator/mariadb-operator \
--set metrics.enabled=true --set webhook.certificate.certManager=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/mariadb_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/mariadb_v1alpha1_database.yaml
kubectl apply -f config/samples/mariadb_v1alpha1_user.yaml
kubectl apply -f config/samples/mariadb_v1alpha1_grant.yaml
kubectl get databases
NAME READY STATUS CHARSET COLLATE AGE
data-test True Created utf8 utf8_general_ci 22s
kubectl get users
NAME READY STATUS MAXCONNS AGE
mariadb-metrics True Created 3 19m
user True Created 20 29s
kubectl get grants
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/mariadb_v1alpha1_backup_scheduled.yaml
After one minute, the backup should have completed:
kubectl get backups
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/mariadb_v1alpha1_mariadb_from_backup.yaml
kubectl get mariadbs
NAME READY STATUS AGE
mariadb True Running 39m
mariadb-from-backup True Running 85s
kubectl get restores
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!