IL-0096 2i2c · 2022-11-14kubernetesgcp
2i2c 는 리전 클러스터를 배포하지만, 성능을 높이려고 노드를 NFS Filestore 와 같은 존 하나에만 두도록 묶어 두었다. 2022년 11월 14일 영국 시각 오전 10시, 태평양 시각 02:00 에 Google Cloud 런던 리전인 europe-west2 의 B 존에서 할당할 자원이 바닥났다. 그 결과 LIS 허브 클러스터가 늘어나지 못했고 사용자는 "backoff after failed scale-up" 메시지를 봤다.
엔지니어는 이 오류를 흔한 쿼터 문제로 보고 Persistent Disk SSD 쿼터와 CPU 쿼터를 올렸지만 둘 다 효과가 없었다. 결국 로그에서 ZONE_RESOURCE_POOL_EXHAUSTED 오류를 찾았고, 요청한 존에 Google 의 자원이 남아 있지 않다는 뜻임을 확인했다. GCP 콘솔에서 해당 노드 풀을 고쳐 같은 리전의 A 존과 C 존에도 노드를 만들 수 있게 하자 문제가 풀렸다. 새 노드는 europe-west2-c 에 생겼다. 영향은 태평양 시각 02:00 부터 08:30 까지 6시간 30분 이어졌다.
이 조치는 임시방편이다. NFS Filestore 를 존을 넘어 쓰게 되므로 성능이 떨어진다. 장애 동안 엔지니어 한 명이 인시던트 지휘, 공지, 디버깅을 오랜 시간 혼자 맡았다. 호출 알림도 대응 엔지니어에게 닿지 않았다.
2022년 11월 14일 LIS 허브 사용자가 "backoff after failed scale-up" 오류를 보고했다. 사용자 서버가 뜨지 않았고 노드 풀이 늘어나지 않았다.
파드 이벤트에는 다음 두 줄이 찍혔다. 첫 줄은 "Warning FailedScheduling 3m29s http://gke.io/optimize-utilization-scheduler 0/2 nodes are available: 2 node(s) didn't match Pod's node affinity/selector. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling." 이고, 둘째 줄은 "Normal NotTriggerScaleUp 3m27s cluster-autoscaler pod didn't trigger scale-up: 1 node(s) didn't match Pod's node affinity/selector, 1 in backoff after failed scale-up" 이다. 허브 로그에는 "sgibson91's server failed to start in 600 seconds, giving up.", "3 consecutive spawns failed. Hub will exit if failure count reaches 5 before succeeding", "pod lis/jupyter-sgibson91 did not start in 600 seconds!" 가 남았다.
엔지니어는 "backoff after failed scale-up" 이 보통 쿼터 문제라고 보고, 빨간색으로 표시된 Persistent Disk SSD 쿼터를 두 배로 올렸다. 효과가 없었다. 프로메테우스 서버가 쓰는 100GB PVC 를 찾았지만, 이 PVC 가 스케일 실패와 무슨 상관인지는 알 수 없었다. CPU 쿼터도 48로 두 배 올렸지만 소용없었다. 사용자 서버라도 하나 띄워 보려고 콘솔에서 nb-user 노드 풀을 노드 1개로 직접 늘렸다. 콘솔에는 크기 조정이 끝났다고 나왔지만 `k get nodes` 에 새 노드가 보이지 않았고 콘솔의 노드 수도 0 그대로였다. 허브 파드를 지워 봤지만 이것도 효과가 없었다.
결국 로그에서 ZONE_RESOURCE_POOL_EXHAUSTED 오류를 찾았다. 첫 오류는 영국 시각 오전 10시에 찍혀 있었다. 엔지니어들은 이 오류가 요청한 존에 Google 이 내줄 자원이 더는 없다는 뜻임을 확인했다.
원인 ? 클라우드 제공자 장애
사용자가 "backoff after failed scale-up" 오류를 보고하면서 장애가 드러났다. 영향은 태평양 시각 02:00 에 시작됐고, 인시던트는 3시간 40분 뒤인 05:40 에 열렸다.
엔지니어 한 명이 인시던트 지휘, 공지, 디버깅을 오랫동안 혼자 맡았다. 팀이 함께 나서서 이 엔지니어를 더 많이 도울 수 있었다. 호출 알림이 대응 엔지니어에게 닿지 않아 이 문제가 더 커졌다. "backoff after failed scale-up" 은 보통 쿼터 문제지만 이번에는 쿼터를 올려도 소용이 없었다. 원인은 로그의 ZONE_RESOURCE_POOL_EXHAUSTED 오류에서 드러났다.
같은 원인 · 공통 클러스터 오토스케일러, 노드 풀
같은 원인 · 공통 클러스터 오토스케일러, 노드 풀