Like your virtual machine running another virtual machine [nested virtualization] or Docker-in-Docker [dind], today thanks to Loft Labs, you are now able to run multiple virtual Kubernetes clusters in a Kubernetes cluster. The vcluster project is focused on creating fully functional virtual Kubernetes clusters inside a base cluster allowing for a different approach to multitenancy than spinning up a separate Kubernetes cluster.
A core use case of Shipa is the ability to have abstractions that make deploying to multiple clusters easy for developers. In this example, we will spin up a pair of virtual clusters and wire them to Shipa [and as a bonus, the base physical cluster].
Getting Started With vcluster
The vcluster project has an excellent quickstart to get you on your way. In this example, I have spun up an Amazon EKS Cluster with eksctl.
Validate that there is connectivity.
kubectl get nodes
Next grab the vcluster CLI and validate it’s install.
curl -s -L "https://github.com/loft-sh/vcluster/releases/latest" | sed -nE 's!.*"([^"]*vcluster-darwin-amd64)".*!https://github.com1!p' | xargs -n 1 curl -L -o vcluster && chmod +x vcluster; sudo mv vcluster /usr/local/bin; vcluster --version
Once validated, now it is time to create two virtual clusters which we will expose via a Kubernetes LoadBalancer.
Virtual cluster one:
vcluster create vcluster-1 -n first-virtual-cluster --expose
Now connect to your virtual cluster.
vcluster connect vcluster-1 -n first-virtual-cluster export KUBECONFIG=./kubeconfig.yaml
Now you are ready to run commands in your virtual cluster.
kubectl get pods -A
Now you are ready to bind your virtual cluster to Shipa.
Connecting Your Virtual Cluster to Shipa Cloud
If you have not signed up for Shipa Cloud for free yet, make sure to do that before proceeding. Once signed up, binding a cluster to Shipa is now easier than ever. Shipa does work on a concept of Frameworks which are logical groupings of abstractions and policies. So to connect your virtual cluster, create a Shipa Framework first.
Shipa Cloud -> Frameworks +Create Framework
Select: Deploy applications with reasonable defaults
Click Next to fill in some details.
Name: myfirstvirtualframework
Plan: shipa-plan
Team: shipa-team
Click Create and you are ready to start to bind the virtual cluster.
Shipa Cloud -> Clusters + Connect Cluster
Grab the newly generated Kubernetes API Endpoint and paste into the text box.
kubectl cluster-info | grep 'Kubernetes' | awk '/http/ {print $NF}'
Then click Generate Command.
Back in the terminal which has the context for the virtual cluster, paste in the Shipa Magic Link to bind your virtual cluster.
Execute the kubectl command.
In a few moments, your virtual cluster will be available to Shipa.
With your virtual cluster connected, you can now deploy to your virtual cluster.
Deploying To Your Virtual Cluster
Deploying an application is really straightforward with Shipa.
Shipa Cloud -> Applications + Create Application
Name: virtualappone
Framework: myfirstvirtualframework
Team: shipa-team
Scroll down and wire in a sample application / your application image. If you would like to leverage the sample image, click “Test With Sample Image”.
Image URL: docker.io/shipasoftware/hello-shipa:latest
Then hit Deploy.
Clicking back into the “virtualappone”, you now have a publicly accessible endpoint to check out. Click on the link and you now have access to your workload.
Clicking on the URL will bring you to your workload!
Now you are ready to create your second virtual cluster.
The Second Virtual Cluster
Creating a second virtual cluster is simple with vcluster. All you need to do is to head back to a terminal with the base context of the Kubernetes cluster [e.g one that is not the virtual cluster in this example] and execute the CLI command again.
vcluster create vcluster-2 -n second-virtual-cluster --expose vcluster connect vcluster-2 -n second-virtual-cluster export KUBECONFIG=./kubeconfig.yaml
Then validate that this is fresh.
kubectl get namespaces
Now you can re-run the same steps to create a Shipa Framework and bind the cluster.
Once executed, you should be set to be able to deploy to your second virtual cluster.
Connecting to the root of your Kubernetes cluster e.g the base EKS cluster, you can see the virtual cluster and Shipa workloads running together.
kubectl get pods -A
Certainly a lot of the art of the possible with both solutions together.
Virtual Clusters and Shipa – Better Together
Virtual Kubernetes Clusters with the vcluster project are certainly taking a different approach with Kubernetes multi-tenancy. Though as the number of percieved/avaiable clusters increases, there is an increase in the burden for developers to get the destination correctly. Shipa not only allows for faster velocity for on-boarding and off-boarding of workloads, but also scales with you as the number of virtual clusters increases. This example could have been even more complex as we could have also deployed Shipa onto the physical cluster itself.
The finished product:
Make sure to take both for a spin, today!
Cheers,
-Ravi