Stop 14 · Build Your DevOps PortfolioProjects · 2/7

Kubernetes Cluster Deployment Project

Part of the DevOps Roadmap

In short

Running one pod is a tutorial. Running an app with Ingress, autoscaling, config, storage and health checks on a real cluster is what teams actually do. This project shows you can do the second one.

Build on Phase 8's practice project with a more complete setup — including Ingress, autoscaling, and persistent storage where relevant, showing production-adjacent Kubernetes fluency.

The mascot blows a whistle and waves a flag in a bus depot while a mechanic fixes a broken bus.

Think of it like this

The bus depot manager

A depot manager promises five buses on route 21 all day. If one breaks down, another is sent out. At rush hour, two extra buses go. Passengers just see buses arriving. Kubernetes is the depot manager; your manifests are the promise.

Watch it happen

A request through your cluster

User
Ingress
Service
Pod

GET shop.example.com

1/5The request reaches the Ingress controller, which owns the public address and the TLS certificate.

The big ideas

What you need to know

Must-have objects

Deployment, Service, Ingress, ConfigMap, Secret and a HorizontalPodAutoscaler. Add a StatefulSet or PVC if you run a database.

Probes and limits

Readiness and liveness probes, plus CPU and memory requests and limits on every container.

Package it

Use Helm or Kustomize so the same app can be installed with different values in another cluster.

Show it working

Record a short demo: load test, pods scaling up, one pod deleted and replaced, all with no errors.

See it in code

Walk through the code

yaml
1apiVersion: apps/v12kind: Deployment3metadata: { name: web }4spec:5  replicas: 26  selector: { matchLabels: { app: web } }7  template:8    metadata: { labels: { app: web } }9    spec:10      containers:11        - name: web12          image: ghcr.io/you/shop:3f2a9c113          resources:14            requests: { cpu: 100m, memory: 128Mi }15            limits: { memory: 256Mi }16          readinessProbe: { httpGet: { path: /health, port: 3000 } }

1/4A Deployment named web that should always keep two pods running.

The two lines people forget most are resource requests and the readiness probe. The autoscaler needs CPU requests to calculate usage.

Save yourself the pain

Common mistakes

Oops

Running everything as a single pod with no probes and calling it production-ready.

Do this instead

Use at least two replicas, probes and resource requests. Then show what happens when a pod or node dies.

Oops

Putting database passwords straight into the Deployment YAML.

Do this instead

Use a Secret, ideally synced from a secrets manager, and reference it with envFrom or valueFrom.

Your mission

Milestone 1: app reachable via Ingress

~45 min

Quick check

A pod is running but its app is still loading its cache. Which setting stops users hitting it too early?

Go deeper

  1. 1Extend your Phase 8 project with Ingress routing and a Horizontal Pod Autoscaler.
  2. 2Use Helm to package your application's manifests, if you haven't already.
  3. 3Document your cluster architecture with a simple diagram in your README.

More projects at this stop

Stuck on this topic? Ask an Insider

Get 1:1 guidance from people who've walked this exact path — on the InsideEdge app.

Download
InsideEdge