Cases3 cases
1 to 3 of 3
IL-0233A VPC control plane release broke IP alias routes in Nebius eu-west1, and Managed Kubernetes pods lost connectivityNebius2025- Symptoms
On 13 March 2025 practically every pod of Nebius Managed Services for Kubernetes in the eu-west1 region lost network connectivity for at least some time between 13:36 and 18:11 UTC. Packets for the affected IP alias routes were not processed by the data plane. The eu-north1 region was not affected.
- Trigger
A release of a VPC control plane component in eu-west1, deployed to canaries from 13:36 UTC and to all other nodes from 14:35 UTC, changed route distinguisher values for a new feature. The change made a long-standing bug in the handling of route announcements take effect for the update messages of Managed Kubernetes pods.
- Root cause
- Component
- Contributing factor
- Remediation
- Restarted the host VPC component on the affected nodes one node at a time
- Restarted the host VPC component on the remaining nodes in parallel once the restart was known to fix the problem
- Action items
- Fix the bug in the VPC host component itself
- Add an alert on a diverging number of routes
- Add an alert on the number of drops in the data plane
- Develop a way to reset endpoints without restarting the host VPC component
- Move the VPC's persistent e2e test virtual machines to canary hosts
- Add persistent e2e tests for Managed Services for Kubernetes
- Run e2e tests more often
- Add a deployment stage in which non-critical internal services receive updates first
- Lessons
The failure needed both an existing IP alias at release time and a particular order of node updates, and neither the testing installation nor the canaries met both, so neither caught it. Missing alerts on technical metrics that deviate from normal, here the number of routes and the number of drops, made the response much slower.
IL-0163An API change that slipped through a gap in automated testing made LKE clusters resize to the wrong number of nodes and added billable worker nodes to customer accountsLinode2023- Symptoms
Resizing an LKE cluster produced an incorrect number of nodes, so some customer clusters were resized in unexpected ways and the extra worker nodes were billed to the customer accounts. The clusters themselves kept functioning. Linode's first status update, at 05:07 UTC on 1 June 2023, advised customers to avoid resizing their clusters if possible.
- Trigger
At about 16:00 UTC on 31 May 2023 a change to the API that caused LKE clusters to scale improperly was pushed to production.
- Root cause
- Component
- Contributing factor
- Detection
The first status update, at 05:07 UTC on 1 June, said Linode had been made aware of an issue when resizing LKE clusters, about 13 hours after the change went out.
- Remediation
- advised customers to avoid resizing their clusters
- deployed a hotfix at 09:40 UTC on 1 June that corrected the scaling behaviour
- left the extra worker nodes in place to avoid disrupting customer workloads
- contacted affected customers by ticket about credit adjustments and further mitigation
- Action items
- Audit the automated tests
- Add pre-deployment checklist items so the same failure does not happen again
- Lessons
An API change that alters scaling behaviour resized customer clusters and added cost while the clusters themselves kept working; Linode announced the issue about 13 hours after the change went out. Removing the extra nodes would have disrupted workloads, so the cost was handled through credits instead.
IL-0591Gitpod workspaces in all regions became IO bound and unresponsive for days after the ws39 workspace cluster releaseGitpod2022- Symptoms
From April 11, 2022 at 13:17 UTC customers and Gitpod staff reported that Gitpod workspaces were intermittently becoming unresponsive. CPU usage of nodes and pods looked normal, with nothing maxed out, and at 13:58 UTC the team found that the workspaces were IO bound rather than CPU bound.
- Trigger
The ws39 generation of workspace clusters, released to all regional clusters on April 8th at 20:08 UTC and to the XL clusters on April 9th at 17:45 UTC, split the 1TB disk into smaller RAID0 disks, changed CPU limiting and workspace networking, and moved to faster machine types.
- Root cause
- Component
- Contributing factor
- Detection
Customers and Gitpod staff reported on April 11th at 13:17 UTC that workspaces were intermittently unresponsive, and the team opened an incident in Slack through its incident.io integration. On April 17th the team noticed increased CPU load on the workspace nodes and opened an internal incident.
- Remediation
- Shifted workspace starts back to the ws38 clusters on April 11th
- Built ws39a clusters with c2d machines and local SSDs and moved traffic to them
- Requested a limit increase from Let's Encrypt
- Routed EU XL traffic to the regional EU cluster and built ws-eu39bxl to replace the crashed ws-eu39xl
- Cleaned up workspaces stuck in a stopping state so users could start them again
- Released ws40 with 1TB boot disks to get more IO bandwidth
- Removed the workspaces that consumed excessive CPU time for crypto-mining
- Blocked the fraudulent users behind the crypto-mining from using Gitpod
- Rolled back the ws-daemon change that broke CPU limiting and shipped the fix in the ws34 clusters
- Blocked ACME HTTP requests to workspace ports so Let's Encrypt rate limits would not be hit again
- Rolled out IO limiting with the ws41xl and ws41 clusters and moved traffic to them step by step
- Action items
- Invest in test automation so that test results stop releases like this one
- Vary the interval between traffic shifts to new clusters, with more time for larger releases
- Add a risk assessment stage, to be automated, that governs changeset size and rollout speed of workspace cluster rollouts
- Reduce the impact teams have on each other
- Add review criteria that find backwards incompatible changes before pull requests are merged, and split such pull requests
- Recommend rollback as the primary means of mitigation in the incident procedures, and look at automating it
- Make the status page show the workspace service as down when it is, and update the playbooks
- Keep incident communication in a single Slack channel and Google Meet
- Put 10% of the engineering staff on the on-call rotation from May 9th and use that time on observability, alerting and stability
- Lessons
Gitpod concluded that it should have committed to rolling back on April 11th instead of building and shipping fixes, which kept customers on degraded workspaces longer than necessary. A large release so soon after the previous one needed a risk assessment and slower traffic shifts, and backwards incompatible changes that block a rollback need to be found before pull requests are merged. Failure-free operations require experience with failure.
These 3 cases involve BGP routing and Container CPU limit. 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
Software defect1 case
- Contributing factor
- Organisation
Faulty deployment2 cases
- Contributing factor
IL-0163An API change that slipped through a gap in automated testing made LKE clusters resize to the wrong number of nodes and added billable worker nodes to customer accountsLinode2023IL-0591Gitpod workspaces in all regions became IO bound and unresponsive for days after the ws39 workspace cluster releaseGitpod2022