{"id":"IL-0036","org":"Universe","date":"2017-07-21","docs":["https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#handling-pod-and-container-failures"],"title":{"en":"A reindex Job that kept failing exhausted one node after another until the whole cluster was down","ko":"재시도를 멈추지 않는 쿠버네티스 Job 이 노드 자원을 다 써 버려 클러스터의 노드가 차례로 죽고 검색과 리포트가 멈췄다."},"domain":["kubernetes"],"impact":{"scope":"the reporting and search APIs and the Kubernetes cluster UI; every node in the cluster","users":"unknown","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"restartPolicy: Never on the pod template does not stop a Kubernetes Job from retrying: a Job replaces failed pods and may run more than once, so a job that can exhaust a node will keep moving to new nodes.","ko":"RestartPolicy=Never 는 파드에만 적용되고 Job 에는 적용되지 않는다. Job 은 실패하면 항상 다시 시작되고 두 번 이상 실행될 수 있다. 노드 자원을 다 쓰는 작업을 Job 으로 돌리면 그 Job 이 노드를 옮겨 다니며 클러스터의 노드를 모두 쓰러뜨릴 수 있다."},"related":[],"sources":[{"url":"https://status.universe.com/incidents/115n3vxqwzcf","kind":"official-status","license":"unknown","archived":null}],"summary":{"en":"Universe had recently moved this service to Kubernetes and ran background tasks as Kubernetes Jobs. To fix poor search results in Discover, the team redefined a search index to exclude some fields from full-text search and started a reindex job.\n\nThe Job's pod consumed all resources on its node, the node went unhealthy and was killed, and Kubernetes started the Job again on another node. The team had set RestartPolicy=Never and expected that to stop retries, but that setting applies to the pod, not to the Job: a Job starts new pods after a failure and may run more than once. The Job therefore moved from node to node and took each one down, until all nodes were under repair and new nodes were killed as soon as they joined.\n\nThe outage ended when the team removed the Job from the scheduler; the nodes then auto-healed back to a healthy state. The status page shows the investigation opened at 14:37 EDT and the incident resolved at 14:55 EDT.","ko":"Universe 는 Discover 검색 결과를 흐리던 버그를 고쳤다. 전문 검색 색인에 들어가 있던 데이터 필드들을 빼도록 색인을 다시 정의했고, 이 변경을 배포한 뒤 재색인 Job 을 띄웠다. 이 서비스는 얼마 전 쿠버네티스로 옮겨졌고, 팀은 이런 백그라운드 작업을 쿠버네티스 Job 으로 돌렸다.\n\n재색인 Job 은 노드의 가용 자원을 모두 써 버렸다. 노드는 Unhealthy 가 되어 종료됐고, 쿠버네티스는 이 Job 을 다른 노드에 다시 배치했다. 그 노드도 같은 일을 겪었다. 이 과정이 되풀이되어 모든 노드가 복구 중인 상태가 됐고, 새 노드가 올라오면 곧바로 다시 죽었다. Job 에 RestartPolicy=Never 를 설정했지만 이 값은 파드에만 적용됐다. Job 자체는 실패하면 항상 다시 시작되고 두 번 이상 실행될 수 있다.\n\n팀이 문제의 Job 을 스케줄러에서 지우자 모든 노드가 자동으로 회복해 정상으로 돌아왔다. 장애 동안 리포트 API, 검색 API, 쿠버네티스 클러스터 UI 가 영향을 받았다."},"trigger":{"en":"A change to the search index definition, which removed some fields from full-text indexing, was shipped, and a reindex job was started as a Kubernetes Job to apply it.","ko":"Discover 검색 색인에서 일부 데이터 필드를 빼는 변경을 배포하고, 새 설정을 적용하려고 쿠버네티스 Job 으로 재색인 작업을 띄웠다."},"severity":"unknown","symptoms":["service-unavailable","node-not-ready","nodes-recreated-in-loop"],"timeline":{"detected_after":null,"resolved_after":null},"date_kind":"incident","detection":{"en":"The team saw problems with the Kubernetes cluster shortly after starting the job, and the status page cites reports of search and reporting being unavailable.","ko":"재색인 Job 을 띄운 직후 팀이 리포트 API, 검색 API, 쿠버네티스 클러스터 UI 의 문제를 알아챘다. 팀은 상태 페이지에 검색과 리포트를 쓸 수 없다는 보고를 조사하고 있다고 올렸다."},"components":["job-controller","pod-scheduling"],"root_cause":"capacity","remediation":[{"text":{"en":"removed the reindex Job from the scheduler","ko":"문제의 재색인 Job 을 스케줄러에서 지웠다."}},{"text":{"en":"let the nodes auto-heal back to healthy","ko":"노드들이 자동으로 회복해 모두 정상으로 돌아왔다."}}],"action_items":[],"contributing":["assumption-unverified","automation-amplified","blast-radius-too-wide"],"recurrence_of":null,"symptoms_text":{"en":"Shortly after a search reindex job was started, problems with the Kubernetes cluster hit Universe's reporting and search APIs and the Kubernetes cluster UI itself. The status page opened an investigation into reports of search and reporting being unavailable at 14:37 EDT on 2017-07-21.\n\nNodes failed in sequence. The job used up all available resources on the node it ran on, that node became unhealthy and was killed, and the job was started again on another node, which then failed the same way. This went on until every node was being repaired, and each replacement node was killed soon after it came online.","ko":"재색인 Job 을 띄운 직후 Universe 의 리포트 API 와 검색 API 에 문제가 생겼다. 쿠버네티스 클러스터 UI 도 함께 영향을 받았다.\n\n14:37 EDT 에 상태 페이지에 글이 올라왔다. 검색과 리포트를 쓸 수 없다는 보고를 조사하고 있다는 내용이었다. 14:55 EDT 에 해결됐다는 공지가 올라왔다.\n\n노드는 하나씩 Unhealthy 가 되어 종료됐다. 결국 모든 노드가 복구 중인 상태가 됐고, 새 노드가 올라와도 곧바로 다시 죽었다.\n\n팀은 Job 에 RestartPolicy=Never 를 설정해 두었다. 조사해 보니 이 설정은 Job 이 아니라 파드에 적용됐다. Job 은 실패하면 항상 다시 시작되고 두 번 이상 실행될 수 있었다."},"updated_at":"2026-11-08T19:10:29.160797Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0036","org_slug":"universe"}