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

Cases10 cases

1 to 5 of 10

  1. Symptoms

    From 14 to 16 March 2026 a subset of customer control planes on IONOS Managed Kubernetes (MK8s) became unavailable again and again, each time for several minutes. While a cluster was unreachable, operations that depend on the Kubernetes API, such as deployments, scaling and health checks, did not work reliably.

    Root cause
    Component
    Contributing factor
    Remediation
    • Defragmented the affected database instances, reclaiming about 3–4 GiB per instance
    • Shortened the database compaction intervals on the affected instances
    • Deployed a fix for the affected AI Model Hub database services
    • Applied final changes to all affected clusters
    Action items
    • Expand monitoring dashboards to show control plane health per database instance
    • Move the highest-volume clusters to dedicated database backends
    • Make incidents of this kind trigger immediate paging
    • Roll the updated compaction interval out to all shared control plane database instances
    • Run automated, scheduled defragmentation jobs on all instances
    • Rebalance clusters across database instances to reduce concentration
    • Contact customers whose clusters write disproportionate data, for example to store large security scan reports outside the control plane database
    • Introduce per-tenant resource quotas and key-count limits on the shared control plane database
    • Re-architect the shared control plane for stronger isolation, with dedicated database instances and better vertical scaling
    • Evaluate full database sharding for customers with consistently high data volumes
    • Hold regular drills on database resource exhaustion and recovery
  2. Symptoms

    In January 2022 an etcd memory spike overloaded the Kubernetes control plane of one of Render's clusters in Frankfurt. At first only operations that need the control plane failed: new deploys and cron job runs.

    Trigger

    A memory spike in etcd overloaded the cluster's control plane.

    Root cause
    Component
    Contributing factor
    Action items
    • Run CoreDNS on data plane nodes instead of control plane nodes
    • Run etcd on dedicated nodes
    Lessons

    CoreDNS can keep answering from its in-memory cache while the API server is down, but it cannot initialise without it. With CoreDNS on the control plane nodes, a reboot or restart during a control plane outage turned a failure of deploys and cron jobs into a failure of requests to services that were already running. The core problem was that the data plane was not isolated enough from the control plane: even without the reboot, the etcd memory spike alone could have forced CoreDNS to restart.

  3. Symptoms

    At 01:04 CET on 13 February 2024, the Kubernetes API behind Scaleway's managed Kubernetes services Kapsule and Kosmos in the Paris region (FR-PAR) spiked in RAM and CPU use and ran out of memory. Nodes in FR-PAR could no longer authenticate to their control plane, and some of them went "Not Ready". Customers on both shared (mutualized) and dedicated environments were affected.

    Trigger

    A new Kubernetes release was made available to all users on 12 February 2024, and during the night of 12 to 13 February many clusters triggered their auto-upgrade at the same time.

    Root cause
    Component
    Contributing factor
    Detection

    The timeline's first entry, at 01:04 CET, records the Kubernetes API's RAM and CPU spikes and out-of-memory state, with nodes unable to authenticate to their control plane and some becoming "Not Ready". The first recorded action, 42 minutes later at 01:46, was to increase the resources allocated to the API.

    Remediation
    • increased the resources allocated to the Kubernetes API at 01:46 and again at 02:20
    • applied API traffic restrictions at 02:30 to smooth the incoming traffic
    • removed the traffic restrictions progressively in 50-100 batches from 03:20
    • ran a script at 03:40 to replace the failing nodes created during the congestion
    • rolled back to the former node authentication mechanism, first on a subset of clusters from 15:45 and on all clusters by 19:41 on 19 February
    • disabled cluster upgrade and configuration update features until 10:30 on 20 February
    Action items
    • Increase the resources allocated to the Kubernetes API
    • Roll back to the former node authentication mechanism
    • Implement a local authentication cache on nodes
    • Rework the resource allocation strategy to behave better under load spikes
    • Add new request queuing mechanisms for Kubernetes
    • Separate the different components to reduce side effects under high load or failure
    • Monitor selected metrics closely to identify anomalous patterns earlier
    • Refund customers who deployed nodes during the incident but could not use them normally
    Lessons

    Letting many clusters auto-upgrade at the same moment after a release turns routine upgrades into one coordinated load spike on the shared Kubernetes API. A node authentication mechanism that retries without letting up turns a slow API into an unavailable one, and auto-healing that replaces NotReady nodes amplifies the problem. The congestion pattern had already appeared three weeks earlier, and short-term mitigations did not stop it from recurring, so Scaleway rolled back the new authentication mechanism. Scaleway notes that as the number of customer clusters and nodes grows sharply, traffic control mechanisms have to improve to prevent congestion.

  4. Symptoms

    A tech support engineer called Palark to say that a customer's cluster, production environment included, had practically stopped working. On the control plane nodes the kube-apiserver processes had used up all the memory and were crashing and restarting over and over, so the Kubernetes API was unreachable and completely non-functional.

    Trigger

    Cilium agent pods on more than 200 nodes sent LIST requests to the Kubernetes API en masse at the same time.

    Root cause
    Component
    Contributing factor
    Detection

    A tech support engineer phoned the team to report that the customer's cluster was practically non-operational.

    Remediation
    • added CPU and memory to the control plane nodes in two steps, from 8 CPUs and 16 GB of RAM to 16 CPUs and 64 GB, until the API stabilised
    • restarted the Cilium agents in a test window agreed with the customer to reproduce the memory growth
    • deployed a FlowSchema and a PriorityLevelConfiguration named cilium-pods that limit and queue LIST requests from the Cilium service accounts to cilium.io resources
    • reduced the control plane nodes back to their original resources
    Action items
    • Make an API Priority and Fairness configuration a standard part of Palark's Kubernetes platform
    Lessons

    In a large cluster, many agents sending LIST requests at once can exhaust kube-apiserver memory, and with several API servers the crash moves from one to the next. APF can hold back such a client: a FlowSchema matches its requests and a PriorityLevelConfiguration gives them a small concurrency share and a queue, so the requests run more slowly instead of all at once. With APF enabled, the total concurrency it divides is the sum of --max-requests-inflight (default 400) and --max-mutating-requests-inflight (default 200), shared among priority levels in proportion to their assured concurrency shares, so raising one level's share lowers every other level's limit. Long-running requests such as logs and exec, and WATCH requests, are not subject to APF. The response headers X-Kubernetes-PF-FlowSchema-UID and X-Kubernetes-PF-PriorityLevel-UID show where a request landed, and the metrics Apiserver_flowcontrol_rejected_requests_total, Apiserver_current_inqueue_requests and Apiserver_flowcontrol_request_execution_seconds, with the debug endpoints /debug/api_priority_and_fairness/dump_priority_levels and /debug/api_priority_and_fairness/dump_queues, show how the queues behave.

  5. Symptoms

    At 14:11 UTC on May 25, 2023, Linode learned that part of its LKE users in the Frankfurt data center could not reach their kube-apiservers through kubectl. The status page opened at 14:27 UTC with "We are investigating reports of connectivity issues with the LKE service within the Frankfurt Datacenter".

    Root cause
    Component
    Contributing factor
    –
    Detection

    Linode was made aware of the problem at 14:11 UTC; the status page refers to reports of connectivity issues.

    Remediation
    • increased memory limits
    Action items
    • Increase resilience, redundancy and monitoring for the LKE components affected by the incident
