Incident Library

IL-0548 Buildkite · 2026-05-20kubernetesawsobservability

Buildkite's EKS Prometheus server was killed for memory again and again, so services stopped scaling and jobs lagged

Buildkite was moving its production workloads from AWS Fargate to AWS EKS in small batches so it could check stability along the way. On 20 May 2026, between 15:42 and 17:33, autoscaling raised the number of pods that the EKS Prometheus server tracked, and Prometheus came to need more memory than the host it ran on had. The host killed the Prometheus process and the Kubernetes control plane restarted it shortly after, but Prometheus soon used up the host's memory again and the cycle repeated. Each time, the metrics used for application autoscaling were unavailable, so the affected services were not scaled up and notification delivery, build dispatch and metrics were delayed.

The on-call team followed prepared documentation to move the load of the affected services back to Fargate, and most customers had fully recovered from 16:49. A handful of customers with a very large backlog had to be scaled up further by hand, and all customers had recovered by 17:33. Buildkite then made the system nodes larger, gave Prometheus higher requests and limits, set missing requests and limits on all new EKS resources and added monitoring for EKS pod and node health, and later moved the services back to EKS, where scaling went well past the limits met in this incident.

Severity
–
Scope
Elevated latency in notification delivery (GitHub commit status, email, Slack and webhook notifications), build dispatch and metrics services
Users affected
A subset of Buildkite customers
Region
–
Time to detect
–
Time to resolve
1h 51m

Symptoms

On 20 May 2026 a subset of Buildkite customers saw delays in notification delivery, build dispatch and the metrics services. The status page first reported delays to notifications for all customers and later narrowed it to a subset of customers.

The affected notifications were GitHub commit status, email, Slack and webhook notifications. Behind the delays, the Prometheus server on Buildkite's EKS cluster needed more memory than its host had, the host killed the process, and the Kubernetes control plane restarted it. While Prometheus was down, the metrics that drove application autoscaling were missing, so the services did not scale up. Soon after each restart Prometheus ran out of the host's memory again and the cycle repeated, from 15:42 to 17:33.

A few customers built up such a large backlog during the slow period that their services had to be scaled up further by hand.

Symptom High latencyOOMKilledMonitoring outageAutoscaler misbehaviour

Root cause

Trigger
Autoscaling during Buildkite's migration of production services from AWS Fargate to AWS EKS raised the number of pods that Prometheus tracked, and with it the memory the Prometheus server needed.

Detection

–

Remediation

Action items

Lessons

–

Sources

Related cases

Check your cluster for this

kubegap audits a Kubernetes cluster for conditions like the ones in this case, Prometheus, Container memory limit, Node pool among them, read-only, from Claude Code or Codex. Its checks cite public reports like this one.

For AI tools and scripts

The API needs no key. The MCP server offers search_incidents, get_incident, list_incidents, get_topic and vocab; both are explained on API and MCP.