Graph
Cases4 cases
1 to 4 of 4
- Symptoms
Nodes that already existed kept running, but every new node, spot or standard, on either v1.32 or v1.33, failed to initialise and could not join the cluster. Spot nodes that were preempted and recreated never came back, so services degraded progressively: background workers on spot instances, reporting services and order allocation stopped completely, and the APIs on existing nodes kept answering but could not scale for load spikes.
- Trigger
Google upgraded the GKE control plane from v1.32.x to v1.33.2 at the version deprecation deadline, although auto-upgrade was disabled on the node pools.
- Root cause
- Component
- Contributing factor
- Remediation
- Created a new GKE cluster at v1.33, the version of the forced upgrade
- Upgraded Istio to 1.27.1 for Kubernetes 1.33 compatibility
- Updated the cert-manager configuration for Kubernetes 1.33
- Migrated all production workloads to the new cluster and verified pod scheduling, DNS resolution, PVC mounting and external integrations
- Decommissioned the broken cluster
- Action items
- Configure all clusters to use the GKE stable release channel
- Implement a separate management cluster for Argo CD, monitoring and other control components (Q4 2025)
- Review spot instance usage for critical workloads and add on-demand fallback pools
- Document the SRE upgrade procedure: management cluster first, production after a monitoring period of several days
- Document a Kubernetes, Istio and cert-manager compatibility matrix
- Create an automated upgrade testing pipeline
- Reserve static IPs for quick migrations
- Pin versions of Istio, cert-manager, CSI and DNS addons
- Stay current with stable releases and regularly check GKE alerts and announcements to avoid deprecation deadlines
- Lessons
GKE upgrades the control plane at a version's deprecation deadline even when auto-upgrade is disabled, so staying inside the supported version window is how to avoid a forced upgrade. A control plane upgrade can leave existing nodes healthy while every new node fails, and spot nodes that cannot rejoin after preemption turn this into cascading failures. Relying heavily on spot instances for critical workers turned a node join failure into a progressive outage. Kubernetes upgrades have to be planned together with dependent components such as Istio and cert-manager, and without a standby cluster on the same provider there was no immediate failover; the only recovery left was building a new cluster.
IL-0060Kubernetes 1.24 upgrade removed the master node label that Calico route reflectors selected on, dropping all pod routes and taking Reddit down for 314 minutesReddit2023- Symptoms
About two minutes after an engineer started the Kubernetes 1.23 to 1.24 upgrade of the cluster running Reddit's legacy stack, just after 19:00 UTC, the site stopped. The CDN edge request graph, which is kept separate from the cluster, showed traffic by status collapsing. Users saw the error page, a homepage with no posts, or plain errors.
- Trigger
An in-place upgrade of the legacy cluster from Kubernetes 1.23 to 1.24; in 1.24 the node-role.kubernetes.io/master label is removed even from running clusters.
- Root cause
- Component
- Contributing factor
- Detection
The site broke about two minutes into the upgrade; an incident was opened immediately and responders were on the call within three minutes, working from CDN edge graphs because the cluster's own metrics were gone.
- Remediation
- deleted the Open Policy Agent webhook configurations to stop API server timeouts
- terminated all worker nodes of the cluster
- restored the control plane from the pre-upgrade backup onto the first control plane node
- switched off the cluster autoscaler until the control plane was stable
- generated new TLS certificates so replacement control plane nodes could join etcd
- brought traffic back in steps from 1% to 100%
- restarted legacy services that had been stopped by hand
- Action items
- Codify cluster configuration so every choice has a record, and document in detail what cannot be codified
- Standardise components across clusters and replace bespoke configurations
- Build tooling to manage the lifecycle of whole clusters so they can be recreated or replicated
- Add pre-production clusters that can be tested with confidence
- Improve the backup restore process and make cluster upgrades safe
- Lessons
Configuration that exists only in a live cluster, edited by hand through a special tool, can be forgotten, as the route reflector setup was, and then break on an upgrade nobody connects it to. A Kubernetes upgrade cannot be reverted without a restore, so the restore procedure has to be kept current and practised. Consistent, codified clusters are what make upgrades testable; bespoke clusters keep producing outages.
IL-0230kube-proxy sync failures during a Kubernetes upgrade corrupted node iptables, and CircleCI jobs stopped startingCircleCI2023- Symptoms
On 14 March 2023 at about 18:00 UTC, communication errors rose on one CircleCI service, and pipelines for all customers began to start late until jobs did not run at all. Within an hour the errors had spread to many services and to every function of the application, including the CircleCI UI and API.
- Trigger
At about 17:40 UTC on 14 March the infrastructure team resumed the upgrade of the main production Kubernetes cluster with a changed approach for some components, after a first attempt on 13 March had been rolled back. The ongoing upgrade left kubelet and kube-proxy at mismatched versions.
- Root cause
- Component
- Contributing factor
- Detection
At 18:00 UTC engineers saw communication errors rise on one service, then job processing delays climbing and job queues backing up across several services. The kube-proxy "Sync failed" errors were found only in the analysis after the incident.
- Remediation
- Restarted every node in the cluster so each node built a fresh iptables ruleset
- Restarted a separate pool of dependencies so jobs using contexts or the machine executor ran again
- Added capacity to work through the backlog of jobs
- Restarted the RabbitMQ nodes to fix a few corrupted queues
- Action items
- Improve the Kubernetes upgrade process to limit the risk of future upgrades
- Add metrics and alerts for kube-proxy sync errors
- Evaluate ways to make the RabbitMQ infrastructure more resilient
- Lessons
No single trigger caused the incident. Because networking underlies everything in the cluster, Kubernetes upgrades carry inherent risk, and CircleCI's risk mitigation did not hold up when several events interacted.
IL-0144A systemd security update installed by unattended-upgrades lost the DNS configuration of Ubuntu 18.04 VMs, so AKS kubelets could not resolve registry names and pods failed with ImagePullBackOffMicrosoft Azure2022- Symptoms
From 06:00 UTC on 30 August 2022, Azure VMs running Ubuntu 18.04 (bionic) with unattended-upgrades enabled began failing DNS resolution and losing network connectivity. Several Azure teams, among them the AKS and Azure Container Apps teams, were alerted by production alerts shortly after the update packages were published.
- Trigger
Unattended-upgrades on Ubuntu 18.04 VMs installed a Canonical security update published at 06:00 UTC on 30 August 2022, including systemd version 237-3ubuntu10.54.
- Root cause
- Component
- Contributing factor
- Detection
Several Azure teams, including AKS and Azure Container Apps, were alerted by production alerts shortly after the packages were published; incoming support cases then confirmed which Ubuntu versions were affected.
- Remediation
- pointed customers to Canonical's description of the systemd bug and its fix
- recommended rebooting affected VMs or running a template script that repairs DNS resolution
- built automatic detection and remediation for AKS nodes and rolled it out across all regions
- mitigated the remaining AKS customers manually through support
- Action items
- Review the process that lets critical security updates bypass Safe Deployment Practices
- Improve monitoring of the AKS data plane to alert on an uptick of errors
- Review AKS monitoring algorithms so that similar VM errors are detected and alerted on
- Establish an improved escalation path to Canonical during outages and add it to internal Technical Service Guides
- AKS takes full control of the node security patch mechanism, with additional testing and controlled release of patches (estimated December 2022)
- Work with Canonical to run dedicated tests on proposed packages before they are published for Azure IaaS VMs
- Establish a process with Canonical to close the testing gap for the upgrade scenario (estimated March 2023)
- Give AKS customers maintenance window control and environment staging for these patches (estimated December 2023)
- Lessons
Security patches applied automatically by unattended-upgrades, once a day by default, and outside Azure's Safe Deployment Practices reached Ubuntu 18.04 VMs in every Azure region, so one systemd regression became a DNS outage across Azure. On AKS, lost node DNS showed up as image pull failures such as ImagePullBackoff, because kubelet could not resolve the registry. Azure plans to put node security patching under AKS's control with testing and controlled release; customers can use automatic node image upgrade for AKS, or automatic VM guest patching for VMs, instead of unattended-upgrades.
These 4 cases involve Client-side DNS resolver and cache and kubelet. 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
Breaking change in an upgrade4 cases
- Component
- Contributing factor
- Organisation
IL-0101After Google forced a GKE control plane upgrade to 1.33.2 at a deprecation deadline, no new node could initialise, so autoscaling and spot node replacement stopped for 15 hoursWealthy2025IL-0060Kubernetes 1.24 upgrade removed the master node label that Calico route reflectors selected on, dropping all pod routes and taking Reddit down for 314 minutesReddit2023IL-0230kube-proxy sync failures during a Kubernetes upgrade corrupted node iptables, and CircleCI jobs stopped startingCircleCI2023IL-0144A systemd security update installed by unattended-upgrades lost the DNS configuration of Ubuntu 18.04 VMs, so AKS kubelets could not resolve registry names and pods failed with ImagePullBackOffMicrosoft Azure2022