Production EKS Platform with SRE Observability
AWS EKS · Karpenter · Prometheus · Grafana · GitOps

The Challenge
m5.xlarge On-Demand instances with no autoscaling. During traffic spikes, pods would queue in Pending state because the node group had no capacity headroom and took four to five minutes to scale. The payment service JVM was configured with a 512MB heap inside a container with a 512MB memory limit, leaving zero room for off-heap allocations like thread stacks, NIO buffers, and garbage collection overhead. Every checkout spike triggered OOMKilled events. When pods crashed, Kubernetes rescheduled them but startup took forty-five seconds due to JVM warmup, causing visible outages. No liveness probes existed, so zombie pods that were technically running but not responding to requests stayed in the ALB target group rotation. The only monitoring was CloudWatch container insights with five-minute aggregation granularity, meaning the team discovered outages from customer complaints, not alerts. There were no SLO definitions, no error budgets, and no structured incident response process.The Approach
512MB but the container limit is 768MB, giving 256MB of headroom for off-heap memory. Liveness probes hit the /health endpoint every ten seconds with a three-failure threshold before Kubernetes kills the pod. Readiness probes gate on database connectivity so pods only enter the ALB target group after confirming they can serve traffic. PodAntiAffinity rules prevent two replicas of the same service from landing on the same node, so a single node failure never takes out all replicas. Pod Disruption Budgets enforce minAvailable during rolling updates and voluntary node drains. The observability stack replaced CloudWatch entirely. Prometheus scrapes all twelve services at fifteen-second intervals, collecting 847 metric series. Grafana dashboards show the four golden signals: request rate, error rate, latency percentiles, and saturation. Alertmanager routes critical alerts like error rate above five percent for two minutes to PagerDuty, and warnings like pod restart count above three to Slack. Sentry captures application errors with full stack traces, source maps, and release tags tied to the Helm chart version. The CI/CD pipeline uses GitHub Actions with Helm: pull requests trigger lint, diff, and dry-run against the staging cluster. Merges to main auto-deploy to production with a five-minute health check window. If readiness probes fail during the rollout, Helm automatically rolls back to the previous release.System Architecture
EKS Platform Architecture
EKS Platform Architecture
Multi-AZ Kubernetes with Karpenter autoscaling and full SRE observability. Click a node to view details.
Interactive Demo
Interact with the simulation below. It replicates the actual engineering scenario.
Overview
p99. The full SRE observability stack runs Prometheus for metrics collection, Grafana for dashboards, Alertmanager for incident routing to PagerDuty and Slack, and Sentry for application-level error tracking with source maps. Helm charts with GitHub Actions GitOps handle deployments through dev, staging, and production environments with automated rollback on failed health checks.Business Impact
Technical Highlights
- 12 microservices across 3 AZs with PodAntiAffinity rules preventing same-node co-location of critical replicas
- Karpenter node provisioning replacing static managed node groups, mixing On-Demand and Spot instances for 40% cost reduction
- HPA scaling on CPU at 80% threshold and custom Prometheus metrics including request latency p99 and queue depth
- Pod Disruption Budgets enforcing minAvailable during rolling updates and node drains
- Liveness probes checking /health every 10 seconds with 3-failure threshold, readiness gates on database connectivity
- Prometheus scraping 847 metric series across all services with 15-second intervals and 30-day retention
- Grafana dashboards with SLI panels: request rate, error rate, latency p50/p95/p99, saturation, and pod restart count
- Alertmanager routing critical alerts to PagerDuty, warnings to Slack, with 5-minute group wait and deduplication
- Sentry integration capturing full stack traces, source maps, and release tracking per Helm deployment
- Helm charts with GitHub Actions GitOps: lint, diff, dry-run on PR, auto-deploy on merge, rollback on probe failure
- Container memory right-sizing: JVM heap at 512MB with container limit at 768MB for off-heap headroom, eliminating OOMKilled events
- Network policies restricting pod-to-pod traffic to only declared dependencies, default-deny ingress
Frequently Asked Questions
Q: What was the primary goal of the EKS platform upgrade?
The goal was to build a standardized Kubernetes environment on AWS EKS with GitOps workflows, dynamic autoscaling, and centralized monitoring for microservices, ensuring high uptime and structured deployment runbooks.
Q: How was cost-efficient scaling achieved?
We configured Karpenter and Cluster Autoscaler to provision instances based on real-time resource demands. By utilizing AWS Spot instances for non-production environments and optimizing resource requests/limits, we reduced compute overhead by 25%.
Q: How was monitoring and alerting structured?
We deployed Prometheus and Grafana, defining clear SLIs/SLOs. We configured customized Alertmanager groups with Prometheus metrics to trigger PagerDuty alerts only for critical anomalies, reducing page fatigue by 50%.
Want results like this for your infrastructure?
I specialize in taking complex AI pipelines and cloud setups from concept to high-availability production. Let's discuss how to optimize your workloads, secure your environment, and reduce cloud costs.