{"id":"IL-0020","org":"UK Ministry of Justice","date":"2025-03-18","docs":[],"title":{"en":"During an EKS 1.30 upgrade the descheduler tried to reschedule every pod on the cordoned nodes at once and production workloads went down","ko":"EKS 1.30 업그레이드 중 디스케줄러가 cordon 된 노드의 파드를 한꺼번에 쫓아내 운영 서비스가 멈췄다"},"domain":["kubernetes","aws"],"impact":{"scope":"User workloads in production and non-production environments on the live cluster were disrupted, causing outages on production services","users":"unknown","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"The write-up lists review actions rather than lessons. They show the team had no documented way to add an emergency node group, no alert on a mismatch between the autoscaling group and the nodes Kubernetes sees, no alert on a spike in pending pods, and no clear understanding of how the descheduler treats cordoned nodes.","ko":"이 글은 교훈 대신 후속 조치를 적었다. 조치를 보면 팀에는 비상용 노드 그룹을 급히 추가하는 문서화된 절차가 없었다. 오토스케일링 그룹과 쿠버네티스가 보는 노드가 어긋날 때 울리는 알림도, Pending 파드가 급증할 때 울리는 알림도 없었다. 팀은 디스케줄러가 cordon 된 노드를 어떻게 다루는지도 분명히 알지 못했다."},"related":[],"sources":[{"url":"https://runbooks.cloud-platform.service.justice.gov.uk/incidents/2025-03-18-aws-eks-upgrade-to-1-30.html","kind":"runbook","license":"unknown","archived":"http://web.archive.org/web/20260413145917/https://runbooks.cloud-platform.service.justice.gov.uk/incidents/2025-03-18-aws-eks-upgrade-to-1-30.html"}],"summary":{"en":"On 18 March 2025 the Ministry of Justice Cloud Platform team was upgrading the live EKS cluster from 1.29 to 1.30. During the upgrade the descheduler tried to reschedule all pods on the cordoned nodes at once, while some new 1.30 nodes were stuck. User pods were terminated and did not come back, which caused outages on production services.\n\nFrom 10:15 the team removed the cordon annotation so pods could be rescheduled and deleted some stuck 1.30 nodes to force their recreation. Pods began recovering at 10:40 and services were operational again; the write-up gives the time to repair as 1h 37m. At 11:13 the team raised an AWS Production System Down support case.\n\nTo stabilise workloads and ensure redundancy the team added a new node group of 20 nodes on 1.30 by hand at 11:34, cordoned all old 1.29 nodes at 11:50 and drained them from 12:10. All nodes ran 1.30 by 16:16. The incident stayed open for clean-up and was closed at 12:09 on 20 March; the write-up gives the time to resolve as 2d 1h 29m. Why the descheduler throws pods off cordoned nodes is left to a follow-up review of its configuration.","ko":"2025-03-18, UK Ministry of Justice 의 Cloud Platform 팀은 live 클러스터를 EKS 1.30 으로 올리고 있었다. 업그레이드 중 디스케줄러가 cordon 된 노드의 파드를 모두 한꺼번에 다시 스케줄하려 했고, 종료된 파드가 다시 뜨지 않았다. 운영과 비운영 환경의 사용자 워크로드가 영향을 받았고 운영 서비스에 장애가 났다.\n\n팀은 cordon 어노테이션을 지워 파드가 다시 스케줄되게 했고, 멈춘 1.30 노드 몇 대를 지워 새로 만들어지게 했다. 10:40 에 서비스가 돌아왔다. 보고서에 적힌 복구 시간은 1시간 37분이다. 11:13 에는 AWS 에 Production system down 지원 요청을 올렸다.\n\n이어서 11:34 에 1.30 노드 20대로 된 새 노드 그룹을 손으로 추가해 워크로드를 안정시켰다. 11:50 부터 예전 1.29 노드를 모두 cordon 했고, 12:10 부터 drain 해 워크로드를 1.30 노드로 옮겼다. 16:16 에 모든 노드가 1.30 이 됐고, 정리 작업을 마친 2025-03-20 12:09 에 장애가 종료됐다."},"trigger":{"en":"Upgrading the live EKS cluster from 1.29 to 1.30, during which the descheduler attempted to reschedule all pods on the cordoned nodes simultaneously.","ko":"EKS 1.30 업그레이드 중 디스케줄러가 cordon 된 노드의 파드를 모두 한꺼번에 다시 스케줄하려 했다."},"severity":"unknown","symptoms":["pods-evicted","pod-pending","service-unavailable","upgrade-stuck"],"timeline":{"detected_after":null,"resolved_after":"1h 37m"},"date_kind":"incident","detection":{"en":"Users reported at 09:36 that pods were being terminated and not restarting, and automated infrastructure alerts fired.","ko":"팀은 자동 인프라 알림과 사용자 보고로 장애를 알았다. 09:36 에 사용자들이 파드가 종료되고 다시 뜨지 않는다고 알렸다."},"components":["descheduler","node-pool","cluster-autoscaler"],"root_cause":"deploy-rollout","remediation":[{"text":{"en":"Removed the cordon annotation so pods could be rescheduled","ko":"cordon 어노테이션을 지워 파드가 다시 스케줄되게 했다."}},{"text":{"en":"Deleted stuck 1.30 nodes to force their recreation","ko":"멈춘 1.30 노드를 지워 새로 만들어지게 했다."}},{"text":{"en":"Added a new node group of 20 nodes running 1.30 by hand","ko":"1.30 노드 20대로 된 새 노드 그룹을 손으로 추가했다."}},{"text":{"en":"Cordoned and drained all old 1.29 nodes onto the new 1.30 nodes","ko":"예전 1.29 노드를 모두 cordon 하고 drain 해 워크로드를 새 1.30 노드로 옮겼다."}}],"action_items":[{"text":{"en":"Raise an AWS Production System Down support case (Case ID: 174229643100496)","ko":"AWS 에 Production System Down 지원 요청을 올려 추가 안내를 받았다. 요청 번호는 174229643100496 이다."}},{"text":{"en":"Get guidance from AWS support on querying control-plane logs to find the root cause of similar issues","ko":"비슷한 장애의 원인을 찾을 때 컨트롤 플레인 로그를 어떻게 조회하는지 AWS 지원팀에서 안내받았다."}},{"text":{"en":"Document a runbook for emergency scaling of a new node group in case of unexpected capacity shortages","ko":"용량이 갑자기 모자랄 때 새 노드 그룹을 급히 늘리는 런북을 쓴다."}},{"text":{"en":"Alert on an imbalance between the autoscaling group and the Kubernetes nodes","ko":"오토스케일링 그룹과 쿠버네티스가 보는 노드가 어긋나면 울리는 알림을 만든다."}},{"text":{"en":"Review the descheduler configuration to understand why it throws pods off cordoned nodes, and fix it where possible","ko":"디스케줄러가 왜 cordon 된 노드에서 파드를 쫓아내는지 설정을 검토하고, 가능하면 고친다."}},{"text":{"en":"Alert on spikes in the pending pod count","ko":"Pending 파드 수가 갑자기 늘면 울리는 알림을 만든다."}}],"contributing":["no-spare-capacity","no-alert-on-limit","default-config-unchanged"],"recurrence_of":null,"symptoms_text":{"en":"At 09:36 on 18 March 2025, during the upgrade of the live cluster to EKS 1.30, users reported that their pods were being terminated and were not restarting automatically, in both production and non-production environments. Automated infrastructure alerts fired as well, and production services had outages.\n\nNodes had been cordoned for the upgrade, and the descheduler tried to reschedule all pods on the cordoned nodes at the same time. Some of the new 1.30 nodes were stuck and had to be deleted so they would be recreated. The Cloud Platform team began investigating at 09:50 and declared an incident at 10:03.","ko":"2025-03-18 09:36, 사용자들이 운영과 비운영 환경 모두에서 파드가 종료되고 자동으로 다시 뜨지 않는다고 알렸다. 자동 인프라 알림도 함께 울렸고, 운영 서비스에 장애가 났다.\n\n그때 live 클러스터는 EKS 1.30 으로 업그레이드하는 중이었다. 업그레이드를 위해 cordon 해 둔 노드에서 디스케줄러가 모든 파드를 한꺼번에 다시 스케줄하려 했다. 일부 1.30 노드는 멈춘 채로 남아 있었다.\n\n팀은 09:50 에 원인을 조사하기 시작했고 10:03 에 장애를 선언했다. 10:15 부터 cordon 어노테이션을 지워 파드가 다시 스케줄되게 하고, 멈춘 1.30 노드 몇 대를 지워 새로 만들어지게 했다. 10:40 에 파드가 살아나고 서비스가 돌아왔다."},"updated_at":"2026-11-10T00:00:37.471496Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0020","org_slug":"uk-ministry-of-justice"}