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

Cases2 cases

1 to 2 of 2

  1. Symptoms

    The on-call engineer for a high-traffic service was alerted that requests were failing in large batches every 30 seconds.

    Trigger

    DEBUG level logging was on in production when traffic surged, raising log volume to about 100 times normal while the service logged synchronously.

    Root cause
    Component
    Contributing factor
    Detection

    The on-call engineer was alerted that requests were failing in large batches every 30 seconds.

    Action items
    • Replace synchronous logging with TraceAwareAsyncAppender, which captures trace_id and span_id on the calling thread and drops logs instead of blocking when the queue is full (neverBlock=true)
    • Keep the amount of log output at a sustainable level, since an asynchronous queue still fills under sustained overload
    Lessons

    Removing AsyncAppender to keep trace IDs also removed the protection that kept request threads away from stdout back-pressure. A company-wide standard applies the same side effect to dozens of services, so check what a standard rests on and what working behaviour it takes away. ThreadLocal context does not cross into an asynchronous worker, but capturing it on the calling thread before handing the event off keeps both the IDs and the asynchronous output. Under extreme load, dropping log lines is preferable to stopping request handling.

  2. Symptoms

    At around 2 AM ICT on 2023-04-09 the team saw unusual CPU use on one cluster node, which throttled every other service on it and made them fail. They presumed an upstream container runtime bug in containerd and runc and decided to fully reboot the affected nodes, taking the cluster down for maintenance on the assumption that it was not in active use.

    Trigger

    A full cold reboot of the nodes that showed unusual CPU use, followed by upgrades and cold reboots of the other nodes.

    Root cause
    Component
    Contributing factor
    Detection

    The team saw unusual CPU use on a node around 2 AM ICT and failing services on the rebooted nodes around 2:30 ICT; developers reported the Terra repositories down at 6:31 ICT.

    Remediation
    • uninstalled Multus and Calico and replaced them with the Cilium CNI
    • rolled back most cluster settings except the CNI
    Lessons

    Rebooting nodes to clear one problem can expose another; here a CNI chain could not reach the API server after a cold start. Repeating the same reboot on more nodes while the first failure was not understood spread the outage from a few nodes to the whole cluster. The team also found that Cilium's real resource use in their cluster was acceptable, contrary to the benchmark they had relied on.

Check your cluster for this

These 2 cases involve Container runtime and Calico. 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