In Continuation to our Tanzu Basic deployment series , this is the last part and by now we have our vSphere with Tanzu cluster enabled and deployed, now the next step would be to create Tanzu Kubernetes Clusters. In case if you missed previous posts , here they are:
Create a new namespace
vSphere Namespaces is kind of a resource pool or a container that i can give to a project, team or customer a “Kubernetes+VM environment” where they can create and manage their application containers and virtual machines. They can’t see the other’s environment and they can’t expand past their limits set by Administrators. The vSphere Namespace construct allows the vSphere admin to set several policies in one place. The user/team/customer/project can create new workloads to their desire within their vSphere Namespace. You also set resources limits to the namespace and permissions so that DevOps engineers can access it. Let’s create our first name space by going to vCenter Menu and Click on “Workload Management”
Once you are in “Workload Management” place , click on “CREATE NAMESPACE”
Select the vSphere Cluster on which you enabled “workload management”
- Give DNS compliant name of the namespace
- Select Network for the namespace
Now we have successfully created “namespace” named “tenant1-namespace”
Next step is to Add Storage. here we need to choose a vCenter Storage policy which TKG will use to provisition control plane VMs as well as this policy will show up as a Kubernetes Storage Class for this namespace.The persistent volume claims that correspond to persistent volumes can originate from the Tanzu Kubernetes cluster.
After you assign the storage policy, vSphere with Tanzu creates a matching Kubernetes storage class in the Namespace. For the VMware Tanzu Kubernetes Clusters, the storage class is automatically replicated from the namespace to the Kubernetes cluster. When you assign multiple storage policies to the namespace, a separate storage class is created for each storage policy.
Share the Kubernetes Control Plane URL with DevOps engineers as well as the user name they can use to log in to the namespace through the Kubernetes CLI Tools for vSphere. You can grant access to more than one namespace to a DevOps engineer.
Developer browse the URL and downloads TKG CLI plugin for their environment (Windows, Linux or MAC)
To provision Tanzu Kubernetes clusters by using the Tanzu Kubernetes Grid Service, we connect to the Supervisor Cluster by using the vSphere Plugin for kubectl which we downloaded from above step and authenticate with your vCenter Single Sign-On credentials, which was given by vSphere admin to developer.
After you log in to the Supervisor Cluster, the vSphere Plugin for kubectl generates the context for the cluster. In Kubernetes, a configuration context contains a cluster, a namespace, and a user. You can view the cluster context in the file .kube/config. This file is commonly called the kubeconfig file.
I am switching to “tenant1-namespace” context as i have access to multiple name spaces , similarly devops user can switch to context by following command.
Below commands to explore and help you to find out right VM type for Kubernetes Clusters sizing:
#kubectl get sc This command will list down all the storage classes #kubectl get virtualmachineimages This command will list down all the VM images available for creating TKG clusters, this will help you decide the Kubernetes version that you want to use #kubectl get virtualmachineclasses This command will list all the machine classes (T-Shirt sizes) available for TKG clusters
Deploy a TKG Cluster
To deploy a TKG cluster we need to create a YAML file with the required configuration parameters to define the cluster.
- Above YAML provisions a cluster with a three control plane nodes and three worker nodes.
kindparameter values are constants.
- The Kubernetes version, listed as v1.18, is resolved to the most recent distribution matching that minor version.
- The VM class
best-effort-<size>has no reservations. For more information, see Virtual Machine Class Types for Tanzu Kubernetes Clusters.
Once file is ready, lets provision the Tanzu Kubernetes cluster using the following kubectl command:
Monitor cluster provisioning using the vSphere Client , TKG management plane creating Kubernetes cluster automatically
Verify cluster provisioning using the following
you can continue to monitor/verify cluster provisioning using the #
kubectl describe tanzukubernetescluster command, at the last of the command output , it shows:
Node Status – It shows nodes status from Kubernetes prospective
VM Status – It shows nodes status from vCenter prospective
After around 15/20 minutes, you should see VM & Node Status as ready and it will also show the Phase as Running.This completes deployment of Kubernetes cluster on vSphere7 with Tanzu and we successfully deployed a Kubernetes cluster, now lets deploy a application and expose to external world.
Deploy an Application
To deploy your first application we need to login to new cluster that we created , you can use below command”
#kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME --tanzu-kubernetes-cluster-name CLUSTER-NAME --tanzu-kubernetes-cluster-namespace NAMESPACE
Once login completed, we can deploy application workloads to Tanzu Kubernetes clusters using pods, services, persistent volumes, and higher-level resources such as Deployments and Replica Sets. lets deploy an application using below comand:
#kubectl run --restart=Never --image=gcr.io/kuar-demo/kuard-amd64:blue kuard
Command now has successfully deployed application, lets expose so that we can access it using VMware HA proxy Load Balancer:
#kubectl expose pod kuard --type=LoadBalancer --name=kuard --port=8080
Application exposed successfully, lets get the public IP which has been assigned to application by the above command , so here is the external IP – 192.168.117.35
Let’s access the application using the IP assigned to application and see if we can easily access the application.
Get Visibility of Cluster using Octant
Octant is a tool for developers to understand how applications run on a Kubernetes cluster. It aims to be part of the developer’s toolkit for gaining insight and approaching complexity found in Kubernetes. Octant offers a combination of introspective tooling, cluster navigation, and object management along with a plugin system to further extend its capabilities.Installation is pretty simple and detailed Here
This completes the series with the installation of TKG Kubernetes cluster and run an application on top of it and accessing that application using HA proxy. !!Please share your feedback if any!!