8 Kubernetes Projects for Your Resume (Beginner to Advanced)

V
Vishvesh Patel
Oct 21, 2026·9 min read
8 Kubernetes Projects for Your Resume (Beginner to Advanced)

Most Kubernetes resume projects say the same thing: "Deployed an app to Kubernetes." That shows you can run kubectl apply. What hiring managers want to know is whether you understand what keeps an app healthy in a cluster: probes, limits, rollouts, storage, packaging and delivery.

These eight projects build those skills in order. Every one runs on kind, a free local cluster that runs inside Docker, so you need no cloud bill until the optional last step.

If Docker is still new, build a few of the Docker projects for beginners first. Kubernetes runs containers; it will not teach you how to build them.

# Project Shows you understand Level
1 A production-ready Deployment probes, requests and limits, Services Beginner
2 Config, rollouts and rollbacks ConfigMaps, Secrets, zero-downtime updates Beginner
3 Routing with the Gateway API north-south traffic, hostnames Beginner
4 Postgres as a StatefulSet persistent storage, stable identity Intermediate
5 Package your app as a Helm chart templating, per-environment values Intermediate
6 Autoscaling under load metrics-server, HPA Intermediate
7 GitOps with Argo CD declarative delivery, drift Advanced
8 Monitoring the cluster Prometheus, Grafana, alerts Advanced

Set up your cluster

kind create cluster --name lab
kubectl cluster-info --context kind-lab

That is a working cluster. Installing Kubernetes with kind covers multi-node clusters, and the Kubernetes playground lets you practise kubectl in the browser first.

To use an image you built locally without pushing it to a registry, load it into the cluster:

kind load docker-image hello-api:1.0 --name lab

Project 1: A production-ready Deployment

What it shows: you know the difference between "it runs" and "it runs safely."

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
        - name: hello
          image: hello-api:1.0
          ports:
            - containerPort: 8000
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              memory: 256Mi
          readinessProbe:
            httpGet:
              path: /
              port: 8000
            periodSeconds: 5
          livenessProbe:
            httpGet:
              path: /
              port: 8000
            initialDelaySeconds: 10
            periodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:
  name: hello
spec:
  selector:
    app: hello
  ports:
    - port: 80
      targetPort: 8000
kubectl apply -f hello.yaml
kubectl get pods -l app=hello -w
kubectl port-forward svc/hello 8080:80

Then break it on purpose and write down what happened:

  • Delete a Pod and watch the Deployment replace it.
  • Point the readiness probe at a path that returns 404, and see the Pod run but drop out of the Service. kubectl get endpoints hello shows it.
  • Set the memory limit to 16Mi and watch it get OOMKilled.

Those three experiments are better interview material than the YAML itself. Reference: probes and requests and limits.

Project 2: Config, rollouts and rollbacks

What it shows: you can ship a change without downtime, and undo a bad one.

Move configuration out of the image:

kubectl create configmap hello-config --from-literal=APP_ENV=staging
kubectl create secret generic hello-db --from-literal=DATABASE_PASSWORD=change-me

Reference both in the Deployment's container spec:

          envFrom:
            - configMapRef:
                name: hello-config
            - secretRef:
                name: hello-db

Now roll out a new version and roll it back:

kubectl set image deployment/hello hello=hello-api:1.1
kubectl rollout status deployment/hello
kubectl rollout history deployment/hello
kubectl rollout undo deployment/hello

Run a curl loop against the Service during the rollout. With readiness probes from project 1 in place, it never fails. Remove the probe and run it again to see why they matter. In your README, note that Kubernetes Secrets are only base64-encoded, and say how you would handle real secrets. ConfigMaps vs Secrets covers this.

Project 3: Routing with the Gateway API

What it shows: you know how traffic gets from outside the cluster to a Service, using the current standard.

For years this meant an Ingress with the ingress-nginx controller. That controller was retired in March 2026 and no longer receives fixes, and the Kubernetes project recommends the Gateway API for new work. Install a Gateway API implementation such as Envoy Gateway or Traefik, following its kind quickstart, then route to your Service:

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: hello
spec:
  parentRefs:
    - name: my-gateway
  hostnames:
    - hello.localtest.me
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /
      backendRefs:
        - name: hello
          port: 80

Add a second app and a second route to it, then split traffic 90/10 between two versions using weight on the backendRefs. That is a canary release in a few lines of YAML, and it is easy to explain in an interview. Kubernetes Ingress explains how Ingress and the Gateway API compare.

Project 4: Postgres as a StatefulSet

What it shows: you understand why databases are different, and how storage works in a cluster.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgres
spec:
  serviceName: postgres
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:16-alpine
          env:
            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: hello-db
                  key: DATABASE_PASSWORD
            - name: PGDATA
              value: /var/lib/postgresql/data/pgdata
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: data
              mountPath: /var/lib/postgresql/data
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  name: postgres
spec:
  clusterIP: None
  selector:
    app: postgres
  ports:
    - port: 5432

Write some data, delete the Pod with kubectl delete pod postgres-0, and confirm the data is still there when it comes back with the same name and the same volume. Then explain in the README why you would usually choose a managed database such as RDS in production. Knowing when not to run something in Kubernetes is a senior-sounding answer. If the claim gets stuck, see PVC pending.

Project 5: Package your app as a Helm chart

