🦭 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
in your cluster.
helm repo add mariadb-operator https://mmontes11.github.io/mariadb-operator
helm install mariadb-operator mariadb-operator/mariadb-operator
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
Openshift
The Openshift installation is managed separately in the mariadb-operator-helm repository, which contains a helm based operator that allows you to install mariadb-operator
via OLM.
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
instance:
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
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
At this point, we can run our database initialization scripts:
kubectl apply -f config/samples/sqljobs
kubectl get sqljobs
NAME COMPLETE STATUS MARIADB AGE
01-create-table-users True Success mariadb 5m34s
02-1-insert-users True Success mariadb 5m34s
02-2-create-table-repos True Success mariadb 5m34s
03-insert-repos True Success mariadb 5m34s
kubectl get jobs
NAME COMPLETIONS DURATION AGE
01-create-table-users 1/1 5s 5m51s
02-1-insert-users 1/1 5s 5m45s
02-2-create-table-repos 1/1 5s 5m45s
03-insert-repos 1/1 6s 5m39s
Now that the database has been initialized, 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.
Advanced examples
More advance scenarios can be found under the examples folder:
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!