Challenges

Focused, hands-on problems for sharpening your DevOps and server-side skills. Some teach specific concepts while others mirror real-world scenarios. Every challenge includes hints, feedback, and automated solution checks.

Collection
Category
Difficulty
Challenge,  Easy

Provision and Configure a PersistentVolume and PersistentVolumeClaim for a Deployment

Practice static storage provisioning in Kubernetes by creating a PersistentVolume backed by hostPath, binding it to a PersistentVolumeClaim, and mounting it in a Deployment — a core CKAD skill for storage management.

Submissions: 28/44
Challenge,  Easy

Inject an Ephemeral Container into a Distroless Pod and Test Cross-Namespace HTTP

A distroless pod running in the cherry namespace has no shell or debugging tools. Use kubectl debug to attach an ephemeral container, test connectivity to the request-logger service, and verify the request was received in its logs.

Submissions: 65/83
Challenge,  Easy

Access the Kubernetes API Server via kubectl proxy

Use kubectl proxy to open a local, already authenticated HTTP endpoint to the Kubernetes API server, then use curl to list every Secret in the gliese-581 namespace and save the raw JSON response to /home/laborant/secret-list.json.

Submissions: 28/34
Challenge,  Easy

Debug a Failing Kubernetes Job

A Job manifest at /home/laborant/batch-job.yaml is exiting with a non-zero exit status. The Job has limited retries configured. Inspect the cluster and the manifest to find the bug, fix it, and reapply.

Submissions: 35/42
Challenge,  Easy

Port-Forward a Kubernetes Service to localhost

A Deployment running a distroless Chainguard nginx image (cgr.dev/chainguard/nginx) is deployed in the namespace webapps, fronted by a ClusterIP Service. Port-forward that Service to localhost port 3333 on cplane-01, use curl to save the response body to /home/laborant/index.html, and verify the file is accessible and contains the expected content.

Submissions: 17/19
Challenge,  Easy

Configure a Memory-Backed emptyDir Volume with a Size Limit

A Deployment is using a disk-backed emptyDir volume. Convert it to a memory-backed tmpfs volume for better performance — but make sure to set a size limit to prevent the Pod from exhausting the node's RAM.

Submissions: 61/71