Building the home lab Kubernetes playground – Part 3
Tags: kubernetes, cloudnative, containerlearning, kasten
Published: 2021-03-01 08:53:08

---
title: Building the home lab Kubernetes playground – Part 3
published: true
date: 2021-02-27 10:56:27 UTC
tags: Kubernetes,CloudNative,containerlearning,kasten
canonical_url: https://vzilla.co.uk/vzilla-blog/building-the-home-lab-kubernetes-playground-part-3
---

In the last [post](https://dev.to/michaelcade1/building-the-home-lab-kubernetes-playground-part-2-470e-temp-slug-4359210 "Building the home lab Kubernetes playground – Part 2") we went through creating our home lab Kubernetes cluster and deploying the Kubernetes dashboard. In this post we are going to create a couple more stateless applications.

## What is BusyBox

Several stripped-down Unix tools in a single executable file.

Commonly referred to as the “Swiss army knife tool in Linux distributions”

I began by just testing this following a walkthrough tutorial but then later realised that this is a great tool for troubleshooting within your Kubernetes pod.

You can find out more information [here on Docker Hub.](https://hub.docker.com/_/busybox)

kubectl run myshell –rm -it –image busybox – sh

[Some things you didn’t know about kubectl](https://kubernetes.io/blog/2015/10/some-things-you-didnt-know-about-kubectl_28/) The above kubectl command is equivalent to docker run -i -t busybox sh.

When you have ran the above kubectl run command for busybox this gives you a shell that can be used for connectivity and debugging your Kubernetes deployments. Kubernetes lets you run interactive pods so you can easily spin up a busybox pod and explore your deployment with it.

![](https://vzilla.co.uk/wp-content/uploads/2021/02/022621_1354_Buildingthe1.png)

## NGINX deployment

Next, we wanted to look at NGNIX, NGINX seems to be the defacto in all the tutorials and blogs that I have come across when it comes to getting started with Kubernetes. Firstly it is open source software for web serving, reverse proxying, caching, load balancing, media streaming and their description [here](https://www.nginx.com/resources/glossary/nginx/) goes into much more detail. I began walking through the steps below to get my NGINX deployment up and running in my home Kubernetes cluster.

kubectl create deployment nginx –image=nginx

at this point if we were to run kubectl get pods then we would see our NGINX pod in a running state.

![](https://vzilla.co.uk/wp-content/uploads/2021/02/022621_1354_Buildingthe2.png)

Now if we want to scale this deployment, we can do this by running the following command. For the demo I am running this in the default namespace if you were going to be actually keeping this and then working on this you would likely define a better namespace location for this workload.

kubectl scale deploy nginx –replicas 2

![](https://vzilla.co.uk/wp-content/uploads/2021/02/022621_1354_Buildingthe3.png)

You can manually scale your pods as you can see above or you can use the kubectl autoscale command which allows you to set minimum pods and maximum pods and this should be the moment where you go, hang on this sounds like where things get really interesting and the reason why Kubernetes full stop. You can see by running the following commands and configuring autoscale we get the minimum and if we were to put load onto these pods then this would dynamically provision more pods to handle the load. I was impressed and the lightbulb was flashing in my head.

![](https://vzilla.co.uk/wp-content/uploads/2021/02/022621_1354_Buildingthe4.png)

Ok, so we have a pod which is going to help us with load balancing our web traffic but for this to be useful we need to create a service and expose this to the network. This can be done with the following command; we are going to use the NodePort to begin with as we did with the Kubernetes dashboard in the previous post.

kubectl expose deployment nginx –type NodePort –port 80

With this command you are going to understand the NodePort that you need to use to access the NGINX deployment from the worker nodes

kubectl describe svc nginx

![](https://vzilla.co.uk/wp-content/uploads/2021/02/022621_1354_Buildingthe5.png)

We then run the following command to understand which node address we need to connect to

Kubectl get pods –selector=”app=nginx” –output=wide

And we can see from the below that node is either node2 or node3

![](https://vzilla.co.uk/wp-content/uploads/2021/02/022621_1354_Buildingthe6.png)

Open a web page with your worker IP address:NODEPORT Address and you should see the NGINX opening page.

![](https://vzilla.co.uk/wp-content/uploads/2021/02/022621_1354_Buildingthe7.png)

Ok so all good we have our application up and running and we can start taking advantage of that I assume but what we should also cover is how you can take what you have just created and create a YAML file based on that so you can use this to create the same configuration and deployment again and again.

We created a deployment, so we capture this by running the below command to an output location you wish.

kubectl get deploy nginx -o yaml > /tmp/nginx-deployment.yml

same for the service

kubectl get svc nginx -o yaml > /tmp/nginx-service.yaml

Then you can use these yaml files to deploy and version your deployments

kubectl create -f /tmp/nginx-deployment.yaml

kubectl create -f /tmp/nginx-service.yaml

if created with YAML you can also delete with

kubectl delete -f /tmp/nginx-deployment.yaml

kubectl delete -f /tmp/nginx-service.yaml

We can also delete what we have just created by running the two following commands

kubectl delete deployment nginx

kubectl delete service nginx

I think that covered quite a bit and next we are going to get into persistent storage and some of the more stateful applications such as databases that need that persistent storage layer. As always please leave me feedback, I am learning with the rest of us so any pointers would be great.

The post [Building the home lab Kubernetes playground – Part 3](https://vzilla.co.uk/vzilla-blog/building-the-home-lab-kubernetes-playground-part-3) first appeared on [vZilla](https://vzilla.co.uk).