Your Kubernetes Experience
Kubernetes Core Concepts & Headlamp Local Setup
Objective: Establish local Minikube/Kind, master primitives (Pods, Deployments, Services, ConfigMaps, Namespaces), and run Headlamp Desktop & In-Cluster.
Nodes
Headlamp interactive hardware & condition inspector
| NAME | CPU LOAD | MEMORY | STATUS | ROLES | VERSION |
|---|---|---|---|---|---|
| minikube-control-plane |
|
|
Ready | control-plane | v1.28.3 |
Daily Schedule Structure (Days 1–10)
Each day consists of two synchronized learning phases designed to build both theoretical knowledge and muscle memory.
Micro-Concept & Architecture Breakdown
Deconstruct Kubernetes internal control plane mechanics, API schemas, isolation patterns, and Headlamp architectural contracts before executing commands.
5-Step Hands-on Drill
Execute exactly 5 progressive operational tasks switching between terminal CLI and Headlamp visual inspection to cross-validate results.
10-Day Hands-on Learning Path
Comprehensive step-by-step drills covering local clusters, web deployment, declarative YAML, storage, and authentication.
~/.kube/config file.
5-Step Hands-on Drill:
minikube start --driver=docker
Alternative: kind create cluster --name dev-cluster
kubectl cluster-info && kubectl get nodes
Open Headlamp Desktop application and select your active cluster context from the top navigation dropdown.
Navigate to Cluster > Nodes in Headlamp to review CPU, memory capacity, conditions, and kernel versions.
kubectl describe node
Compare the hardware capacity and status conditions with the visual metrics displayed in Headlamp.
5-Step Hands-on Drill:
kubectl create deployment demo-web --image=nginx:alpine --replicas=3
kubectl apply -f https://raw.githubusercontent.com/headlamp-k8s/headlamp/main/autogen-artifacts/headlamp-k8s.yaml
kubectl port-forward -n headlamp service/headlamp 8080:80
Open http://localhost:8080 in your browser and locate the demo-web Deployment under Workloads > Deployments.
Increase replicas from 3 to 5 directly in Headlamp UI, then verify in your terminal via kubectl get pods -w.
5-Step Hands-on Drill:
kubectl create namespace dev-team and kubectl create namespace staging-team.
kubectl create deployment app-v1 --image=redis:alpine -n dev-team and kubectl create deployment app-v1 --image=memcached:alpine -n staging-team.
dev-team.
kubectl get pods -A and match the cross-namespace output against Headlamp's All Namespaces view.
5-Step Hands-on Drill:
web-pod.yaml via imperative dry-run:kubectl run static-web --image=nginx:latest --dry-run=client -o yaml > web-pod.yaml
kubectl apply -f web-pod.yaml.
static-web Pod in Headlamp UI, click Edit, add label environment: staging, and save changes.
kubectl get pod static-web --show-labels.
Pulled, Created, and Started lifecycle milestones.
5-Step Hands-on Drill:
kubectl run log-producer --image=busybox -- sh -c "while true; do echo 'Processing batch task...'; sleep 2; done"
kubectl logs -f log-producer.
log-producer under Workloads > Pods in Headlamp, click Logs, and test the auto-scroll and log filter features.
kubectl run failing-pod --image=invalid-image-name.
ImagePullBackOff status in Headlamp UI, inspect the Pod's Events tab to locate the missing image error, and delete the pod using the UI trash icon.
5-Step Hands-on Drill:
kubectl create deployment web-app --image=nginx:1.21 --replicas=4.
kubectl set image deployment/web-app nginx=nginx:1.25.
nginx:badtag.
kubectl rollout undo deployment/web-app and verify recovery in the UI.
5-Step Hands-on Drill:
kubectl expose deployment web-app --port=80 --targetport=80 --type=ClusterIP --name=web-internal.
kubectl run test-curl --rm -it --image=curlimages/curl -- curl http://web-internal.
kubectl patch svc web-internal -p '{"spec": {"type": "NodePort"}}'.
kubectl get svc web-internal and verify the assigned port is reflected in Headlamp's Service details page.
5-Step Hands-on Drill:
kubectl create configmap app-config --from-literal=APP_COLOR=blue --from-literal=LOG_LEVEL=debug.
app-config to view key-value pairs.
app-config:
apiVersion: v1
kind: Pod
metadata:
name: config-demo
spec:
containers:
- name: web
image: nginx:alpine
envFrom:
- configMapRef:
name: app-config
kubectl exec config-demo -- printenv | grep APP_COLOR.
app-config in Headlamp UI to change APP_COLOR to green.
5-Step Hands-on Drill:
pvc.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
data-pvc status in Headlamp under Storage > PersistentVolumeClaims.
storage-pod mounting data-pvc at /usr/share/nginx/html.
kubectl exec storage-pod -- sh -c "echo 'Headlamp Storage Test' > /usr/share/nginx/html/index.html" and verify file retention across pod restarts.
5-Step Hands-on Drill:
kubectl create serviceaccount headlamp-admin -n kube-system.
kubectl create clusterrolebinding headlamp-admin-binding --clusterrole=cluster-admin --serviceaccount=kube-system:headlamp-admin
kubectl create token headlamp-admin -n kube-system --duration=24h
Level 1 Checkpoint Quiz
Validate your understanding of local setup, in-cluster routing, and troubleshooting.
1 How does Headlamp Desktop determine which cluster to connect to upon launch? ↓
~/.kube/config (or the KUBECONFIG environment variable) for available context definitions.
2 What is the key difference between running Headlamp as a Desktop App versus In-Cluster? ↓
3 If a Pod is stuck in ImagePullBackOff, where in Headlamp UI do you locate the exact diagnostic error message? ↓
Failed to pull image: manifest unknown).
4 Why is kubectl port-forward used during local testing of in-cluster Headlamp deployments? ↓
5 What Kubernetes primitive must be created alongside a ClusterRoleBinding to generate a login token for Headlamp in-cluster access? ↓
ServiceAccount.
Level 1 Graduation Exam
Comprehensive hands-on validation scenario required before progressing to Level 2.
"You must provision a local Minikube/Kind cluster, install Headlamp in-cluster, set up a token-authenticated ServiceAccount, deploy a 2-tier application (Nginx frontend + Redis backend), and verify application health and event streams exclusively through Headlamp UI."
Required Artifacts & Deliverables
Interactive ChecklistPASS CRITERIA
- Headlamp web UI opens cleanly in browser and accepts the generated ServiceAccount token.
- All workloads inside the production namespace report Running status with zero container crashes.
- Scaling and log inspection tasks can be executed fluidly from both Headlamp UI and kubectl.
FAIL CONDITIONS
- Inability to establish port-forward or log into Headlamp UI.
- Invalid RBAC bindings preventing Headlamp from reading cluster resources.
- Misconfigured pod specifications causing CrashLoopBackOff or ErrImagePull states.