MOCO is a MySQL operator on Kubernetes. Its primary function is to manage MySQL clusters using GTID-based semi-synchronous replication. It does not manage group replication clusters.
MOCO is designed to have the following properties.
Blog article: Introducing MOCO, a modern MySQL operator on Kubernetes
MOCO supports (tests) the LTS releases of MySQL 8. Innovation releases would probably work. But they are not tested in our CI.
kubectl
pluginmysqld
metricsmy.cnf
configurationsYou can quickly run MOCO using kind.
e2e
directory.make start
You can then create a three-instance MySQL cluster as follows:
$ cat > mycluster.yaml <<'EOF'
apiVersion: moco.cybozu.com/v1beta2
kind: MySQLCluster
metadata:
namespace: default
name: test
spec:
replicas: 3
podTemplate:
spec:
containers:
- name: mysqld
image: ghcr.io/cybozu-go/moco/mysql:8.4.0
volumeClaimTemplates:
- metadata:
name: mysql-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
EOF
$ export KUBECONFIG=$(pwd)/.kubeconfig
$ ../bin/kubectl apply -f mycluster.yaml
Check the status of MySQLCluster until it becomes healthy as follows:
$ ../bin/kubectl get mysqlcluster test
NAME AVAILABLE HEALTHY PRIMARY SYNCED REPLICAS ERRANT REPLICAS
test True True 0 3
Once it becomes healthy, you can use kubectl-moco
to play with mysql
client.
$ ../bin/kubectl moco mysql -it test
To destroy the Kubernetes cluster, run:
$ make stop
See https://cybozu-go.github.io/moco/
examples
directory contains example MySQLCluster manifests.
Docker images are available on ghcr.io/cybozu-go/moco.