A microservices app — React frontend → Go API → MongoDB replica set — deployed to Kubernetes with Helm, Kustomize, HPA, NetworkPolicies and a 3-node StatefulSet. Cast a vote below, then drive the live cluster: scale pods, kill them to watch Kubernetes self-heal, roll out a new version, and ramp traffic to trigger autoscaling.
| Problem in the original | Fix |
|---|---|
Services selected app: api but pods were labelled role: api — the Services matched zero pods and routed no traffic. | Standardized on app.kubernetes.io/* labels with matching selectors. |
Replica set needed a manual rs.initiate(). | Added an idempotent Job that initializes rs0 automatically. |
| No resource requests/limits → no autoscaling possible. | Requests/limits everywhere + HorizontalPodAutoscalers. |
Two paid cloud LoadBalancer Services. | One Ingress (/→frontend, /api→api). |
| Flat networking — anything could reach Mongo. | NetworkPolicies: default-deny + least-privilege flows. (Caught a real bug: the init-Job was blocked — found it on a live kind cluster.) |
| No availability guarantees on node drains. | PodDisruptionBudgets keep Mongo quorum + web ≥1. |
| Single hard-coded environment. | Kustomize dev/prod overlays + a parameterized Helm chart. |
| No automated checks. | GitHub Actions CI: helm lint + kubeconform on every push. |