Cases5 cases
1 to 5 of 5
IL-0102CoreDNS pods on a production EKS cluster ran out of memory under a burst of new pods, endpoints and nodes, taking down the Buildkite web UI, APIs and job dispatchBuildkite2026- Symptoms
From 22:47 UTC on 25 August 2026 the Buildkite web interface, REST API, Agent API, job queue and notifications stopped working for every customer. No one could create a build from the UI or the REST API, job dispatch was delayed, and some builds that were already running when the outage began stayed stuck until the services recovered.
- Trigger
At 22:44 UTC an application deploy created a surge of new pods, which used up the free capacity on the existing nodes and made the EKS cluster scale out. Background worker pools with unusually high maximum replica counts were scaling out at the same time and kept asking for more pods while new nodes were still being provisioned. Together they produced an unusually high rate of change in applications, network endpoints and nodes, and with it a sudden rise in demand on CoreDNS.
- Root cause
- Component
- Contributing factor
- Detection
The first status post, at 22:55 UTC, eight minutes after the outage began, said something had gone wrong, and at 23:05 UTC the status page said a sitewide outage was being investigated. CoreDNS query duration had been rising as the cluster grew, but a defect in a key monitoring query and too little monitoring of query volume meant this went unnoticed before the outage.
- Remediation
- paused further application deploys
- scaled CoreDNS from three to twelve pods
- raised each CoreDNS pod's memory limit from 512 MiB to 2 GiB
- expanded the system node pool that runs CoreDNS
- Action items
- Increase immediate CoreDNS headroom: twelve pods instead of three, a 2 GiB memory limit instead of 512 MiB, and a larger system node pool
- Enable EKS-managed CoreDNS autoscaling with a tested minimum replica count and enough capacity to spread the replicas across nodes and availability zones
- Add direct alerts on CoreDNS query duration, query volume, goroutine growth, memory pressure, OOM restarts and available replicas, and track longer-term trends in capacity planning
- Find other cluster-critical services that lack tested capacity, direct alerting, spread across failure domains, and either safe autoscaling or documented static headroom, and fix them
- Lessons
A CoreDNS deployment sized once and left at a fixed size can carry a growing cluster for months and then fail on the first burst of churn it cannot absorb. When query processing slows, pending queries take up memory, the pods hit their limits and restart, and client retries keep the service down after the restart. Server-side DNS query duration and volume need their own alerts: here client-side latency was masked by unrelated application speed-ups, and a broken monitoring query hid the server-side trend. Maximum replica counts raised as a temporary measure remove the cap that normally stops runaway scaling when new nodes are slow to arrive.
IL-0082Losing one CoreDNS pod during a planned EKS node reroll overloaded the remaining CoreDNS pods, causing DNS timeouts and errors across multiple services at RebelMouseRebelMouse2025- Symptoms
At 13:42 UTC on 19 May 2025, RebelMouse's monitoring tools reported a higher error rate and degraded performance across services. A routine reroll of the EKS nodes had started 27 minutes earlier, at 13:15 UTC.
- Trigger
At 13:15 UTC RebelMouse started its regular reroll of EKS nodes to apply security patches. The planned, automatic termination of an EC2 instance terminated one of the CoreDNS pods.
- Root cause
- Component
- Contributing factor
- Detection
Monitoring tools detected an increased error rate and degraded service performance at 13:42 UTC, and the tech team started investigating at 13:44 UTC.
- Remediation
- rescheduled the affected CoreDNS pod onto a new EC2 instance
- scaled up the CoreDNS deployment to more replicas so DNS load was spread evenly across all pods
- Action items
- Add scale-in protection so CoreDNS pods are not terminated unexpectedly during peak load
- Review the CoreDNS configuration so that vertical scaling of the pods works
- Hold regular capacity reviews so the CoreDNS deployment is provisioned for peak load
IL-0027All CoreDNS pods landed on one node, the node ran out of memory, and DNS for the whole service went downBackpackr2025- Symptoms
Services on the production Amazon EKS cluster behind the idus marketplace threw intermittent errors whose cause was hard to pin down. Calls to external services such as RDS and Redis failed now and then, and whenever DNS traffic spiked, domain lookups answered slowly or failed outright.
- Trigger
All CoreDNS pods were scheduled onto the same node, and that node's memory usage spiked until it ran out of memory.
- Root cause
- Component
- Contributing factor
- Detection
The write-up does not say how the full outage was noticed. The earlier DNS trouble showed up as intermittent service errors, and investigating failed calls to RDS and Redis led to DNS resolution failures.
- Remediation
- deployed NodeLocal DNSCache as a DaemonSet in front of CoreDNS
- added a PodDisruptionBudget (maxUnavailable 1) and topologySpreadConstraints across zones for CoreDNS
- lowered ndots from 5 to 2 with dnsConfig in the Deployments
- Lessons
The CoreDNS setup that EKS creates by default (two pods) can be enough for a small or development cluster but becomes a bottleneck in a large production cluster, and DNS is a single point of failure that needs high availability and room to scale. Tuning the CoreDNS cache and buffer size only relieved the symptoms; the real load came from the extra queries that ndots:5 generates for external names. A CoreDNS pod without a memory limit can share a node's fate with everything else on it.
IL-0230kube-proxy sync failures during a Kubernetes upgrade corrupted node iptables, and CircleCI jobs stopped startingCircleCI2023- Symptoms
On 14 March 2023 at about 18:00 UTC, communication errors rose on one CircleCI service, and pipelines for all customers began to start late until jobs did not run at all. Within an hour the errors had spread to many services and to every function of the application, including the CircleCI UI and API.
- Trigger
At about 17:40 UTC on 14 March the infrastructure team resumed the upgrade of the main production Kubernetes cluster with a changed approach for some components, after a first attempt on 13 March had been rolled back. The ongoing upgrade left kubelet and kube-proxy at mismatched versions.
- Root cause
- Component
- Contributing factor
- Detection
At 18:00 UTC engineers saw communication errors rise on one service, then job processing delays climbing and job queues backing up across several services. The kube-proxy "Sync failed" errors were found only in the analysis after the incident.
- Remediation
- Restarted every node in the cluster so each node built a fresh iptables ruleset
- Restarted a separate pool of dependencies so jobs using contexts or the machine executor ran again
- Added capacity to work through the backlog of jobs
- Restarted the RabbitMQ nodes to fix a few corrupted queues
- Action items
- Improve the Kubernetes upgrade process to limit the risk of future upgrades
- Add metrics and alerts for kube-proxy sync errors
- Evaluate ways to make the RabbitMQ infrastructure more resilient
- Lessons
No single trigger caused the incident. Because networking underlies everything in the cluster, Kubernetes upgrades carry inherent risk, and CircleCI's risk mitigation did not hold up when several events interacted.
IL-0517Gitpod workspaces failed to start worldwide and lost data when CoreDNS lookups to 8.8.8.8 timed out in its clustersGitpod2022- Symptoms
At around 5.44pm UTC on 25 January 2022, Gitpod saw a high error rate when pulling images from Google Container Registry (gcr.io), with the error "cannot get manifest". About 10 minutes later users reported that they could not start workspaces.
- Root cause
- Component
- Contributing factor
- Detection
The team noticed a high error rate on image pulls from GCR at around 5.44pm UTC; about 10 minutes later users reported that workspaces would not start, and the on-call team started incident response.
- Remediation
- Created new workspace clusters in the EU and the US with a werft job
- Redirected traffic to the new clusters
- Action items
- Keep workspace data on cloud provider persistent volumes that survive node and cluster failures
- Let users download their files from a workspace that cannot be started
- Improve the workspace backup process
- Use three DNS servers instead of one: a GCP-internal one, 8.8.8.8 and Cloudflare's 1.1.1.1
- Do more DNS resiliency work, tracked in an epic
- Improve support for multi-region clusters and later go multi-cloud
These 5 cases involve CoreDNS and Node pool. kubegap audits a Kubernetes cluster for gaps like these, read-only, from Claude Code or Codex; its checks cite public reports like the ones in this library.
By root cause3
Capacity exhaustion3 cases
- Component
- Contributing factor
- Organisation
IL-0102CoreDNS pods on a production EKS cluster ran out of memory under a burst of new pods, endpoints and nodes, taking down the Buildkite web UI, APIs and job dispatchBuildkite2026IL-0082Losing one CoreDNS pod during a planned EKS node reroll overloaded the remaining CoreDNS pods, causing DNS timeouts and errors across multiple services at RebelMouseRebelMouse2025IL-0027All CoreDNS pods landed on one node, the node ran out of memory, and DNS for the whole service went downBackpackr2025
Breaking change in an upgrade1 case
- Organisation
DNS or network fault1 case
- Contributing factor
- Organisation