Cases2 cases
1 to 2 of 2
IL-0007The AWS VPC CNI could not assign IP addresses to pods as an EKS cluster ran out of IPv4 spaceAdevinta2024- Symptoms
One evening the platform team that runs SCHIP, Adevinta's internal runtime platform on Kubernetes, was paged because some DaemonSets were failing. Checking the pod status showed this error from the network plugin: name="aws-cni" failed (add): add cmd: failed to assign an IP address to container
- Trigger
Not stated for the first page. It came in June, during the migration from SCHIP's kube-aws-based clusters to EKS-based clusters; the write-up mentions spikes of pods, such as a job that goes rogue or failing jobs that keep their IPs, as ways a cluster can run out.
- Root cause
- Component
- Contributing factor
- Detection
A pager alert that some DaemonSets were failing. The on-call engineer checked the pod status and found the aws-cni error about failing to assign an IP address.
- Remediation
- Rolled out VPC CNI custom networking with a secondary CIDR to the smaller clusters from late August
- Paused the EKS migration in September while available IPs were very low
- Rolled out custom networking to the rest of the fleet
- Added the --reserved-enis parameter to the Karpenter deployment
- Action items
- Use VPC CNI custom networking with a secondary CIDR across the whole fleet
- Make Karpenter account for custom networking with the --reserved-enis parameter
- Lessons
For a platform team, the VPC CNI is not ready to scale in production without time spent on capacity planning, and every option has its pros and cons. For large clusters started today, IPv6 is the cheaper and more future-proof option. Do not assume that what works in small clusters will keep working when they grow.
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.
These 2 cases involve Karpenter and Configuration templating. 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
Capacity exhaustion1 case
- Contributing factor
- Organisation
Configuration change1 case
- Contributing factor
- Organisation