Graph
Cases4 cases
1 to 4 of 4
IL-0153DOKS worker nodes went NotReady at 06:00 UTC on three days because a systemd timer in the Debian image ran apt upgrade and killed it mid kernel upgrade, breaking node networkingDigitalOcean2023- Symptoms
Customers of DigitalOcean Managed Kubernetes (DOKS) saw worker nodes go NotReady between 06:00 and 07:00 UTC and stay unavailable, taking down the services on them, until the nodes were replaced or rebooted; some nodes needed several replacements or reboots. The first sporadic reports on October 8 said replacing the node fixed it. The same thing happened again around 06:00 UTC on October 9, more widely and across many regions, and again on October 10. Only clusters on versions 1.27.6-do.0 and 1.28.2-do.0 were affected.
- Trigger
A systemd timer in the DigitalOcean Debian image started apt upgrade daily at 06:00 UTC, with a random delay of up to 60 minutes.
- Root cause
- Component
- Contributing factor
- Detection
Sporadic customer reports of failed worker nodes arrived at 07:43 UTC on October 8; internal incident response started at 07:10 UTC on October 9 after broader impact across regions.
- Remediation
- Advised customers to replace or reboot affected worker nodes
- Arranged SSH and console access to worker nodes while they were healthy, and live-debugged an affected node on October 10
- Released a DaemonSet to all affected clusters that disables the apt upgrade systemd timer on every worker node
- Released new node images without the auto-update process
- Action items
- Disable the timer during node provisioning, then remove the DaemonSet from all clusters
- Add a check to the internal conformance test suite for new cluster versions that the auto-upgrade process and other unwanted timers stay disabled
- Support logging into worker nodes even when normal access paths are broken
- Lessons
An operating system auto-update timer left enabled in a node image can change the kernel and systemd underneath Kubernetes, and a timeout that kills the upgrade half-way can leave a node without networking. Failures that start at the same time every day point to a scheduled job on the nodes, and systemd timers belong on that list next to cron jobs. When the failure takes out a node's network, an investigation that depends on logging into the node stalls; access paths that work while the node is broken shorten diagnosis.
IL-0198An automatic Ubuntu security update restarted systemd-networkd, which flushed the IP rules Cilium relied on and cut more than 60 percent of Datadog's Kubernetes nodes off the network across regions and cloud providersDatadog2023- Symptoms
Between 06:00 and 07:00 UTC on 8 March 2023, Kubernetes nodes in several Datadog regions lost network connectivity at the same time, on AWS, Google Cloud and Azure. All services across multiple regions were affected, including the regions that host Datadog's CI/CD and automation tools. Datadog's regions are not connected to each other and changes are rolled out one region at a time, so a simultaneous failure on several cloud providers looked implausible at first.
- Trigger
On 7 March 2023 Ubuntu published a systemd patch for a CVE (249.11-0ubuntu3.7). Ubuntu's default unattended upgrades installed it on the nodes between 06:00 and 07:00 UTC on 8 March, and installing it restarted systemd-networkd.
- Root cause
- Component
- Contributing factor
- Remediation
- restarted thousands of disconnected instances on Google Cloud and Azure through the cloud APIs, keeping their local disks
- rebuilt the data lost with terminated AWS instances' local disks through replication, reprocessing and restores from backup
- Lessons
A change in a base operating system component can stay dormant for months until something restarts that component. Here the trigger was a security patch, and the change reached every region at once because automatic OS updates ran outside the progressive, region-by-region process used for every other change. Cloud providers react differently to an instance that loses its network. Google Cloud and Azure left the instances running, so a restart recovered them with their disks; AWS replaced them quickly, which brought stateless services back fast but destroyed the local-disk data the stateful services needed.
IL-0231Deleting EKS managed node groups also deleted Karpenter's instance profile, and every Stytch worker node shut downStytch2023- Symptoms
On 23 February 2023 Stytch's EKS worker nodes went Ready:Unknown one after another, Karpenter failed to launch replacement nodes, and with fewer and fewer pods scheduled the Live Stytch API went down for 14 minutes, returning 5XX on every call.
- Trigger
At 14:21 UTC Stytch landed a change to remove unused EKS managed node groups, because it had decided to run its data plane applications fully on nodes provisioned by Karpenter. Because Crossplane resources use an orphan deletion policy, engineers deleted the node groups in the AWS console, first in staging and then in production.
- Root cause
- Component
- Contributing factor
- Detection
Low-urgency alerts that Karpenter could not find the instance profile fired in staging at 16:06 UTC and in production at 17:48 UTC but were not treated as an incident. The incident process started at 20:26 UTC when node launch failures spiked the Karpenter error rate, and Kubernetes monitoring alerts in production followed at 20:44 UTC. The support team flagged the outage at 21:14 UTC.
- Remediation
- Reverted the node group deletion, which recreated the managed node groups
- Manually scaled up one of the Live API node groups with more and much larger nodes and removed its taints
- Removed node selectors from the applications one after another so their pods could be scheduled
- Action items
- Treat Karpenter errors as high-urgency alerts that page the on-call engineer
- Tune cluster alerting thresholds to send a high-urgency page earlier
- Add alerts for nodes that stay NotReady or Unknown for long periods
- Raise the thresholds of other deployment alerts, such as unschedulable pods and replicas not available
- Give Karpenter its own IAM instance profile, separate from the one used by the node groups
- Separate other AWS resources that were shared between uses, specifically IAM and security groups
- Rework the EKS and Karpenter configuration so system instance profiles are unique, static per cluster and generated by Karpenter
- Introduce a cloud visualization tool for engineers making infrastructure changes
- Add live system and product metrics to the status page
- Ask AWS to confirm the undocumented actions and side effects of deleting a node group
- Correct the shared use of IAM roles and security groups across the infrastructure
- Lessons
The IAM role for Karpenter's self-managed nodes should never have been the same as the one for the managed node groups; sharing it is what let the node group deletion break Karpenter, and the roles had been left combined for speed and simplicity when Karpenter was first set up. The hours-long delay between the configuration change and its effect made the incident hard to assess, and AWS confirmed that this delay is expected, so Stytch will allow for it in future IAM instance profile changes.
IL-0449Pods on Enigmo's new EKS managed node groups kept restarting or stuck Terminating and the nodes became unusableEnigmo2020- Symptoms
Two or three days after Enigmo created EKS managed node groups and moved its pods there from the old node groups, the cluster suddenly became unstable: pods restarted again and again or could not stop and stayed around indefinitely, node CPU and memory load rose high, and the nodes became unusable from the cluster.
- Trigger
Enigmo created EKS managed node groups that used an AMI containing the bug and moved its pods onto them, as preparation for upgrading EKS from 1.15 to 1.16.
- Root cause
- Component
- Contributing factor
- Remediation
- Changed the managed node groups' AMI version to the fixed release
- Ran the managed node group update through CloudFormation
- Watched the pods across all namespaces during the update
- Force-deleted every pod that stayed in Terminating with kubectl delete --grace-period=0 --force
- Action items
- Check the latest releases of the cluster's modules quarterly or monthly and upgrade them regularly
- Lessons
As long as a team uses Amazon EKS or Kubernetes, it has to keep track of upgrades of the cluster and of modules such as ingress controllers, because a release with breaking changes can be announced without warning after a long stable period. Checking releases and upgrading on a regular schedule keeps the effect of each upgrade on the service small.
These 4 cases involve Node operating system image and Node pool. 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 change2 cases
- Component
- Contributing factor
- Organisation
IL-0153DOKS worker nodes went NotReady at 06:00 UTC on three days because a systemd timer in the Debian image ran apt upgrade and killed it mid kernel upgrade, breaking node networkingDigitalOcean2023IL-0231Deleting EKS managed node groups also deleted Karpenter's instance profile, and every Stytch worker node shut downStytch2023
Breaking change in an upgrade2 cases
- Contributing factor
IL-0198An automatic Ubuntu security update restarted systemd-networkd, which flushed the IP rules Cilium relied on and cut more than 60 percent of Datadog's Kubernetes nodes off the network across regions and cloud providersDatadog2023IL-0449Pods on Enigmo's new EKS managed node groups kept restarting or stuck Terminating and the nodes became unusableEnigmo2020