Thirty minutes on what "production-ready" actually means and how real teams package it — then eighty minutes building it yourself, from a blank folder.
Production checklistHelm & KustomizeGitOpsManaged KubernetesCapstone lab
Session 10 · a different rhythm
How today runs
1 · Production-ready (30 min)
The checklist every workload owes the platform: probes, resources, security context, PDB, HPA, config and secrets, labels, namespace guardrails.
2 · Packaging & delivery
Helm charts, values and releases · Kustomize bases and overlays · GitOps with Argo CD or Flux · what changes on a managed cluster.
3 · Demo · then a 10 min break
helm install ingress-nginx and kubectl apply -k overlays/dev, side by side on the same cluster.
4 · Capstone (80 min)
Deploy the whole of Pinboard into pinboard-prod from an empty folder and score yourself with verify.sh.
01
The production-ready checklist
Nine sessions of objects, arranged into the list you actually run down before a release.
The list
What "production-ready" means
Health
Startup, readiness and liveness probes. Without readiness, every rolling update is a small outage.
Resources
Honest requests so the scheduler can do its job, plus a memory limit so one Pod can't take the node.
Security
Non-root, read-only root filesystem, all capabilities dropped — inside a restricted namespace.
Availability
More than one replica, a PodDisruptionBudget for drains, an HPA for load.
Config & secrets
Nothing baked into the image: ConfigMap for settings, Secret for credentials.
Identity
app.kubernetes.io/* labels, its own namespace, ResourceQuota and LimitRange around it.
Install a third-party component from a chart, then roll out our own manifests through a Kustomize overlay — two packaging styles, one cluster, five minutes.
What you'll see · helm template → install → list · overlay diff → applyFiles · demos/session10/, labs/solutions/final/*.yamlDuration · 8 min
Reality check
Managed Kubernetes: what changes
LoadBalancer works
A type: LoadBalancer Service gets a real cloud load balancer and a public IP. On kind it stays <pending> forever — that is why we used an Ingress with port mappings.
StorageClass is real
The default class provisions cloud disks (gp3, Premium SSD, PD). They are zonal — a Pod follows its volume. Set reclaimPolicy deliberately.
IAM meets RBAC
A ServiceAccount can be a cloud identity: EKS Pod Identity/IRSA, GKE Workload Identity, AKS workload identity. No static cloud keys in Secrets.
Upgrades are yours
The control plane is managed; node pools are not. Rolling node upgrades drain nodes — which is exactly when your PDB and probes get tested.
After the course
Where to go next
Certifications
KCNA to consolidate vocabulary · CKAD if you ship apps · CKA if you run clusters. Both CK* exams are hands-on with the docs open.
Read the source
kubernetes.io/docs — Concepts and Tasks are genuinely good. Keep kubectl explain and the API reference within reach.
Keep your hands on
killercoda scenarios · Play with Kubernetes · or just kind create cluster — a throwaway cluster is thirty seconds away.
The fastest way to keep this: take one real service at work and walk it down today's checklist. Everything else is practice.
Capstone · 80 min
Deploy Pinboard into pinboard-prod — from a blank folder
No copy-paste from the solutions. Start with an empty directory and build the whole stack down the checklist, then run labs/capstone/verify.sh and read your scorecard.
The checklist: namespace + PSA labels + ResourceQuota + LimitRange · Secret + ConfigMap · StatefulSet DB with a headless Service and a 1 Gi PVC · API Deployment with three probes, resources, securityContext, PDB and HPA · web Deployment · ClusterIP Services · Ingress on pinboard.localtest.me · a smoke-test Job. Stretch: Kustomize dev/prod overlays · NetworkPolicy web → api → db · Helm-ify it.
Session 10
Key takeaways
Production-ready is a checklist
Probes, resources, security context, PDB, HPA, config separation, labels and namespace guardrails — every time, no exceptions.
Package, don't copy
Helm for software you consume, Kustomize overlays for manifests you own. Render before you apply.
Let the cluster pull
GitOps makes Git the desired state and the audit trail; drift gets reconciled instead of discovered.
It all transfers
Managed clusters change LoadBalancers, StorageClasses, IAM and upgrades. The objects you wrote today are the same everywhere.
Thank you
Twenty hours, one small app, and a cluster you can rebuild in thirty seconds. Keep the repo, keep the checklist — and go ship something.