Production Kubernetes Readiness Checklist
A practical, battle-tested checklist for taking a Kubernetes workload from 'it runs' to 'it's production-ready', reliability, security, observability, and cost.
Production Kubernetes Readiness Checklist
"It works on my cluster" is not the same as production-ready. This checklist is what I actually walk through before signing off on a workload going live. It pairs with the gitops-kubernetes-platform and observability-stack reference repos.
1. Workload health
- Liveness, readiness, and startup probes defined for every container.
- Readiness probe gates traffic; liveness probe restarts only on true deadlock.
-
terminationGracePeriodSecondsset, and the app handlesSIGTERMto drain. -
preStophook where needed (e.g. deregister from a load balancer first).
2. Resource management
- Requests and limits set on every container, no unbounded pods.
- Requests reflect real usage (measured, not guessed).
- A
LimitRangeandResourceQuotaper namespace. - HPA configured for variable load; tested against a real traffic profile.
3. Resilience
-
replicas >= 2for anything that must stay available. - PodDisruptionBudget so voluntary disruptions don't take the service down.
- Pod anti-affinity / topology spread across nodes and zones.
- Rolling update strategy with sane
maxSurge/maxUnavailable.
4. Security
- Run as non-root;
readOnlyRootFilesystem: truewhere possible. - Drop all Linux capabilities, add back only what's needed.
-
securityContextand a Pod Security Standard (restricted) enforced. - NetworkPolicies: default-deny, then allow only required traffic.
- Secrets from a real store (Vault / External Secrets), not plain
Secretmanifests. - Images scanned (Trivy) and ideally signed (cosign), see the devsecops-starter-kit.
5. Observability
- Metrics exposed and scraped (Prometheus) with useful labels.
- Structured logs shipped to a backend (Loki).
- Traces for request flows (Tempo / OpenTelemetry).
- SLOs defined and alerting on burn rate, not just raw thresholds.
- Dashboards exist before launch, not after the first incident.
6. Delivery
- GitOps: the cluster state lives in Git, reconciled by ArgoCD/Flux.
- Automated rollback path tested (not just documented).
- Progressive delivery (canary/blue-green) for high-risk services.
7. Cost
- Right-sized nodes; consider Karpenter/Cluster Autoscaler.
- Spot instances for fault-tolerant workloads.
- Idle/oversized resources flagged and reviewed regularly.
The one question that matters
Before launch, ask: "What happens at 3am when this breaks, and can the on-call engineer fix it from the runbook?" If the answer is unclear, you're not done yet.