“I built and operated a production-style Kubernetes platform with separate dev, staging, and production environments. I deployed applications with Helm, implemented GitOps with Argo CD, configured resources, probes, autoscaling, availability, RBAC, networking, persistent storage, and practiced production incident response.”

Your role

You have joined a financial company as a DevOps Engineer.

The company is building an online banking platform:

Customers ↓ Banking Application │ ├── frontend ├── account-service ├── payment-service └── transaction-service ↓ Database 

The company wants Kubernetes environments built using production practices.

You are responsible for designing, deploying, securing, operating, troubleshooting, and explaining the platform.

This is not a copy/paste homework.

Every student must record a video showing the environment and explaining every major decision.

PART 1 — Architecture Design

Before creating anything, draw your architecture.

Your recording must explain:

 INTERNET │ ▼ Load Balancer / ALB │ ▼ Ingress │ ┌──────────┼──────────┐ ▼ ▼ ▼ frontend account payment │ │ └────┬─────┘ ▼ Database 

Then explain the Kubernetes architecture underneath:

 KUBERNETES / EKS │ ┌────────────┴────────────┐ │ │ CONTROL PLANE WORKER NODES │ │ API Server kubelet Scheduler runtime Controllers CNI etcd kube-proxy │ Pods 

In your recording explain:

What happens from kubectl apply until the container is actually running?

You should be able to explain approximately:

kubectl ↓ API Server ↓ desired state stored ↓ Controllers ↓ Scheduler ↓ Worker Node selected ↓ kubelet ↓ CRI ↓ container runtime ↓ Container starts ↓ CNI networking ↓ Readiness ↓ Service can route traffic 

Do not just read component definitions.

Explain the process.

PART 2 — Build Three Environments

The company requires:

DEV STAGING PRODUCTION 

For this homework, you can implement them as namespaces:

kubectl create namespace dev kubectl create namespace staging kubectl create namespace production 

Verify:

kubectl get namespaces 

But explain an important production point

In your recording answer:

“Would a bank necessarily run dev, staging and production merely as three namespaces in one cluster?”

Expected explanation:

Not necessarily.

For stronger isolation, especially in regulated/security-sensitive organizations, production may use separate clusters and often separate AWS accounts/VPC boundaries.

For example:

AWS Organization │ ├── Development Account │ └── Dev EKS │ ├── Staging / Pre-Prod Account │ └── Staging EKS │ └── Production Account └── Production EKS 

Namespaces are acceptable for our training environment because creating several full EKS environments costs additional money and operational effort.

But students must understand the difference between:

Lab architecture and real production architecture.

PART 3 — Build the Application

Create a Deployment for the application.

Requirements:

Application: banking-app Production replicas: 3 Container: nginx or your own application Container port: 80 

Your Deployment must include:

resources: requests: cpu: memory: limits: cpu: memory: 

and:

readinessProbe: 

and:

livenessProbe: 

and a production rolling strategy:

strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 0 maxSurge: 1 

Students must decide appropriate values and explain them.

PART 4 — Explain Requests and Limits

In the recording answer:

Why do we use requests?

Why do we use limits?

What happens when memory exceeds its limit?

What can happen when CPU reaches/exceeds its limit?

Why should we not blindly give every Pod huge requests?

Explain:

Requests ↓ Scheduling / reserved expectation Limits ↓ Maximum resource boundary 

Also explain why bad resource configuration can create:

Pending Pods CPU throttling OOMKilled Wasted cluster capacity Higher AWS cost 

PART 5 — Probes

Implement:

Startup Probe (optional if appropriate) Readiness Probe Liveness Probe 

Explain:

Readiness: Should this Pod receive traffic? Liveness: Should Kubernetes restart the container? Startup: Has this slow-starting application successfully started? 

Demonstrate what happens when readiness fails.

PART 6 — Service

Create:

ClusterIP Service 

Explain:

Why shouldn't another application communicate directly with a Pod IP?

Explain:

Service ↓ Selector ↓ Pod labels ↓ EndpointSlices ↓ Ready Pods 

Show:

kubectl get svc -n production kubectl get endpointslice -n production kubectl get pods -n production --show-labels 

PART 7 — Ingress

Create an Ingress for the application.

Conceptually:

Customer ↓ DNS ↓ Load Balancer ↓ Ingress Controller ↓ Ingress Rules ↓ Service ↓ Pods 

In your recording explain:

Ingress vs Ingress Controller

Ingress vs Service

Where HTTPS/TLS could terminate

How traffic reaches the application

