{"id":"IL-0514","org":"Python Software Foundation","date":"2022-07-28","docs":[],"title":{"en":"PyPI's backends stopped responding for 7 minutes as rescheduled pods could not start while Consul and Vault were down","ko":"클라우드 사업자의 노드 교체 뒤 Consul 이 리더를 뽑지 못하고 Vault 가 봉인된 채 남아 PyPI 백엔드가 7분 동안 응답하지 않았다"},"domain":["kubernetes","database"],"impact":{"scope":"PyPI backends","users":"unknown","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":null,"related":[],"sources":[{"url":"https://status.python.org/incidents/wcwq0pp25ffb","kind":"official-status","archived":"https://web.archive.org/web/20240519085120/https://status.python.org/incidents/wcwq0pp25ffb"}],"summary":{"en":"PyPI runs on a Kubernetes cluster, with Consul and Vault clusters inside it as the management layer that deploys and secures PyPI's application servers. On 28 July 2022, from 17:24 UTC, the cloud provider automatically replaced several cluster instances because of an unknown failure, and all of them were healthy members of the cluster again by 18:20 UTC. The replacements moved many pods, and Consul and Vault restarted on the new nodes. Consul could not elect a leader and the new Vault containers stayed sealed. Without these services new PyPI containers failed, pods rescheduled from the replaced nodes could not start, and at 18:46 UTC PyPI became unresponsive.\n\nThe responding Infrastructure Team member worked first on Consul. Consul recovered only after the pod stuck in \"Terminating\" was forcefully removed and allowed to be recreated; the responder then unsealed the new Vault containers, and PyPI's backends were back at 18:53 UTC.","ko":"2022-07-28 17:24 UTC 부터 PyPI 가 도는 쿠버네티스 클러스터의 클라우드 인스턴스 여러 대를 사업자가 알 수 없는 장애로 자동 교체했고, 18:20 UTC 에는 모든 인스턴스가 교체되어 정상이었다. 교체로 많은 파드가 재배치되며 클러스터 안의 Consul 과 Vault 가 새 노드에서 재시작됐다. 18:23 UTC 에 Vault 봉인 해제가 필요하다는 첫 알림이 왔고, 살펴보니 Vault 컨테이너는 모두 쓸 수 없었고 Consul 은 새 리더를 뽑지 못했다.\n\nConsul 파드 하나가 Terminating 상태에 멈춰 있어서 Consul 서버 탐색 기능이 선출에 서버 하나가 더 들어오기를 기다렸다. PyPI 애플리케이션 서버를 배포하고 보호하는 관리 계층인 Consul 과 Vault 가 내려가 있자, 재배치된 PyPI 컨테이너가 시작하지 못했고 18:46 UTC 에 PyPI 가 응답하지 않게 됐다. 대응한 인프라 팀원이 멈춘 파드를 강제로 지워 다시 만들어지게 하자 Consul 이 회복됐고, 이어 새 Vault 컨테이너의 봉인을 풀었다. PyPI 백엔드 장애는 18:46 UTC 부터 18:53 UTC 까지였다."},"trigger":{"en":"From 17:24 UTC the cloud provider automatically replaced several instances of PyPI's Kubernetes cluster because of an unknown failure. All replacements were healthy by 18:20 UTC, but the event reshuffled many pods and restarted Consul and Vault on new nodes.","ko":"2022-07-28 17:24 UTC 부터 클라우드 사업자가 알 수 없는 장애를 이유로 PyPI 가 도는 쿠버네티스 클러스터의 클라우드 인스턴스 여러 대를 자동으로 교체했다."},"severity":"unknown","symptoms":["service-unavailable","pod-stuck-terminating"],"timeline":{"detected_after":null,"resolved_after":"7m"},"date_kind":"incident","detection":{"en":"An alert at 18:23 UTC told PSF Infrastructure that at least one Vault container was down and needed unsealing.","ko":"18:23 UTC 에 PSF 인프라 팀에 Vault 컨테이너가 적어도 하나 내려가 있고 봉인 해제가 필요하다는 알림이 왔다."},"components":["coordination-store","secrets-store"],"root_cause":"cloud-provider","remediation":[{"text":{"en":"Forcefully removed the Consul pod stuck in Terminating so it was recreated and Consul could elect a leader","ko":"Terminating 상태에 멈춘 Consul 파드를 강제로 지우고 다시 만들어지게 했다. 그 뒤 Consul 회복이 시작됐다."}},{"text":{"en":"Unsealed the new Vault containers","ko":"Consul 을 되살린 뒤 새 Vault 컨테이너의 봉인을 풀었다."}}],"action_items":[],"contributing":["automation-amplified"],"recurrence_of":null,"symptoms_text":{"en":"At 18:23 UTC on 28 July 2022, PSF Infrastructure got an alert that at least one Vault container in PyPI's Kubernetes cluster was down and needed unsealing. At 18:46 UTC PyPI's backends became unresponsive, and they stayed down until 18:53 UTC.\n\nThe responder found that every Vault container in the cluster was unavailable and that the Consul containers could not establish a new leader. One Consul pod was stuck in the \"Terminating\" state, and Consul's server discovery kept waiting for that extra server to take part in the election, which held up the recovery of Consul.\n\nWhile Consul and Vault were offline, new containers started to serve PyPI's applications failed, so containers rescheduled after the node replacements could not start. As Kubernetes rescheduled more and more containers to reach the specified instance count, PyPI became unresponsive.","ko":"18:23 UTC 에 PSF 인프라 팀에 Vault 컨테이너가 적어도 하나 내려가 있고 다시 올라오려면 봉인 해제가 필요하다는 첫 알림이 왔다. 살펴보니 클러스터의 Vault 컨테이너는 모두 쓸 수 없었고 Consul 컨테이너는 새 리더를 뽑지 못하고 있었다.\n\n앞서 17:24 UTC 부터 클라우드 사업자가 알 수 없는 장애를 이유로 PyPI 가 도는 쿠버네티스 클러스터의 클라우드 인스턴스 여러 대를 자동으로 교체했다. 18:20 UTC 에는 모든 인스턴스가 교체되어 클러스터의 정상 노드가 됐지만, 이 과정에서 많은 파드가 재배치되며 Consul 과 Vault 가 새 노드에서 재시작됐다.\n\nConsul 을 되살리는 일이 꼬였다. Consul 파드 하나가 Terminating 상태에 멈춰 있었고, Consul 서버 탐색 기능이 선출에 서버 하나가 더 참여하기를 기다리며 멈췄다.\n\nConsul 과 Vault 가 내려가 있는 동안 PyPI 애플리케이션을 띄우려는 새 컨테이너는 실패했다. 노드 교체로 재배치된 컨테이너가 시작하지 못했고, 쿠버네티스가 정해진 개수를 맞추려고 컨테이너를 계속 재배치하면서 18:46 UTC 에 PyPI 가 응답하지 않게 됐다."},"updated_at":"2026-11-14T12:34:15.814873Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0514","org_slug":"python-software-foundation"}