Incident Library
Applied filters SymptomAutoscaler misbehaviourFactorIneffective rollbackClear allEvery case under the filters, with no sentence; newest first.
Suggested filters Search, and the values found in your words appear here.

Graph

  • Root cause
  • Component
  • Symptom
  • Contributing factor
  • Case

Cases2 cases

1 to 2 of 2

  1. Symptoms

    From 20:01 UTC on 28 May 2026, Buildkite build and job notifications (GitHub commit status, email, Slack and webhook notifications) reached a subset of customers late. Internal queue latency monitoring showed the delay as queues grew while notification-processing workers stayed underprovisioned.

    Trigger

    The Prometheus service used by Buildkite's EKS autoscaling path ran out of storage, so some EKS-based notification workers could not autoscale while their queues were growing.

    Root cause
    Component
    Contributing factor
    Detection

    Internal queue latency monitoring detected the rising notification delivery latency.

    Remediation
    • Moved the affected notification-processing workloads from EKS back to the ECS-based infrastructure
    • Adjusted scaling configuration and worker counts by hand
    • Completed the rollback and scaled the remaining affected ECS services
    • Increased Prometheus storage capacity and recorded the change in infrastructure as code
    Action items
    • Alert before Prometheus storage exhaustion can affect autoscaling
    • Fix GitHub notification retry behaviour for a class of errors that could cause repeated retries
    • Make the EKS-to-ECS rollback verify destination capacity, autoscaling configuration and traffic movement
    • Review the CPU, memory and storage allocations of EKS control-plane dependencies such as KEDA and Karpenter
    • Move customer-critical workloads to EKS more gradually, with clearer settling periods
    • Improve customer-level monitoring of notification delivery latency to detect customer-impacting regressions earlier
    • Review which notification types sit on customers' scheduling or CI hot path and need tighter latency, separate queueing or specific alerting
    • Update the status page earlier when notification latency is likely to affect customer workflows
    • Describe the customer-visible impact in status page updates, not only the affected internal service
    • Improve internal escalation for customers who report critical CI impact
    Lessons

    Buildkite said recovery took longer than expected because the rollback path from EKS to ECS did not fully handle this failure, and that its public status page did not show the customer-visible impact as quickly or clearly as it should have, since notification latency affects customers differently depending on how their CI and deployment workflows use notifications.

  2. Symptoms

    On 2 August 2024, two minutes after Clever Cloud's data team started a minor rolling upgrade of its Apache Pulsar messaging cluster to release 3.3.1, monitoring showed connection problems with the messaging platform. Producing data into the event bus failed, the backlog grew while no new producers or consumers succeeded, and agents on hypervisors, log forwarders on load balancers and deployments were affected. At 10:20 CEST the Pulsar cluster was declared defective.

    Trigger

    At 10:06 CEST the data team began a minor rolling upgrade of Apache Pulsar to release 3.3.1 that also switched on a new balancer for bundle placement: the extensible load manager (loadManagerClassName=org.apache.pulsar.broker.loadbalance.extensions.ExtensibleLoadManagerImpl) with the TransferShedder load shedding strategy instead of the native OverloadShedder.

    Root cause
    Component
    Contributing factor
    Detection

    Monitoring showed connection issues to the messaging platform at 10:08 CEST, two minutes after the upgrade began, and engineers confirmed at 10:09 that producing data into the event bus failed. Monitoring did not catch the first broker's failure to create the system topic, because that broker stayed up.

    Remediation
    • Rolled back the new unload strategy while keeping Pulsar 3.3.1
    • Shut down the client proxies to release the brokers
    • Switched deployment notification events to RabbitMQ as a workaround
    • Stopped all brokers and started only one, which loaded the conflicting system topic so it could be deleted, then started all brokers
    • Restarted the messaging proxies, after which messages flowed again
    • Stopped the watchdog so it would not reload every failed component, and started components one by one
    • Disabled Metrics API ingestion to protect its storage cluster
    • Stopped the long-term storage for observability metrics (the Warp10/FoundationDB cluster) to free resources
    • Put all monitoring instances in all regions into maintenance so they stopped sending events to the orchestrator
    • Killed the overloaded small VMs one by one
    • Flagged 12 hypervisors to drain workload and shut down some load balancers to free CPU and memory
    • Cleaned zombie VMs to speed up recovery
    • Cleared the monitoring alert queue so queued events would not flood the orchestrator
    • Added parked hypervisors to EU-FR-1 to relieve the overloaded ones
    • Removed an overloaded RabbitMQ node from the cluster used by the orchestrator
    • Rolling-restarted every regional L7 load balancer and every L4 load balancer
    • Restarted all HV agents and the add-on provider APIs
    • Destroyed all dangling VMs stuck in the stopping state
    • Re-enabled Metrics API ingestion with a ramp-up QoS policy
    Action items
    • Track KPIs for Pulsar broker and cluster health, hypervisor load, I/O and kernel panic reboots, zombie VMs, RabbitMQ broker and cluster health and deployment queue consumption, each by time of event, detection, decision and resolution
    • Deal with too many monitoring alerts
    • Look at a backup bastion, because a regional bastion is vulnerable
    • Rework the control plane recovery process
    • Rework the correlation between monitoring and orchestration
    • Revisit fault domain separation against multi-tenancy
    • Rethink runtime images and the role of the hypervisor
    • Isolate waved release upgrades of Pulsar
    • Redesign runtime images with better hypervisor integration
    • Regionalise observability for redundancy
    • Set Vector's buffer.max_events and buffer.max_size for small VMs
    • Switch Vector's buffer.type from memory, the default, to disk
    • Change Vector's buffer.when_full from block, the default, to drop_newest
    • Tune journald verbosity and SystemMaxUse on small VMs
    • Add cgroups restrictions for better process control
    • Add I/O restrictions for the VM manager
    • Detect zombie VMs better
    Lessons

    The simulation process that validates non-minor releases was not applied to minor upgrades or to small configuration changes, and this one went straight to production. Running Clever Cloud on Clever Cloud turned into a chicken-and-egg situation: recovery needed the scheduler to carry out large actions while the control plane was itself slowed and the infrastructure had no free resources. Measuring each key indicator by time of event, detection, decision and resolution showed where the team had lacked visibility or reaction and challenged established rules.

Check your cluster for this

These 2 cases involve Automated capacity manager and Linux kernel. 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 cause2