Graph
Cases5 cases
1 to 5 of 5
IL-0005A new telemetry service overloaded the Kubernetes API servers of large clusters and broke DNS-based service discovery for all OpenAI servicesOpenAI2024- Symptoms
Alerts fired at 3:13 PM PST on 11 December 2024, and from 3:16 PM every OpenAI service was significantly degraded or completely unavailable, including ChatGPT, the API and Sora. The status page reported API calls returning errors and difficulties logging in to platform.openai.com and ChatGPT. Customer impact peaked at 3:40 PM.
- Trigger
At 2:23 PM PST a change introducing a new telemetry service, which collects detailed Kubernetes control plane metrics, was merged and the deployment pipeline started. Between 2:51 PM and 3:20 PM the change was applied to all clusters.
- Root cause
- Component
- Contributing factor
- Detection
OpenAI's detection tools worked: alerts fired at 3:13 PM PST, a few minutes before customer impact began at 3:16 PM, and the root cause was identified at 3:16 PM.
- Remediation
- Scaled clusters down to reduce the total Kubernetes API load
- Blocked network access to the Kubernetes admin APIs so no new expensive requests arrived
- Scaled up the Kubernetes API servers
- Removed the telemetry service once enough control was back
- Moved traffic from impacted clusters to healthy ones
- Intervened manually in clusters where simultaneous resource downloads saturated resource limits
- Action items
- Put every infrastructure configuration change through a phased rollout with continuous monitoring of both the service workloads and the clusters, including the Kubernetes control plane
- Run fault injection tests in which the data plane runs without the control plane for longer, and tests that roll out bad changes on purpose to check detection and rollback
- Build break-glass mechanisms so engineers can reach the Kubernetes API servers in any circumstances
- Decouple the Kubernetes data plane from the control plane so that service discovery for critical workloads does not depend on the control plane
- Speed up recovery with better caching and dynamic rate limiters for resources needed at cluster startup, and regular drills that rapidly replace an entire cluster
- Lessons
Several systems and processes failed at once and interacted in unexpected ways: tests did not catch the change's effect on the Kubernetes control plane, DNS caching put a delay between the change and the failures, and being locked out of the control plane made remediation very slow. Because service discovery used Kubernetes DNS, the control plane was carrying load for product traffic even though the data plane was meant to be independent of it.
IL-0116A CNI configuration change incompatible with a hardware variant that exists only in production cut network connectivity in an OpenAI GPU cluster and took text-davinci-003 fully downOpenAI2023- Symptoms
At 4:53 pm Pacific on 25 January 2023 one of OpenAI's GPU clusters had a major outage, and the text-davinci-003 model went fully down.
- Trigger
A configuration change to the CNI (Container Network Interface) plugins, which provide network connectivity to containers, was deployed to a GPU cluster that contained a hardware variant the staging environment did not have.
- Root cause
- Component
- Contributing factor
- Detection
Engineers immediately identified the problem as network connectivity, but it took nearly an hour to identify CNI as the cause.
- Remediation
- put a fix for the CNI configuration change in place, which restored 80% of traffic immediately
- deployed models back onto GPUs over about three more hours until capacity was fully stable
- Action items
- Make staging environments contain every type of hardware configuration so they better represent production
- Monitor and alert on the health of the CNI system directly
- Fix the network and storage bottlenecks that limit how quickly many replicas of a model can be deployed
- Lessons
A change that had been deployed to other clusters over 24 hours and deemed safe still broke a cluster with different hardware, so staging needs every hardware configuration that production has.
IL-0009A duplicated generated name made Argo CD replace the InfluxDB Cloud production Application and delete the whole production environmentInfluxData2022- Symptoms
Right after a pull request to the infrastructure-as-code repository was merged, every API endpoint of one InfluxDB Cloud production cluster began returning 404 errors. Writes and reads failed alike: no one could collect data, scheduled tasks failed to run and external queries did not work.
- Trigger
A merged pull request whose rendered YAML added a new Argo CD Application and AppProject that an automation error had named app01-cluster01, the name of the existing production Application, instead of app02-cluster01; reviewers did not notice the app01 and app02 difference.
- Root cause
- Component
- Contributing factor
- Detection
Monitoring and alerting did not detect the issue right away, so the team's first response was to try to roll the change back rather than plan a recovery. The write-up does not say how the team found out.
- Remediation
- stopped the revert of the merged pull request
- restored the etcd metadata cluster
- recreated the missing Kubernetes objects so the retained PersistentVolumes became available, then recreated the StatefulSets
- restored the Zookeeper volumes from an hourly Velero backup
- rebuilt the Kafka StatefulSet one pod at a time with health and readiness checks disabled
- accepted writes into the Kafka write-ahead log and scaled up the write path with more replicas and higher memory requests and limits
- recreated the storage pods, which downloaded data from object storage, reindexed it and replayed the write-ahead log
- re-enabled Argo CD, queries, dashboards and scheduled tasks, restored replica counts and ran final QA checks
- Action items
- Write runbooks for restoring state when Kubernetes objects such as PersistentVolumeClaims are deleted but the data on the underlying volumes is preserved
- Set every volume in every environment to retain data when its PersistentVolumeClaim is deleted
- Improve the process for handling public-facing incidents
- Store generated YAML as one object per file, so an overwrite of an existing object shows up as such in review
- Detect duplicate objects when generating YAML and warn before review, treating objects with the same group, namespace and name as the same even when the apiVersion string differs
- Add the Argo CD Prune=false annotation to all stateful resources and to Namespace objects managed by Argo CD
- Set FailOnSharedResource=true on Argo CD Applications so Argo CD fails before changing an object another Application manages or managed
- Lessons
The biggest gap was that monitoring did not notice the deletion quickly, which pushed the team toward a reflex rollback; in a stateful system a revert can create a new, empty instance instead of bringing the old one back. Retained volumes and clients that retry writes are what kept data loss at zero. Rendering many objects into one file let an overwrite of an existing object look like an addition, so generated configuration needs one object per file and duplicate detection that compares objects the way Kubernetes does. Stateful resources need protection from pruning, and that protection must cover their Namespace too, or deleting the namespace removes everything inside it.
IL-0111Switching the main Kubernetes ingress controller from Traefik v1 to v2 stopped X-Forwarded headers being passed, which broke the Okta login flow for every service using Okta and stopped DFDS online bookings for over an hourDFDS2021- Symptoms
After the switch to Traefik v2, functional tests indicated that everything was fine, and this was reported on Slack at 08:44 UTC. The first sign of trouble came at 09:26 UTC, when a developer reported a high count of HTTP 307 redirects, especially on the Okta service. At 09:32 UTC the team learned that the online booking system was down.
- Trigger
At 08:22 UTC the AWS load balancers were updated to send requests to the new Traefik v2 reverse proxy as part of the migration away from Traefik v1.
- Root cause
- Component
- Contributing factor
- Detection
A developer reported a high count of HTTP 307 redirects, in particular on the Okta service, at 09:26 UTC, 64 minutes after the change; six minutes later the team was told the online booking system was down. The functional tests run after the switch had not caught it.
- Remediation
- Rolled back the switch to Traefik v2, putting rollback ahead of investigation because of how critical the booking system is
- Action items
- Consider how critical announcements can be made more visible
- Consider whether the ALBs used for testing should have been shared with the teams so they could test their own scenarios
- Lessons
Cloud Engineering cannot test every application scenario on its own, even after testing its own applications for weeks. A header that changes value behind a new ingress controller, here x-forwarded-proto going from https to http, can break an authentication flow while basic functional tests still pass. DFDS asks whether diffing request headers before and after the migration would have shown the problem in advance.
IL-0008An unresponsive OPA validating webhook crash-looped the API server during a GKE master upgrade, and node auto-repair then recreated every nodeJetstack2019- Symptoms
Jetstack was upgrading the master of a development cluster that many teams use to test their apps during the working day, a regional Google Kubernetes Engine (GKE) cluster in europe-west1. The upgrade ran through Jetstack's GKE Terraform pipeline and did not finish before the 20-minute Terraform timeout, while the GKE console still showed the cluster as upgrading.
- Trigger
A planned master upgrade of the shared development cluster. The same upgrade had been done on another pre-production environment earlier that day, and no API downtime was expected.
- Root cause
- Component
- Contributing factor
- Detection
The first sign was the master upgrade missing the 20-minute Terraform timeout; re-running the pipeline returned the kube-apiserver unhealthy error. The cause was identified with the help of Google Support.
- Remediation
- Deleted the OPA ValidatingAdmissionWebhook resource during a window of API server access
- Action items
- Limit the OPA webhook to the namespaces where the policy applies and development teams have access
- Enable the webhook only for Ingress and Service resources, the only resources the policy validates
- Add a liveness probe so OPA is restarted when it stops responding, and update the OPA documentation
- Follow the open upstream Kubernetes issue about this behaviour
- Lessons
With alerting on API server response times, the team might have seen CREATE and UPDATE requests slow down across the board as soon as the OPA-backed webhook was first deployed. Every workload needs probes: OPA looked so simple to deploy that the team skipped the Helm chart, which adds a livenessProbe for the admission controller containers among other adjustments to the tutorial configuration. Others had hit the same problem, and an upstream issue to improve it was still open.
These 5 cases involve Kubernetes API server and Admission webhook. 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
Configuration change5 cases
- Component
- Contributing factor
- Organisation
IL-0005A new telemetry service overloaded the Kubernetes API servers of large clusters and broke DNS-based service discovery for all OpenAI servicesOpenAI2024IL-0116A CNI configuration change incompatible with a hardware variant that exists only in production cut network connectivity in an OpenAI GPU cluster and took text-davinci-003 fully downOpenAI2023IL-0009A duplicated generated name made Argo CD replace the InfluxDB Cloud production Application and delete the whole production environmentInfluxData2022IL-0111Switching the main Kubernetes ingress controller from Traefik v1 to v2 stopped X-Forwarded headers being passed, which broke the Okta login flow for every service using Okta and stopped DFDS online bookings for over an hourDFDS2021IL-0008An unresponsive OPA validating webhook crash-looped the API server during a GKE master upgrade, and node auto-repair then recreated every nodeJetstack2019