Kubernetes

Orchestrate containerized applications at scale - automate deployment, scaling, and management across clusters

TL;DR

What: Container orchestration platform for automating deployment, scaling, and management.

Why: Run containers at scale with high availability, rolling updates, and self-healing.

Quick Start

Install kubectl:

# macOS
brew install kubectl

# Linux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/

# Verify
kubectl version --client

Install Minikube (local cluster):

# macOS
brew install minikube

# Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

Start a cluster:

minikube start

# Verify
kubectl get nodes

Deploy an app:

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
minikube service nginx

Cheatsheet

CommandDescription
kubectl get podsList pods
kubectl get servicesList services
kubectl get deploymentsList deployments
kubectl describe pod NAMEPod details
kubectl logs PODView pod logs
kubectl exec -it POD -- bashShell into pod
kubectl apply -f file.yamlApply config
kubectl delete -f file.yamlDelete resources
kubectl scale deploy NAME --replicas=3Scale deployment
kubectl rollout restart deploy NAMERestart deployment

Gotchas

Pod stuck in Pending

# Check events
kubectl describe pod POD_NAME

# Common causes:
# - Insufficient resources → add nodes or reduce requests
# - Image pull error → check image name and registry access

CrashLoopBackOff

# Check logs
kubectl logs POD_NAME --previous

# Common causes:
# - App crash → fix application code
# - Missing config → check ConfigMaps/Secrets

Can’t connect to cluster

# Check current context
kubectl config current-context

# List contexts
kubectl config get-contexts

# Switch context
kubectl config use-context CONTEXT_NAME

Apply vs Create

kubectl create    # Create new resource (fails if exists)
kubectl apply     # Create or update (idempotent)

# Always prefer apply for production
kubectl apply -f deployment.yaml

Next Steps