Getting Started with Kubernetes: A Beginner’s Guide to Deploying Your First Application

Kubernetes, often abbreviated as K8s, is a powerful open-source platform for automating the deployment, scaling, and management of containerized applications. If you’re new to Kubernetes, it might seem daunting, but with the right steps, you can deploy your first application in no time. In this beginner-friendly guide, we’ll walk through setting up a Kubernetes cluster using Minikube and deploying a simple web application.
What You’ll Need
- A computer with Docker installed (for running containers).
- Minikube installed (a tool to run a single-node Kubernetes cluster locally).
kubectl
, the Kubernetes command-line tool, installed.- Basic familiarity with terminal commands.
Follow the Minikube installation guide and kubectl installation guide if you haven’t set these up yet.
Step 1: Start Your Kubernetes Cluster
Minikube makes it easy to run a local Kubernetes cluster for learning and testing. Open your terminal and run:
minikube start
This command downloads a virtual machine image, sets up a single-node Kubernetes cluster, and configures kubectl
to communicate with it. Once the command completes, verify the cluster is running:
kubectl cluster-info
You should see details about your cluster, including the control plane’s address.
Step 2: Understanding Key Kubernetes Concepts
Before deploying an application, let’s cover three fundamental Kubernetes concepts:
- Pod: The smallest deployable unit in Kubernetes, which runs one or more containers.
- Deployment: A resource that manages a set of Pods, ensuring they are running and updated as needed.
- Service: An abstraction that exposes your application to the network, allowing access to Pods.
We’ll use these to deploy and expose a simple web application.
Step 3: Deploy Your First Application
Let’s deploy a basic Nginx web server as our application. Create a file named nginx-deployment.yaml
with the following content:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
This YAML defines a Deployment that runs two replicas of an Nginx container, listening on port 80. Apply it to your cluster:
kubectl apply -f nginx-deployment.yaml
Verify the Deployment is running:
kubectl get deployments
You should see nginx-deployment
with two ready replicas. To check the Pods:
kubectl get pods
Step 4: Expose Your Application
To access the Nginx server, we need to expose it using a Service. Create a file named nginx-service.yaml
:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
Apply the Service:
kubectl apply -f nginx-service.yaml
Since we’re using Minikube, run the following to access the Service:
minikube service nginx-service
This opens a browser window pointing to the Nginx welcome page, served by your Kubernetes cluster.
Step 5: Clean Up
Once you’re done experimenting, clean up by deleting the resources:
kubectl delete -f nginx-service.yaml
kubectl delete -f nginx-deployment.yaml
Stop the Minikube cluster:
minikube stop
Troubleshooting Tips
If something goes wrong, here are a few tips to help:
- Check Pod logs: If your Pods aren’t running, use
kubectl logs <pod-name>
to view error messages. - Describe resources: Run
kubectl describe pod <pod-name>
orkubectl describe deployment nginx-deployment
to see detailed status and events. - Verify Minikube: Ensure Minikube is running with
minikube status
. If it’s stopped, restart it withminikube start
. - Network issues: If the Service isn’t accessible, confirm the Service type and port settings match your Deployment.
By mastering these troubleshooting steps, you’ll be better equipped to handle common issues as you explore Kubernetes further.