Challenges

Focused, hands-on DevOps and server-side problems with hints, feedback, and automated solution checks.

Challenge

Kubernetes - Multi-Container Pod Design Patterns

Build five ways to combine containers in one Pod: a sidecar that extends the app, an init container that finishes before the app starts, a native sidecar with a startup guarantee, an ambassador that mutates an outbound call, and an adapter that translates an inbound one.

Challenge

Kubernetes Workloads: StatefulSets

Build a StatefulSet with a headless Service, watch ordered Pod creation, verify per-replica PVC naming, scale down and back up, prove stable identity, then roll an image update and roll back using ControllerRevision history.

Challenge

Kubernetes Workloads: ReplicaSets and Deployments

Build a ReplicaSet by hand, observe self-healing, then update its template and end up with Pods running different images. Layer a Deployment on top and confirm the full ownership chain.

Challenge

Kubernetes - Dynamic Provisioning with StorageClass

Explore how the DefaultStorageClass admission controller injects storage classes, explicitly name a StorageClass, switch the cluster default, and inspect where local-path stores volumes on the node.

Challenge

Kubernetes - PersistentVolume Static Binding Patterns

Learn the three static PV binding patterns - generic match, label selector, and bidirectional claimRef - then use a no-provisioner StorageClass with WaitForFirstConsumer to pin storage to a specific node.

Challenge

Kubernetes - emptyDir Volumes: Sharing, Lifecycle, and Memory-Backed Storage

Use emptyDir volumes to share data between containers, understand the volume lifecycle across container restarts and pod deletion, and explore memory-backed ephemeral storage.