For AWS/EKS, explain how an AWS load-balancing solution can integrate with Kubernetes rather than claiming the Ingress resource itself magically creates everything.

PART 8 — ConfigMap and Secret

Create a ConfigMap containing something such as:

APP_ENV=production LOG_LEVEL=info 

Create a Secret containing a dummy training credential.

Application must consume configuration through environment variables or mounted files.

Explain:

ConfigMap vs Secret

And answer:

“Is base64 encryption?”

Correct answer:

No.

For the banking scenario, discuss why real secrets should be managed carefully and why cloud secret-management/encryption solutions may be integrated rather than committing credentials to Git.

Never commit real secrets to the repository.

PART 9 — RBAC / Least Privilege

Create:

ServiceAccount Role RoleBinding 

Create a developer ServiceAccount.

It should be allowed to:

get Pods list Pods watch Pods 

It should not be allowed to:

delete Pods delete Deployments delete Secrets 

Test:

kubectl auth can-i list pods \ --as=system:serviceaccount:production:developer \ -n production 

Then:

kubectl auth can-i delete pods \ --as=system:serviceaccount:production:developer \ -n production 

Explain:

Authentication = Who are you? Authorization = What are you allowed to do? 

Then explain why least privilege is especially important for a banking application.

PART 10 — NetworkPolicy

Create a production NetworkPolicy.

Architecture:

frontend │ ▼ payment-service │ ▼ database 

Allowed:

frontend → payment ✓ payment → database ✓ 

Not allowed:

frontend → database ✗ random Pod → database ✗ 

Students must explain why RBAC cannot solve this problem.

Expected:

RBAC → Kubernetes API authorization NetworkPolicy → workload network communication 

Also explain that NetworkPolicy requires a network implementation that enforces it.

PART 11 — HPA

Configure HPA.

Example requirements:

minimum replicas: 3 maximum replicas: 10 CPU target: 60% 

Students must show:

kubectl get hpa -n production kubectl describe hpa -n production 

Explain:

What happens when traffic increases?

And:

What happens if HPA reaches maxReplicas but traffic continues increasing?

Also answer:

What does CPU-based HPA need?

Metrics and appropriate resource requests.

PART 12 — PDB

Create a PodDisruptionBudget.

For example:

3 replicas minAvailable: 2 

Explain why this matters during voluntary disruption such as node maintenance.

Also explain:

Does PDB protect against every failure?

No.

PART 13 — Scheduling

Demonstrate or explain:

nodeSelector node affinity pod anti-affinity taints tolerations 

For production, explain why we might avoid placing every replica on the same node.

Bad:

Node 1 ├── payment-1 ├── payment-2 └── payment-3 Node 1 fails → payment completely unavailable 

Better:

Node 1 → payment-1 Node 2 → payment-2 Node 3 → payment-3 

Discuss topology/AZ resilience where appropriate.

PART 14 — StatefulSet + Persistent Storage

Create a StatefulSet.

It must demonstrate:

Stable Pod identity PVC StorageClass PV Persistent data 

Show:

kubectl get statefulset kubectl get pvc kubectl get pv kubectl get storageclass 

Write data.

Delete the Pod.

Allow StatefulSet to recreate it.

Prove the data still exists.

Then explain:

Stable identity and persistent storage are related but different concepts.

PART 15 — AWS EBS CSI

Explain:

StatefulSet ↓ PVC ↓ StorageClass ↓ EBS CSI Driver ↓ AWS EBS ↓ PV ↓ PVC Bound ↓ Pod Running 

Students must explain the storage incident we previously encountered:

PVC Pending ↓ StorageClass existed ↓ ebs.csi.aws.com expected ↓ EBS CSI add-on/components missing ↓ No dynamic EBS volume ↓ Pod Pending 

And how to investigate it.

PART 16 — Helm

Convert the application into a Helm chart.

Suggested structure:

banking-app/ │ ├── Chart.yaml ├── values.yaml ├── values-dev.yaml ├── values-staging.yaml ├── values-prod.yaml │ └── templates/ ├── deployment.yaml ├── service.yaml ├── ingress.yaml ├── configmap.yaml ├── serviceaccount.yaml ├── hpa.yaml ├── pdb.yaml └── networkpolicy.yaml 

Different environment values should demonstrate meaningful differences.

For example:

DEV replicas: 1 smaller resources STAGING replicas: 2 production-like configuration PRODUCTION replicas: 3+ HPA PDB stronger availability settings 

Demonstrate:

helm lint helm template helm upgrade --install helm list helm history 

