My goal here was to make a super easy way to deploy Kasten K10 and be able to demonstrate the value of K10 in a simple and easy way without having to deploy public cloud managed Kubernetes environments, or having to rely on virtual environments. Most people have access to your own laptop or desktop machine be it Windows, MacOS or Linux.
I wanted to make something that would be easy to spin up and down but give us the capability of showing the benefits that K10 brings to your Kubernetes Data Management in the real world. But then I got thinking a lot of developers use local Kubernetes environments on their own systems.
These local Kubernetes clusters have an equally overwhelming list of options when it comes to choosing and I have been playing mostly with K3D locally but also KinD (Kubernetes in Docker) and more recently MiniKube.
The overall goal as I mentioned was to create an easy way for anybody and everybody to roll out a Kubernetes cluster locally and have the Kasten K10 functionality to hand, be it a proof of concept, learning or using the Kasten K10 free edition to protect local development environment.
Minikube – local Kubernetes cluster on macOS, Linux, and Windows.
“minikube quickly sets up a local Kubernetes cluster on macOS, Linux, and Windows. We proudly focus on helping application developers and new Kubernetes users.”
I chose minikube for this simply because I found that the Addons available make things so easy, yes, we have helm charts for the addons or at least for the most part but minikube having them built in makes life easy. To begin with regardless of your workstation OS, you can run minikube. First, head over to the project page here. The first option you have is choosing your installation method. I did not use this method, but you might choose to vs my way.
mentioned below it states that you need to have a “Container or virtual machine manager, such as: Docker, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware” this is where MiniKube will run and the easy option and unless stated in the repository I am using Docker. You can install Docker on your system using the following link.
My way of installing minikube and other prereqs…
I have been using arkade for some time now to get all those Kubernetes tools and CLIs, you can see the installation steps on this github repository for getting started with Arkade. I have also mentioned this in other blog posts where I needed something installing. The simplicity of just hitting arkade get and then seeing if your tool or cli is available is handy.
As part of the long list of available apps within arkade minikube is one of them so with a simple “arkade get minikube” command we are now downloading the binary and we are good to go.
We will also need kubectl as part of our tooling so you can also get this via arkade or I believe that the minikube documentation brings this down as part of the curl commands mentioned above.
Getting a Kubernetes cluster up and running
For this particular section I want to cover the options available to us when it comes to getting a Kubernetes cluster up and running on your local machine. We could simply run the following command and it would spin up a cluster for you to use.
So the above is great but we want to be able to do more with our cluster particularly as we want to run some data services in our environment so we need to take advantage of some of the minikube addons that are available.
If you run the following command you can see some of these addons,
For our project we are using volumesnapshots and csi-hostpath-driver.
I am also defining in our project some additional configuration, apiserver is set to 6433 instead of a random API port, I define the container runtime also to containerd however docker is default and CRI-O is also available. I am also setting the Kubernetes version so that I know my Kasten K10 deployment is at a supported version.
This will give us our Kubernetes cluster.
Deploy Kasten K10
There are two options when it comes to deploying Kasten K10 into our new cluster, we can use the helm chart and walk through the deployment this way or we can also use arkade which I have mentioned a little above.
Deploy a Data Service (MySQL)
In order to start testing Kasten K10 we need a data service, we have chosen MySQL as the first option but in the future, I can see options for many more being added as different people have different data services so might want to protect them, maybe we also include a wordpress deployment which has a database backend that might need to be protected. My goal is to add additional data services here to show the power of protection.
I am not going to go through a complete K10 overview here but just know that from here we can protect our application using the deployed CSI-Hostpath and volumesnapshot, now we know a snapshot is not going to protect you from anything locally but it gives you the look and feel and a very fast recovery
Dean Lewis has also contributed the addition of deploying MinIO into the deployment of minikube so that we have an export option as well, now again this would also land on the same infrastructure as our Kubernetes cluster which would not protect us against local failure but this is a demo environment and a learning journey.
If you are looking at using this as a local development environment and would like to protect the data then you could also add in external object storage options if you wish to protect some data here. This could be AWS S3, S3-Compatible, Microsoft Azure Blob Storage, Google Cloud Storage.