Room 99
EXIT EXAM - THE GRAND ESCAPE
The Ultimate Challenge
- You’ve fought through 56 rooms of Kubernetes mastery.
- This is your final test. No hints. No hand-holding.
- Complete all tasks from memory to prove you are a true Kubernetes master.
⚠️ Rules of the Exit Exam
- You must complete ALL 10 challenges in a single Kind cluster.
- Each challenge builds on the previous one - order matters.
- Minimal guidance is provided - you should know the commands by now.
- The final password is assembled from tokens collected in each challenge.
Challenge 1: Cluster Bootstrap
Token:
k8
Create a Kind cluster named final-exam with:
- 1 control-plane node
- 2 worker nodes
- Port mappings: host 80 → container 30080, host 443 → container 30443
Verify all nodes are Ready.
Challenge 2: Namespace Architecture
Token:
s
Create these namespaces with appropriate labels:
| Namespace | Label |
|---|---|
frontend |
tier=web |
backend |
tier=api |
data |
tier=storage |
monitoring |
tier=ops |
Apply a default deny-all NetworkPolicy to each namespace, then selectively allow:
frontend→backend(port 8080)backend→data(port 5432)monitoring→ all namespaces (port 9090)
Challenge 3: RBAC & Security
Token:
m
Set up these service accounts and permissions:
| Service Account | Namespace | Permissions |
|---|---|---|
frontend-sa |
frontend |
Full access to own namespace only |
backend-sa |
backend |
Full access to own namespace only |
platform-admin |
default |
Read-only access to ALL namespaces |
Verify:
frontend-sacan list pods infrontendbut NOT inbackendplatform-admincan list pods everywhere but cannot delete anything
Challenge 4: Stateful Application
Token:
a
Deploy a StatefulSet in the data namespace:
- Name:
exam-db - 3 replicas
- Headless Service:
exam-db-headless - Each pod gets a 1Gi PVC
- Pods must start in order (0, 1, 2)
Verify:
- All 3 pods are running with stable network identities
exam-db-0.exam-db-headless.data.svc.cluster.localresolves
Challenge 5: Application Deployment
Token:
s
Deploy in the frontend namespace:
- Deployment:
web-appwith 3 replicas - Rolling update:
maxUnavailable=1,maxSurge=1 - Readiness probe: HTTP GET
/port 80, every 5s - Liveness probe: HTTP GET
/healthzport 80, every 10s - Resource requests: 50m CPU, 64Mi memory
- Resource limits: 100m CPU, 128Mi memory
Deploy in the backend namespace:
- Deployment:
api-serverwith 2 replicas - Environment from ConfigMap
api-configand Secretapi-secret - Anti-affinity: prefer spreading across nodes
Create services for both deployments.
Challenge 6: Ingress & Traffic
Token:
t
Install the NGINX Ingress Controller and create ingress rules:
| Host | Path | Backend |
|---|---|---|
exam.local |
/ |
frontend/web-app:80 |
exam.local |
/api |
backend/api-server:80 |
Test with:
Challenge 7: Jobs & CronJobs
Token:
e
Create in the backend namespace:
- Job:
db-migration- runs once, must complete within 60s, retry up to 3 times - CronJob:
health-check- runs every 5 minutes, checks ifapi-serveris responding, keeps last 3 successful and 1 failed job
Verify the Job completes and the CronJob schedules correctly.
Challenge 8: Autoscaling
Token:
r
Configure:
- HPA for
web-app: min 2, max 10, target CPU 50% - HPA for
api-server: min 1, max 5, target CPU 60%
Generate load and verify the HPAs scale up:
kubectl run load-gen --image=busybox:1.36 --restart=Never -- \
sh -c "while true; do wget -q -O- http://web-app-svc.frontend.svc.cluster.local; done"
Verify pods scale beyond the initial replica count.
Challenge 9: Observability
Token:
5
Set up:
- Metrics-server (patched for Kind with
--kubelet-insecure-tls) - Resource monitoring:
kubectl top nodesandkubectl top pods -Amust work - Log aggregation: Create a DaemonSet that collects container logs from
/var/log/containers/and writes summaries to a shared volume
Verify:
kubectl top nodesshows CPU and memory usagekubectl top pods -Ashows all pod metrics- The log aggregator DaemonSet has a pod on every node
Challenge 10: Disaster Recovery
Token:
6
Prove you can recover from failure:
- Take an etcd snapshot (from the Kind control-plane node).
- Delete the
frontendnamespace and all its resources. - Restore from the etcd snapshot.
- Verify the
frontendnamespace andweb-appdeployment are back.
OR (if etcd restore is not feasible in Kind):
- Export all resources from
frontendnamespace to YAML. - Delete the namespace.
- Recreate everything from the exported YAML.
- Verify full recovery.
Assemble the Password
Collect all tokens from the 10 challenges:
| Challenge | Token |
|---|---|
| 1 - Cluster Bootstrap | k8 |
| 2 - Namespace Architecture | s |
| 3 - RBAC & Security | m |
| 4 - Stateful Application | a |
| 5 - Application Deployment | s |
| 6 - Ingress & Traffic | t |
| 7 - Jobs & CronJobs | e |
| 8 - Autoscaling | r |
| 9 - Observability | 5 |
| 10 - Disaster Recovery | 6 |
Final Password:
k8smaster56
⏱️ Time Target
A Kubernetes expert should complete this exam in under 90 minutes. If this is your first attempt, take your time - mastery is about understanding, not speed.
🏆 Congratulations!
If you’ve reached this point and assembled the password, you have demonstrated mastery across:
- Cluster setup and management (Kind)
- Namespace architecture and multi-tenancy
- RBAC and security
- StatefulSets and persistent storage
- Deployments, probes, and resource management
- Ingress and traffic routing
- Jobs and CronJobs
- Horizontal Pod Autoscaling
- Observability and monitoring
- Disaster recovery
You are a Kubernetes Master. 🎓
🔑 Password
Assemble all tokens: k8smaster56 → enter this with prefix: k8smaster