Explain why Helm is useful in a company with many applications and environments.

PART 17 — Argo CD / GitOps

Put Kubernetes/Helm configuration in Git.

Architecture:

Developer ↓ Pull Request ↓ Review ↓ Merge ↓ Git ↓ Argo CD ↓ EKS 

Students must create/configure an Argo CD Application and demonstrate:

Synced Healthy 

Then manually modify something in Kubernetes.

Observe:

OutOfSync 

Explain drift.

Then restore/reconcile through GitOps.

Critical production question:

“If Argo CD manages production, should engineers routinely modify production using kubectl edit?”

Expected:

Generally no. Desired changes should normally go through the controlled Git/change process, with emergency procedures handled according to company policy.

PART 18 — Banking Production Requirements

This section is mandatory in the recording.

Imagine this is a banking system handling financial transactions and sensitive data.

Before saying “production ready,” discuss:

High availability Least privilege Encryption Secret management Network segmentation Auditability Backups Disaster recovery Monitoring Alerting Logging Change control Image scanning Vulnerability management Patch management Capacity planning Rollback strategy Business continuity Compliance requirements 

Do not simply say:

“We have three replicas, therefore the bank is production-ready.”

Production readiness is much larger than Kubernetes manifests.

PART 19 — What Costs Money in AWS?

Students must be able to answer this because engineers should understand cost.

Discuss potential charges for things such as:

EKS cluster/control-plane service EC2 worker nodes EBS volumes/snapshots Load balancers NAT Gateway Data transfer CloudWatch logs/metrics ECR storage/data transfer Public IPv4 where applicable Route 53 Backup/storage services Other managed AWS services 

Do not memorize exact prices because pricing changes.

Instead explain:

“Which architectural decisions create cost?”

For example:

More nodes → more compute cost More/larger EBS → more storage cost Multiple ALBs → load-balancer cost Large log ingestion → observability cost NAT traffic → networking cost 

PART 20 — Production Monitoring

Your application must have an observability plan.

Explain what you would monitor:

CPU Memory Pod restarts Ready replicas Node health Request rate Error rate Latency HTTP 5xx HPA behavior PVC/storage Database health Dependency health 

And explain:

Metrics Logs Traces 

A strong student should mention service-level signals such as:

Traffic Errors Latency Saturation 

not only Kubernetes CPU.

PART 21 — TEN REQUIRED PRODUCTION INCIDENTS

This is the most important part of the homework.

Each student must break the environment intentionally, investigate it without jumping directly to the answer, fix/mitigate it, and verify recovery on video.

Incident 1 — Bad Deployment / ImagePullBackOff

Break:

Deploy an invalid/nonexistent image tag.

Student must discover:

New rollout ↓ New Pods unhealthy ↓ ImagePullBackOff ↓ describe Pod ↓ Events ↓ Image cannot be pulled 

Mitigate:

kubectl rollout history deployment/<name> -n production kubectl rollout undo deployment/<name> -n production kubectl rollout status deployment/<name> -n production 

Interview explanation:

“A new release introduced an invalid image reference. I correlated the incident with the rollout, confirmed the image pull failure from Pod events, rolled back to the known-good revision, and verified service recovery.”

Incident 2 — Production Slow / HPA at Maximum

Generate load.

Students investigate:

Application slow ↓ Pods Running ↓ CPU/resource pressure ↓ HPA target exceeded ↓ maxReplicas reached ↓ capacity insufficient for current load 

They must not say “traffic” without evidence.

Incident 3 — Service Selector Mismatch

Break Service selector:

Service: app=wrong-app Pods: app=banking-app 

Symptoms:

Pods 1/1 Running Service exists Application unreachable No expected Service backend 

Student must compare:

kubectl describe svc kubectl get pods --show-labels kubectl get endpointslice 

Incident 4 — Readiness Probe Failure

Break:

readinessProbe: httpGet: path: /does-not-exist 

Expected:

Running 0/1 

Student must explain:

Running ≠ Ready.

Use describe to find probe failure.

Fix/rollback and verify readiness and Service routing.

Incident 5 — OOMKilled

Configure a workload with insufficient memory or a controlled memory-hungry training application.

Student must find:

RESTARTS ↑ ↓ CrashLoopBackOff ↓ describe ↓ Last State ↓ OOMKilled 

Then:

kubectl logs <pod> --previous 

Explain why simply increasing memory may only be mitigation if the application has unbounded memory growth.

Incident 6 — Dependency Failure

Application logs:

