Graph
Cases2 cases
1 to 2 of 2
IL-0367Azure Storage in Central US rejected VM disk I/O, taking down VMs and the SQL Database and Cosmos DB services on themMicrosoft Azure2024- Symptoms
From 21:40 UTC on 18 July 2024, virtual machines in the Azure Central US region lost access to their disks, and the services running on those VMs failed. Azure SQL Database and SQL Managed Instance showed unhealthy nodes and login failures, Cosmos DB requests failed, and service management operations failed across many Azure services.
- Trigger
Routine changes to the VM host fleet led to a new allow list of VM host address ranges being generated and published to all Storage scale units in Central US. Recent network configuration changes had made some of the infrastructure file servers that hold the source data unreachable from the server generating the list, so the published list was incomplete.
- Root cause
- Component
- Contributing factor
- Detection
Service monitoring detected the drop in VM availability at 22:06 UTC while the allow list update was being published. SQL monitoring detected unhealthy nodes and login failures within one minute of SQL becoming unavailable, and monitoring flagged the availability drop for Cosmos DB, SQL DB and SQL DB Managed Instance at 22:14 UTC.
- Remediation
- Halted the allow list update workflow worldwide
- Paused all deployments in the Central US region
- Paused compute buildout deployments in all regions
- Updated the configuration of all Storage scale units in Central US, restoring storage availability by 02:55 UTC
- Started geo-failovers for SQL databases with automatic failover policies
- Restarted SQL gateway nodes to refresh their caches and route connections to the right nodes
- Forced completion of SQL failovers that had not completed
- Failed over the Cosmos DB control plane and active-passive accounts with a write region in Central US
- Cancelled customer-triggered graceful switch region operations that blocked Cosmos DB failovers
- Removed locks on Cosmos DB service metadata to force-complete stuck failovers
- Repaired impacted Cosmos DB partitions for single-region accounts
- Repaired backend nodes and failed Cosmos DB accounts back to Central US, redoing failback where it failed
- Action items
- Make the allow list generation workflow detect incomplete source information and halt
- Alert on storage requests rejected by allow list checks
- Deploy allow lists one Availability Zone and storage type at a time, over 24 hours
- Add VM health checks and an automatic stop to the allow list deployment workflow
- Reevaluate the policy for Microsoft-managed failover of SQL failover groups
- Fix the Cosmos DB failback workflow that broke some MongoDB drivers for MongoDB API accounts
- Fix Cosmos DB failback for accounts with private endpoints so it does not need redoing
- Make the storage data-plane firewall reject invalid allow lists and keep the last-known-good state
- Improve Azure NetApp Files monitors so impacting events are detected and classified in time
- Monitor more Azure NetApp Files service metrics to correlate similar events faster
- Make the SQL Service Fabric cluster location change notifications reliable under load
- Make SQL geo-failover workflows more robust so they complete
- Remove the issues that delayed 5% of Cosmos DB failovers
- Migrate Azure DevOps customer metadata to the right geography
- Decouple Azure NetApp Files regional reads and writes to keep this class of issue to one region
- Evaluate caching to reduce Azure NetApp Files reliance on stored utilization data
- Add automatic per-partition failover for Cosmos DB multi-region active-passive accounts
- Build the Resilient Ephemeral OS disk improvement so VMs survive storage incidents better
IL-0518gitlab.freedesktop.org on GKE ran short of volume space and a planned 30-minute storage upgrade became a 4-hour outagefreedesktop.org2018- Symptoms
Shortly after 9am UTC on 17 July 2018, the disk space of the GitLab cluster behind gitlab.freedesktop.org was critical, and some API requests were failing because of the shortage. The administrator first learned of the failure when people mentioned it on IRC.
- Trigger
Many recently created forks of Mesa, each about 2.1GB, filled the disk space of the GitLab cluster.
- Root cause
- Component
- Contributing factor
- Detection
People mentioned the failure on IRC. Monitoring and alerting on disk usage and API error rate had not been set up yet.
- Remediation
- Dropped all inbound traffic to GitLab at the firewall except from the administrator's IP
- Took a manual backup by streaming tar over SSH to an encrypted partition on a local machine
- Snapshotted all GCE disks behind the PersistentVolumes
- Copied the data from the old disk snapshots to new enlarged volumes through a temporary GCE VM
- Re-did the copy into new empty volumes with the correct directory structure and checked repositories, users and workflows
- Restored public access to GitLab
- Action items
- Set up monitoring, logging and alerts
- Find ways to communicate outages much better; this one was announced only on IRC, and the lists were not told when it dragged on
- Use the Cloud console clients instead of the slow Cloud Console web UI
- Add more GitLab administrators, ideally someone familiar with Kubernetes deployments
- Move from the single Omnibus container to GitLab's cloud native deployment with one container per service
- Move storage to resizeable volumes or to Google Cloud Storage
- Lessons
The backup step alone used up the outage window; backups had grown along with the disk problem, and a test run before announcing the window could have measured it. The changes had been tested on a scratch cluster, but not exactly as run, and tests of steps such as disk snapshots could have been more realistic. A single GitLab administrator who was new to Kubernetes was a single point of failure. Keeping at least three copies of the data from the first destructive step meant no data was lost.
These 2 cases involve Cloud block storage and Database. 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
Configuration change1 case
- Contributing factor
- Organisation
Capacity exhaustion1 case
- Contributing factor
- Organisation