Check your cluster for this

These 10 cases involve Kubernetes API server and etcd. 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 cause1

Capacity exhaustion10 cases

  1. IL-0464 IONOS Managed Kubernetes control planes went unreachable for minutes at a time as their shared etcd grew and fragmented
  2. IL-0204 An etcd memory spike overloaded the control plane of a Render Frankfurt cluster, and DNS then failed because CoreDNS ran on the rebooted control plane nodes and could not start without the API server
    Render2024
  3. IL-0168 Simultaneous cluster auto-upgrades overloaded Scaleway's Kubernetes API, and a node authentication retry loop kept Kapsule and Kosmos nodes NotReady in FR-PAR
  4. IL-0195 The kube-apiservers of a cluster with more than 200 nodes ran out of memory and crashed one after another under mass LIST requests from Cilium agents
    Palark2023
  5. IL-0165 Some LKE users in Frankfurt could not reach their kube-apiservers with kubectl after backend services failed under memory constraints
    Linode2023
  6. IL-0194 After a kube-apiserver restart, pod LIST requests from every pod of a Vector DaemonSet nearly tripled etcd memory and restarted all master nodes
    Palark2023
  7. IL-0002 CI builder pods could not get AWS IAM credentials because kubelet fell minutes behind its API rate limit
  8. IL-0076 Kubernetes masters went down after Dex filled etcd with AuthRequest objects and deleting its namespace started an endless list-and-timeout loop
  9. IL-0075 Kubernetes API servers pegged on CPU when the cluster grew to about 290 nodes, traced to Datadog agents polling the API
  10. IL-0031 Kubernetes API server OOM-killed, leaving the Skipper ingress without routes; the talk points to a misconfigured CronJob manifest