Cannot connect to database/Kafka 

Student is not allowed to say:

“Kafka is down.”

until proven.

Investigate:

DNS Service EndpointSlice Port NetworkPolicy Authentication Dependency health Application configuration 

Interview statement:

“The log proves the application cannot connect to the dependency; it does not by itself prove the dependency is down.”

Incident 7 — PVC Pending

Break storage provisioning.

Expected:

Pod Pending ↓ PVC Pending ↓ Events ↓ StorageClass ↓ CSI ↓ Cloud permissions/storage 

Students must walk the entire storage dependency chain.

Incident 8 — RBAC Forbidden

Make a ServiceAccount attempt:

kubectl delete pod ... 

Expected:

Forbidden 

Student investigates:

kubectl auth can-i ... 

Then Role/RoleBinding.

They must explain:

Authentication succeeded but Authorization denied 

A Forbidden response is different from a network failure.

Incident 9 — NetworkPolicy Blocks Traffic

Create:

frontend → payment ✗ 

because NetworkPolicy blocks the connection.

Students must prove:

Pods Running Service exists Endpoints exist DNS may work BUT network connection blocked 

Then inspect:

kubectl get networkpolicy kubectl describe networkpolicy 

They must explain why restarting the application doesn't fix the policy.

Incident 10 — Argo CD OutOfSync / Configuration Drift

Git says:

replicas: 3 

Manually change live cluster:

kubectl scale deployment banking-app \ --replicas=1 \ -n production 

Observe Argo CD.

Students explain:

Git desired state ≠ Live state → OutOfSync 

Restore desired state through the GitOps workflow/reconciliation.

Explain why uncontrolled manual production changes are dangerous.

PART 22 — For Every Incident, Use the Same Professional Method

Students may not begin with random commands.

Every recording must follow:

1. ALERT / TICKET 2. CUSTOMER IMPACT What is broken? 3. SCOPE Which application/service/environment? 4. WHAT CHANGED? Deployment? Config? Traffic? Infrastructure? 5. OBSERVE Metrics Logs Events Traces 6. HYPOTHESIS What might explain the evidence? 7. PROVE / DISPROVE Collect evidence. 8. ROOT CAUSE What actually caused the problem? 9. MITIGATION / FIX Restore service safely. 10. VERIFY Prove service is healthy. 11. RCA Why did this happen? How do we prevent recurrence? 

The sentence I want every student to learn is:

“I don't want to guess the root cause. I form a hypothesis and validate it with evidence.”

PART 23 — Production Verification

After every fix, students must prove recovery.

They cannot say:

“The command succeeded, so production is fixed.”

They must check the relevant layers:

Deployment healthy ↓ Pods Ready ↓ Restart count stable ↓ Service backend healthy ↓ Application responds ↓ Errors normal ↓ Latency normal ↓ Critical customer flow works 

PART 24 — Git Repository Requirements

Repository should look professional.

For example:

banking-platform/ │ ├── README.md │ ├── docs/ │ ├── architecture.md │ ├── troubleshooting.md │ └── incidents.md │ ├── helm/ │ └── banking-app/ │ ├── Chart.yaml │ ├── values.yaml │ ├── values-dev.yaml │ ├── values-staging.yaml │ ├── values-prod.yaml │ └── templates/ │ ├── argocd/ │ ├── dev.yaml │ ├── staging.yaml │ └── production.yaml │ └── kubernetes/ ├── rbac/ ├── network-policy/ ├── storage/ └── troubleshooting/ 

README should explain architecture, environments, deployment process, security controls, availability, scaling, storage, GitOps and troubleshooting.

PART 25 — Required Video Recording

I would require approximately 45–60 minutes, but quality matters more than exact duration.

Tell students:

Do not read definitions from Google or from your notes. Share your screen and explain your own environment as though I am the interviewer.

The recording must show and explain the full lifecycle:

Architecture ↓ AWS / EKS ↓ Dev / Staging / Production ↓ Docker Image / ECR ↓ Deployment / ReplicaSet / Pods ↓ Resources / Probes ↓ Service / EndpointSlice ↓ Ingress ↓ ConfigMap / Secret ↓ RBAC ↓ NetworkPolicy ↓ HPA / PDB ↓ Scheduling ↓ StatefulSet / PV / PVC / StorageClass / CSI ↓ Helm ↓ Argo CD / GitOps ↓ Observability ↓ 10 Production Incidents ↓ RCA / Verification 

At random points in the recording they should be able to answer:

Why did you configure it this way?

That is more important than merely showing YAML.