Cases3 cases
1 to 3 of 3
- Symptoms
At 09:36 on 18 March 2025, during the upgrade of the live cluster to EKS 1.30, users reported that their pods were being terminated and were not restarting automatically, in both production and non-production environments. Automated infrastructure alerts fired as well, and production services had outages.
- Trigger
Upgrading the live EKS cluster from 1.29 to 1.30, during which the descheduler attempted to reschedule all pods on the cordoned nodes simultaneously.
- Root cause
- Component
- Contributing factor
- Detection
Users reported at 09:36 that pods were being terminated and not restarting, and automated infrastructure alerts fired.
- Remediation
- Removed the cordon annotation so pods could be rescheduled
- Deleted stuck 1.30 nodes to force their recreation
- Added a new node group of 20 nodes running 1.30 by hand
- Cordoned and drained all old 1.29 nodes onto the new 1.30 nodes
- Action items
- Raise an AWS Production System Down support case (Case ID: 174229643100496)
- Get guidance from AWS support on querying control-plane logs to find the root cause of similar issues
- Document a runbook for emergency scaling of a new node group in case of unexpected capacity shortages
- Alert on an imbalance between the autoscaling group and the Kubernetes nodes
- Review the descheduler configuration to understand why it throws pods off cordoned nodes, and fix it where possible
- Alert on spikes in the pending pod count
- Lessons
The write-up lists review actions rather than lessons. They show the team had no documented way to add an emergency node group, no alert on a mismatch between the autoscaling group and the nodes Kubernetes sees, no alert on a spike in pending pods, and no clear understanding of how the descheduler treats cordoned nodes.
IL-0530Virtual router controllers in us-central1 ran out of memory in a loop, cutting networking for new and migrated VMsGoogle Cloud2023- Symptoms
On 5 October 2023 in us-central1, newly created VMs waited a long time before their networking worked, and VMs that had been live migrated lost connectivity for a long time after the migration. Networking telemetry showed cross-region packet loss to and from us-central1 from 03:08 US/Pacific. Health check state of VMs reached load balancers late.
- Trigger
A management plane behaviour change, meant to decouple the processing of API updates to Instance Groups and Network Endpoint Groups used as load balancer backends, was deployed in us-central1 after rolling out to several other regions without incident.
- Root cause
- Component
- Contributing factor
- Detection
Engineers were alerted to slowness in the virtual network control plane in us-central1 at 21:45 US/Pacific on 4 October, before the packet loss started, and to controller failures from memory exhaustion at 02:11 on 5 October. Networking telemetry showed cross-region packet loss from 03:08.
- Remediation
- Increased the memory allocated to the virtual network router controllers
- Rolled back the management plane change in us-central1
- Restarted by hand the routers that were still not accepting updates
- Action items
- Alert proactively on memory risks and unexpected memory increases
- Refactor the deployment configuration so engineers can reallocate memory much faster
- Re-evaluate existing practices and add safety mechanisms for API reconciliation
- Make management plane changes more visible across teams so the changes can be correlated faster
- Adjust the deployment footprint so a regional API change is less likely to exhaust memory across the region at once
- Optimise memory use in the traffic routers and their controllers
- Symptoms
Overnight into 26 March 2019 (PDT), every Prow test job that needed a GCP project from Boskos, the Kubernetes test-infra service that hands out GCP projects to test jobs, failed. The required job pull-kubernetes-e2e-gce failed on every run, so no pull request could be merged in kubernetes/kubernetes for just over nine hours, and other projects saw similar failures.
- Trigger
At 23:04 PDT the node running the only Boskos pod was drained to be replaced with a 1.13 node during the upgrade of the Prow clusters from Kubernetes 1.11 to 1.13. The replacement pod started from the StatefulSet's current spec, which named a newer Boskos image containing the bug.
- Root cause
- Component
- Contributing factor
- Detection
Users reported the failure on GitHub at 02:50 and on Slack at 05:16 and 06:27, and an engineer saw the Slack reports on waking at 07:16. The Boskos monitoring dashboard showed the failure, but no alert caught it.
- Remediation
- Built and deployed a new Boskos image with the bug fixed
- Cleaned up the GCP projects that had been left open
- Action items
- Change the Boskos configuration so that deployments actually take effect (#11956)
- Automate Boskos deploys (#11957)
- Improve alerting on Boskos status (#11953)
- Lessons
The write-up lists what went poorly: a ten-hour upgrade was started shortly after 17:00 when on-call coverage ended at 18:00; deployments were not checked to confirm that something had actually rolled out; the Boskos StatefulSet was not set up to perform updates, so changing its spec left the old pod running; the December change appears never to have been tested; and Boskos was deployed by hand, unlike most of Prow, which left more room for error. Once people were available, the problem was fixed quickly.
These 3 cases involve Node pool and CI system. 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
Faulty deployment3 cases
- Component
- Contributing factor
IL-0020During an EKS 1.30 upgrade the descheduler tried to reschedule every pod on the cordoned nodes at once and production workloads went downIL-0530Virtual router controllers in us-central1 ran out of memory in a loop, cutting networking for new and migrated VMsGoogle Cloud2023IL-0467Boskos crash-looped after a node drain started it from a buggy StatefulSet image, failing Kubernetes PR jobs for 9 hours