What it shows: you can make one set of manifests work across environments.

helm create hello

Replace the generated templates with your Deployment and Service from projects 1 and 2, then move the values that differ between environments into values.yaml: image tag, replica count, resources, config. Add values-staging.yaml and values-prod.yaml and install both into separate namespaces:

helm install hello-staging ./hello -n staging --create-namespace -f values-staging.yaml
helm install hello-prod ./hello -n prod --create-namespace -f values-prod.yaml
helm upgrade hello-staging ./hello -n staging -f values-staging.yaml --set image.tag=1.1
helm rollback hello-staging 1 -n staging

Run helm lint and helm template in your README's test instructions. Helm charts and Helm values cover templating in depth.

Project 6: Autoscaling under load

What it shows: you can make an app scale with demand, and you know what autoscaling depends on.

kind does not ship metrics-server. Install it, and allow it to skip kubelet certificate checks, which is fine on a local cluster:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
kubectl patch deployment metrics-server -n kube-system --type=json \
  -p='[{"op":"add","path":"/spec/template/spec/containers/0/args/-","value":"--kubelet-insecure-tls"}]'

Create the autoscaler:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hello
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hello
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60

Generate load and watch it scale:

kubectl run load --rm -it --image=busybox:1.36 --restart=Never -- \
  sh -c "while true; do wget -q -O- http://hello; done"
kubectl get hpa hello -w

Screenshot the replica count going up and coming back down for your README. If the target shows <unknown>, metrics-server is not ready or the Pods have no CPU request. HPA explains both.

Project 7: GitOps with Argo CD

What it shows: you can run delivery the way most platform teams now do: Git is the source of truth, and the cluster follows it.

kubectl create namespace argocd
kubectl apply -n argocd --server-side --force-conflicts \
  -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl port-forward svc/argocd-server -n argocd 8443:443

Push your Helm chart from project 5 to a Git repository, create an Argo CD Application that points at it, and enable automated sync. Then demonstrate the loop:

  1. Change the image tag in Git and push. Argo CD rolls it out.
  2. Change the replica count by hand with kubectl scale. Argo CD marks the app OutOfSync and, with self-heal on, puts it back.

That second step, drift correction, is what makes this more than a fancier kubectl apply. The Top 5 DevOps projects that get you hired post goes further with a full GitOps pipeline.

Project 8: Monitoring the cluster

What it shows: you can see what a cluster is doing and get told when something breaks.

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install monitoring prometheus-community/kube-prometheus-stack \
  -n monitoring --create-namespace
kubectl port-forward svc/monitoring-grafana -n monitoring 3000:80

The chart ships Prometheus, Grafana and ready-made dashboards for nodes, Pods and workloads. To make it your own:

  • Build one dashboard for your hello app: request rate, error rate, latency, restarts.
  • Write one alert rule, for example Pods restarting more than three times in ten minutes, then trigger it with the OOMKill experiment from project 1.

Kubernetes monitoring explains what to watch.

Optional: do it once on a real cloud cluster

When the local versions work, recreate projects 1 to 5 on a managed cluster such as EKS, provisioned with Terraform. It adds the parts that only exist in the cloud: load balancers, IAM for Pods and real storage classes. Destroy it when you are done; managed clusters bill by the hour. If kubectl gets Unauthorized, see EKS Unauthorized.

How to present these on your resume

  • One repository, one README per project, with a diagram, the exact commands to run it on kind, and the "break it on purpose" results.
  • Bullets that name the outcome: "Zero failed requests during rolling updates, verified with a load test, by adding readiness probes" beats "Used Kubernetes Deployments."
  • Link it from the top of your resume. Then prepare for the follow-up questions with the Kubernetes interview questions.

If you want a certification alongside the projects, the same skills carry straight into the CKA study guide, and the CKA practice lab runs exam-style tasks in your browser.

More multi-tool ideas, combining Terraform, CI/CD and cloud, are in Top 10 DevOps Projects for Your Resume.

Frequently asked questions

What Kubernetes projects should I put on my resume?

Projects that show production habits rather than just running a Pod: a Deployment with probes, resource limits and a rollback; a stateful database with persistent storage; your app packaged as a Helm chart; autoscaling under load; and GitOps delivery with Argo CD. Two or three of these, documented well, are enough for a junior role.

Do I need a cloud account to build Kubernetes projects?

No. kind runs a full Kubernetes cluster inside Docker on your laptop for free, and every project here works on it. A managed cluster such as EKS is worth doing once, at the end, because it costs money and adds cloud networking and IAM on top.

Is a CKA certification better than Kubernetes projects?

They do different jobs. A certification gets you past resume filters; projects give you something specific to talk about in the interview. If you have time for only one, build the projects, because CKA preparation covers the same skills and the projects prove you can apply them.

How long do these Kubernetes projects take?

Projects 1 to 3 take an evening each. Helm, autoscaling and Argo CD take a weekend each the first time. Expect four to six weeks to build all eight at a few hours a week.

V
Written by
Vishvesh Patel
DevOps Engineer

Vishvesh Patel is a DevOps engineer who writes hands-on guides on Docker, Kubernetes, Terraform, CI/CD, AWS, and Linux. He builds the tutorials, roadmaps, and browser playgrounds at DevOpsLesson to help engineers go from beginner to job-ready.

Continue reading