Cases2 cases
1 to 2 of 2
IL-0112The daily node rollover put DFDS's EKS nodes on an AMI later recalled for a kernel issue, causing "PLEG is not healthy" NodeNotReady flaps and pod network timeoutsDFDS2022- Symptoms
On 2022-10-31 a planned upgrade of the vpc-cni EKS add-on, started from the deployment pipeline at 13:45 UTC, timed out at 14:10. Only about 10 of the 45 aws-node pods had upgraded, 5 were stuck in Terminating and the other 30 had not been attempted.
- Trigger
At 07:30 UTC on 2022-10-31 the daily node rollover replaced the existing nodes with nodes built from AMI v20221027, the latest AWS EKS node AMI, released on 2022-10-29 and later recalled because of a kernel issue.
- Root cause
- Component
- Contributing factor
- Detection
The team noticed nodes flapping between NodeNotReady and NodeReady ("KubeletNotReady PLEG is not healthy") at 14:30 UTC while watching the stalled vpc-cni upgrade, about seven hours after the rollover. Time to detection was 7 hours. Alerting did not catch the NodeNotReady events or the socket growth.
- Remediation
- cordoned, drained and deleted 15 stuck nodes one at a time to complete the vpc-cni upgrade
- changed the Terraform infrastructure-modules so a specific AMI could be set
- rolled the EC2 Auto Scaling group launch configuration back to the previous known good AMI through the pipeline
- Action items
- Reach out to teams with suggestions about readiness and liveness probes
- Create a dashboard for readiness and liveness probe coverage
- Write a wiki article on readiness and liveness probes and their usefulness
- Modify infrastructure-modules to allow specifying a particular AMI
- Schedule a discussion on whether to take the latest AMI immediately and how to test new AMIs before they are deployed
- Implement alerting on abnormal NodeNotReady events and on increased socket use
- Create a learning path for Kubernetes within the team
- Collect logs from nodes centrally
- Create a Prometheus exporter that retrieves the latest available AMI, with a dashboard and alerts
- Lessons
When a new node AMI has just been rolled out, upgrading other cluster components on the same day makes it hard to tell which change is causing trouble; here the vpc-cni upgrade on the same day confused matters. Taking the latest AMI automatically with no way to pin one meant a rollback first needed a Terraform change. The team also concluded that it needs better communication paths with application teams during incidents.
IL-0208A GitLab chart bump that renamed Kubernetes Service and Deployment ports made the GCP load balancer reconfigure, and GitLab.com slowed down and returned intermittent 50x errorsGitLab2022- Symptoms
At 07:53 UTC on 2022-03-31 the rate of 50x errors on GitLab.com went up, and at 07:54 PagerDuty paged the engineer on call (EOC) about the rising error rate. Users saw slow pages and intermittent 50x error pages. The incident lists the Web, API, Git and Pages services as affected.
- Trigger
A k8s-workloads/gitlab-com pipeline deployed merge request !1643, a GitLab chart bump that changed the port names of Kubernetes Services and Deployments (related to the Prometheus service and pod monitors), starting with the canary environment gprd-cny at 07:49 UTC.
- Root cause
- Component
- Contributing factor
- Detection
A PagerDuty alert on the rising error rate paged the EOC at 07:54 UTC, one minute after the 50x errors went up. The engineer deploying the change noticed the errors and linked them to it.
- Remediation
- drained the canary environment and re-enabled it after twenty minutes
- cancelled the deployment jobs for clusters c and d before they started
- drained gprd-us-east1-d in HAProxy and re-enabled it five minutes later
- raised the minimum replica count above 100 (merge request !1650)
- drained gprd-us-east1-c in HAProxy, deployed the change to it, and re-enabled it
- reverted the minimum replica increase (merge request !1652)
- Action items
- Implement graceful draining of a whole regional cluster
- Create a Chatops command that puts PagerDuty into maintenance mode
- Lessons
Renaming ports on Kubernetes Services and Deployments behind a GCP load balancer made the load balancer reconfigure, and requests were slow or timed out until the new configuration had fully applied, which took minutes. GitLab notes that alerting worked well. The follow-up work is a way to drain a whole regional cluster gracefully and a Chatops command to put PagerDuty into maintenance mode.
These 2 cases involve Cloud load balancer and HAProxy. 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
Software defect1 case
- Contributing factor
- Organisation
Configuration change1 case
- Component
- Contributing factor
- Organisation