Portworx is the cloud native storage company that enterprises depend on to reduce the cost and complexity of rapidly deploying containerized applications across multiple clouds and on-prem environments. With Portworx, you can manage any database or stateful service on any infrastructure using any container scheduler. You get a single data management layer for all of your stateful services, no matter where they run.
A popular Kubernetes storage and persistent storage for Docker solution, Portworx is a clustered block storage solution and provides a Cloud-Native layer from which containerized stateful applications programmatically consume block, file and object storage services directly through the scheduler.
In this tutorial, you will learn how to deploy MySQL to Kubernetes and use Portworx Volumes to provide HA capability:
- Use the Portworx Storage Class to create a PVC with 3 replicas of the data
- Use a simple YAML file to deploy MySQL using this storage class
- How to validate data persistence by deleting the MySQL pod
- How to dynamically expand storage volumes
- How to take snapshots and restore them
Step: Deploy MySQL and perform failover test
First we will deploy MySQL with replication factor of 3 and with io_profile=db. To learn more about io_profile settings please visit our docs page.
Then we're going run a benchmark using mysqlslap and simulate a server failure by deleting the pod running MySQL. When the pod come back up Portworx works with the Kubernetes scheduler to make sure it gets scheduled where the data is available.
Step: Dynamic expansion of volume size
In this step we will inspect and expand the volume used by MySQL and show that this operation requires no downtime.
Step: Take a snapshot of the databases
In this step we will create a snapshot of the database, drop all of our tables, and show how the snapshot can be used to create a new instance of MySQL with the recovered data.
Other things you should know
To learn more about how why running Mongo on Portworx is a great idea take a look at the following links:
- Kubernetes MySQL tutorial
- HA MySQL on GKE
- HA MySQL on EKS
- HA MySQL on AKS
- HA MySQL on OpenShift
- How to backup and restore MySQL on Red Hat OpenShift
- Introduction to Portworx
- Customer Stories
- STORK open source project.
This scenario assumes you have already covered the following scenarios:

Steps
HA MySQL on Kubernetes with Portworx
Wait for Kubernetes & Portworx to be ready
First we need to wait for Kubernetes and Portworx to be ready. Be patient, this is not a very high performance environment, just a place to learn something :-
Step: Wait for Kubernetes to be ready
Click the below section which waits for all Kubernetes nodes to be ready.
watch kubectl get nodes
When all 4 nodes show status Running then hit clear
to ctrl-c and clear the screen.
Step: Wait for Portworx to be ready
Watch the Portworx pods and wait for them to be ready on all the nodes. This can take a few minutes since it involves pulling multiple docker images. You will see 'No resources found' until all images are pulled.
watch kubectl get pods -n kube-system -l name=portworx -o wide
When all the pods show STATUS Running and READY 1/1 then hit clear
to ctrl-c and clear the screen.
You can take a look at the cluster status using the pxctl command line tool:
PX_POD=$(kubectl get pods -l name=portworx -n kube-system -o jsonpath='{.items[0].metadata.name}')
kubectl exec -it $PX_POD -n kube-system -- /opt/pwx/bin/pxctl status
Now that we have the Portworx cluster up, let's proceed to the next step !