Cases3 cases
1 to 3 of 3
- Symptoms
At 13:42 the RootVolUtilisation-Critical alert fired in the high-priority alerts channel. At 14:03 a user reported image pull errors with the message "no space left on device".
- Trigger
Upgrading the EKS Terraform module to version 18, which changed the node launch template, and draining workloads onto the new nodes it created.
- Root cause
- Component
- Contributing factor
- Detection
The RootVolUtilisation-Critical alert fired in the high-priority alerts channel at 13:42, and a user reported "no space left on device" image pull errors at 14:03.
- Remediation
- Uncordoned the old default node group and drained the new nodes to move workloads back
- Identified the launch template change that cut the root volume to 20 GB and applied a fix on the manager and live clusters
- Drained the old node group onto the fixed nodes
- Action items
- Update the runbook to compare launch template changes during an EKS module upgrade
- Create a test setup that pulls images of different sizes, like live
- Update the RootVolUtilisation alert runbook to check the disk space configuration
- Scale CoreDNS dynamically based on the number of nodes
- Investigate whether IPv6 can solve the IP prefix starvation problem
- Add drift testing to identify when a terraform plan shows a change to the launch template
- Set up logging for the CNI and ipamd logs and alerts on errors related to IP prefix starvation
- Lessons
The write-up lists review actions rather than lessons. They aim at two gaps: the launch template changes brought by a module upgrade were not compared or drift-tested before rollout, and there were no CNI or ipamd logs or alerts to show the IP prefix starvation the team suspected during the drain.
- Symptoms
At 08:15 a user posted in the #ask-cloud-platform channel that new deployments were not starting: their pods stayed in ContainerCreating.
- Root cause
- Component
- Contributing factor
- Detection
A user reported new deployments stuck in ContainerCreating in the #ask-cloud-platform channel at 08:15; the incident was declared at 09:31.
- Remediation
- Added new nodes and cordoned and drained the six affected nodes
- Enabled prefix delegation in the VPC CNI on the live cluster after comparing its CNI settings with a 1.23 test cluster
- Action items
- Add a test or check that confirms IP address allocation is working as expected (#4669)
- Lessons
The write-up states no lessons beyond its review action, which is to add a check that IP address allocation works.
- Symptoms
At 09:33 UTC on 14 February 2023 end users told the platform team that Kubernetes logs were not arriving in CloudWatch as expected. The investigation went through fluentd and found that the nodes were running containerd as their container runtime instead of docker-shim. A scheduled node rollover the day before, at 07:30 UTC on 13 February, had set containerd as the default runtime by accident.
- Trigger
A scheduled node rollover had accidentally made containerd the default container runtime, which stopped log shipping to CloudWatch; the unscheduled rollover to revert it timed out, and the pipeline run that followed reduced the Auto Scaling group from 30 to 15 instances.
- Root cause
- Component
- Contributing factor
- Detection
End users reported the missing CloudWatch logs that started the work. The postmortem lists 2 minutes as the time to detection of the node failure.
- Remediation
- ran the node rollover script to add new nodes, which failed on a timeout from Docker Hub
- ran the node rollover script a second time, which added new nodes that the load balancer marked healthy at 11:01 UTC
- Action items
- Document the rollover process, especially what can be done when it goes wrong
- Investigate options for improving the rollover process
- Add fluentd log collection to the QA test suite so logs are covered end to end
- Add alarms for fluentd when too little or no log data is sent
- Implement a staging environment
- Implement guards against selecting an invalid container runtime
- Lessons
When a change goes wrong, rolling back to a known working configuration is safer than rushing a fix, which can make the damage worse. Launching new worker nodes depends on the cloud-init script not failing in any way. The QA configuration differed from production, there was no staging environment, the QA tests did not cover fluentd log collection, and the rollover process had no documentation for when it fails.
These 3 cases involve Node pool and Node launch template. 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 change3 cases
- Component
- Contributing factor
- Organisation
IL-0019An EKS Terraform module upgrade shrank node root disks from 100 GB to 20 GB and image pulls failed with no space left on deviceIL-0017AWS VPC CNI stopped allocating pod IP addresses on six nodes of the live cluster, leaving new pods in ContainerCreatingIL-0109A retried node rollover on a DFDS EKS cluster set the Auto Scaling group back to 15 instances, and the default termination policy removed every healthy worker node, leaving the cluster with no nodesDFDS2023