Step-by-Step Guide to Deploying Apps on Minikube Kubernetes


Introduction
Kubernetes has revolutionized container orchestration, making it easier to manage, scale, and deploy applications. If you're new to Kubernetes, Minikube is a great way to get started. In this guide, we will walk through the process of setting up Minikube and deploying a simple application using Kubernetes.
Understanding the Basics
What Are Containers?
Containers are lightweight, portable, and self-sufficient environments that include everything needed to run an application. Technologies like Docker have made containers popular.
What Are Pods?
In Kubernetes, a Pod is the smallest deployable unit. A Pod can contain one or more containers that share networking and storage resources.
What Is a Deployment?
A Deployment is a higher-level Kubernetes object that manages a group of Pods. It ensures automatic recovery, rolling updates, and scalability.
Setting Up Your Kubernetes Environment
Prerequisites
Before we start, make sure you have the following installed:
Windows with WSL2 (or a Linux-based system)
kubectl (Kubernetes command-line tool)
Minikube (a tool to run Kubernetes locally)
Installing kubectl
Refer to the Kubernetes documentation for installation steps. On Linux, use the following commands:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client
Installing Minikube
Follow the Minikube documentation for installation instructions. To start a Minikube cluster, use:
minikube start
Verify that Minikube is running:
minikube status
Deploying an Application
Creating a Pod
Create a configuration file for a simple Nginx pod:
nano nginx-pod.yaml
Paste the following YAML:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Deploy the pod:
kubectl apply -f nginx-pod.yaml
kubectl get pods
Exposing the Pod
To access the application inside the cluster:
kubectl port-forward pod/nginx 8080:80
Then visit http://localhost:8080
in your browser.
Transitioning to Deployments
Pods alone do not offer resilience. If a Pod crashes, it won’t restart automatically. This is where Deployments come in.
Creating a Deployment
Create a new file for the Deployment:
nano nginx-deployment.yaml
Paste the following YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Apply the deployment:
kubectl apply -f nginx-deployment.yaml
kubectl get deployments
kubectl get pods
Testing Auto-Healing
Delete a pod manually:
kubectl delete pod <pod_name>
Run the following command on second terminal:
kubectl get pods -w
Conclusion
We started with a simple container, transitioned to Pods, and then leveraged Deployments for auto-healing and scalability. Kubernetes provides powerful features, and Minikube is an excellent tool for learning. Experiment with different configurations and explore Kubernetes further!
Subscribe to my newsletter
Read articles from Ayush Sharma directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
