MySQL Operator is a bulletproof MySQL on Kubernetes. It manages all the necessary resources for a MySQL CLuster deployment.
The MySQL Operator provides efortless backups, while the cluster being highly-available.
MySQL Operator was developed by the awesome engineering team at Presslabs, a Managed WordPress Hosting provider.
For more open-source projects, check Presslabs Code.
The main goals of this operator are:
- Easily deploy mysql clusters in kubernetes (cluster-per-service model)
- Friendly devops (monitoring story solved)
- Out-of-the-box backups (automated and on demand) and point-in-time recovery
- Support for cloning in cluster and across clusters
To deploy this controller, use the provided helm chart, by running:
helm repo add presslabs https://presslabs.github.io/charts helm install presslabs/mysql-operator
This chart will deploy the controller and an orchestrator cluster.
Example of a cluster
Before creating a cluster, we need a secret that contains the
init mysql with (an example for this secret can be found
here). Now, to create a cluster we need
just a simple yaml file that defines it — let's call it
cluster.yaml and can be as follows:
apiVersion: mysql.presslabs.net/v1alpha1 kind: MysqlCluster metadata: name: foo spec: replicas: 2 secretName: the-secret
For a more in depth configuration, check examples. To deploy this cluster, run:
kubectl apply -f cluster.yaml
To list the deployed clusters use:
$ kubectl get mysql NAME AGE foo 1m
To check cluster state use:
$ kubectl describe mysql foo ... Status: Ready Nodes: 2 Conditions: Last Transition Time: 2018-03-28T10:20:23Z Message: Cluster is ready. Reason: statefulset ready Status: True Type: Ready ...
Example of a backup
Making a backup is easy — defining a cluster, you should define a backup; for a detailed example, check this example. Let's define a new one on:
apiVersion: mysql.presslabs.net/v1alpha1 kind: MysqlBackup metadata: name: foo-backup spec: clusterName: foo
To deploy the backup, run:
kubeclt apply -f backup.yaml
To lists all backups, run:
$ kubectl get backup NAME AGE foo-backup 1m
To check backup state and details, use:
$ kubectl describe backup foo-backup ... Status: Completed: true Conditions: Last Transition Time: 2018-03-21T16:02:56Z Message: Reason: Status: True Type: Complete Last Transition Time: 2018-03-21T16:02:48Z Message: First initialization of backup Reason: set defaults Status: Unknown Type: Failed ...
This project uses Percona Server for MySQL 5.7 because of backup improvements (eg. backup locks), monitoring improvements and some serviceability improvements (eg. utility user). The case against MariaDB is that WordPress requires MySQL, but MariaDB is not a drop-in replacement for it, since MariaDB 10 is a fork, rather than following MySQL.
This project is licensed under Apache 2.0 license. Read the LICENSE file in the top distribution directory, for the full license text.
Package v1alpha1 is the v1alpha1 version of the API.
|Package v1alpha1 is the v1alpha1 version of the API.|