Cases2 cases
1 to 2 of 2
IL-0207A routine task run from an engineer's local environment switched to production and deleted GitLab.com's Consul release, so Patroni lost Consul and GitLab.com returned 5xx errors to all trafficGitLab2022- Symptoms
GitLab's monitoring and alerting fired at once. One of the alerts reported a Patroni failover, and users of GitLab.com received 5XX errors; the CDN counted about 13 million requests answered with 503 during the outage.
- Trigger
An engineer ran a routine task with GitLab's tools in a local development environment; during a local deploy or rollback operation the tool's context changed from local development to production, and the change was applied to production.
- Root cause
- Component
- Contributing factor
- Detection
GitLab's monitoring and alerting fired immediately; one of the alerts reported a Patroni failover.
- Remediation
- re-applied the Consul release to the production Kubernetes cluster, with manual steps because the tooling did not support the redeploy directly
- Action items
- Improve the Kubernetes deployment process to reduce the risk of running harmful deployment operations against production from local environments (https://gitlab.com/gitlab-com/gl-infra/reliability/-/issues/16875)
- Integrate Teleport with the Kubernetes clusters, which could give SREs a read-only role by default (https://gitlab.com/gitlab-com/gl-infra/reliability/-/issues/16221)
- Lessons
A tool that can switch its target from a local environment to production during a deploy or rollback turns routine local work into a production change. GitLab plans to improve its Kubernetes deployment process so that harmful deployment operations are less likely to be run against production from local environments, and to integrate Teleport with its clusters, which could give SREs a read-only role by default. Detection and diagnosis were fast because the alerts led straight from Patroni to its dependency, Consul. Bringing the deleted release back needed manual work, because the tooling did not make the redeploy straightforward, but it was still done relatively quickly.
IL-0115One of OpenAI's three production AKS clusters went offline through a human error, and rebuilding it took 10½ hours because an AKS Kubernetes upgrade broke the ingress and AKS cannot be downgradedOpenAI2022- Symptoms
At 18:56 PDT on 23 June 2022 (01:56 UTC on 24 June) several models went offline at once: some fine-tuned curie and davinci models, the Codex beta models code-davinci-001 and code-cushman-001, the legacy GPT models curie, babbage and ada, and all Embeddings models.
- Trigger
A destructive operation on one of the three production clusters, caused by human error that the existing safeguards did not catch, took the whole cluster offline.
- Root cause
- Component
- Contributing factor
- Remediation
- re-allocated the models from the lost cluster to the remaining two clusters
- rebuilt the VPN link with Azure support after losing the connection to AKS during cluster setup
- built workarounds with Azure support after losing the connection to Azure Private Link
- tore down the cluster and rebuilt it from scratch after the upgraded Kubernetes version broke the ingress
- moved traffic back into the rebuilt cluster between 05:30 and 06:30 PDT
- Action items
- Add checks and locks so that this and similar production-critical infrastructure cannot be modified by accident
- Add better visibility into the operations being performed and make parts of the system more lexicographically distinct
- Keep working with Azure on the AKS network connectivity issues so they do not disrupt new cluster operations
- Update playbooks with the new cluster failure modes and change the setup steps for new clusters and infrastructure
- Upgrade Kubernetes systematically and set aside time so the clusters do not fall behind again
- Shard fine-tuned models across multiple clusters and work towards more automatic cross-cluster replication
- Distribute and replicate Azure Blob Storage so fine-tuned models load faster and more reliably
- Finish rolling out node-to-node caching to relieve Azure Blob Storage bottlenecks
- Change how model weights are stored so they are more efficient and faster to load
- Lessons
Losing one of three clusters exhausted the GPU headroom, and GPUs could not be added on short notice, so full recovery depended on bringing the same cluster back. Rebuilding it exposed a deferred Kubernetes upgrade: the newer version broke the ingress, and because AKS cannot downgrade there was no way back except a full rebuild. Recovering many large models at once is limited by the bandwidth of the storage they load from, and the caches that normally hide this do not help when everything moves to a different cluster.
These 2 cases involve Application database and Ingress controller. 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
Operator error2 cases
- Contributing factor
IL-0207A routine task run from an engineer's local environment switched to production and deleted GitLab.com's Consul release, so Patroni lost Consul and GitLab.com returned 5xx errors to all trafficGitLab2022IL-0115One of OpenAI's three production AKS clusters went offline through a human error, and rebuilding it took 10½ hours because an AKS Kubernetes upgrade broke the ingress and AKS cannot be downgradedOpenAI2022