mariadb-operator

command module
v0.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 14, 2023 License: MIT Imports: 1 Imported by: 0

README

🦭 mariadb-operator

CI Helm Release Go Report Card Go Reference Artifact Hub

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

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!

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
api
v1alpha1
Package v1alpha1 contains API Schema definitions for the database v1alpha1 API group +kubebuilder:object:generate=true +groupName=database.mmontes.io
Package v1alpha1 contains API Schema definitions for the database v1alpha1 API group +kubebuilder:object:generate=true +groupName=database.mmontes.io
cmd
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL