Operators are a software framework that extends Kubernetes API and enables application deployment and management through the control plane. For such complex technologies as databases, Operators play a crucial role by automating deployment and day-to-day operations. At Percona we have the following production-ready and enterprise-grade Kubernetes Operators for databases:
Today we are glad to announce an alpha version of our new Percona Operator for MySQL. In this blog post, we are going to answer some frequently asked questions.
As mentioned above, our existing operator for MySQL is based on the Percona XtraDB Cluster (PXC). It is feature-rich and provides virtually-synchronous replication by utilizing Galera Write-Sets. Sync replication ensures data consistency and proved itself useful for critical applications, especially on Kubernetes.
But there are two things that we want to address:
We heard you! That is why our new Operator is going to run Percona Server for MySQL (PS) and provide both regular asynchronous (with semi-sync support) and virtually-synchronous replication based on GR.
We will have two Operators for MySQL and follow the same naming as we have for Distributions:
Not in the short run. We want to provide our users MySQL clusters on Kubernetes with three replication capabilities:
We are going to provide instructions and tools for migrations through replication or backup and restore. As the underlying implementation is totally different there is no direct, automated path to switch available.
Yes, but please remember that it is an alpha version and we do not recommend it for production workloads.
Our Operator is licensed under Apache 2.0 and can be found in the percona-server-mysql-operator repository on GitHub.
To learn more about our operator please see the documentation.
Run these two commands to spin up a MySQL cluster with 3 nodes with asynchronous replication:
|
1 2 |
$ kubectl apply -f https://raw.githubusercontent.com/percona/percona-server-mysql-operator/main/deploy/bundle.yaml $ kubectl apply -f https://raw.githubusercontent.com/percona/percona-server-mysql-operator/main/deploy/cr.yaml |
In a couple of minutes, the cluster is going to be up and running. Verify:
|
1 2 3 4 5 6 7 8 9 10 11 |
$ kubectl get ps NAME MYSQL ORCHESTRATOR AGE cluster1 ready ready 6m16s $ kubectl get pods NAME READY STATUS RESTARTS AGE cluster1-mysql-0 1/1 Running 0 6m27s cluster1-mysql-1 1/1 Running 1 5m11s cluster1-mysql-2 1/1 Running 1 3m36s cluster1-orc-0 2/2 Running 0 6m27s percona-server-for-mysql-operator-c8f8dbccb-q7lbr 1/1 Running 0 9m31s |
First, you need to get the root user password, which was automatically generated by the Operator. By default system users’ passwords are stored in cluster1-secrets Secret resource:
|
1 |
$ kubectl get secrets cluster1-secrets -o yaml | grep root | awk '{print $2}' | base64 --decode |
Start another container with a MySQL client in it:
|
1 |
$ kubectl run -i --rm --tty percona-client --image=percona:8.0 --restart=Never -- bash -il |
Connect to a primary node of our MySQL cluster from this container:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ mysql -h cluster1-mysql-primary -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 138 Server version: 8.0.25-15 Percona Server (GPL), Release 15, Revision a558ec2 Copyright (c) 2009-2021 Percona LLC and/or its affiliates Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> |
Consult the documentation to learn more about other operational capabilities and options.
The following functionality is available in the Operator:
Our goal is to release the GA version late in Q2 2022. We plan to include the following:
Percona Operator for MySQL based on Percona XtraDB Cluster just hatched and your feedback is highly appreciated.
Open a bug or create a Pull Request for a chance to get awesome Percona Swag!