IL-0014 loveholidays · 2019-03-19kubernetesgcp
loveholidays 는 온프레미스 애플리케이션을 GKE 로 옮기느라 클러스터와 노드 풀 업그레이드를 미뤘고, 사용 가능한 버전보다 두 버전 뒤처져 있었다. 다른 클러스터와 환경에서 같은 업그레이드를 미리 테스트했고, 저녁에 2시간에서 2시간 30분이면 마스터와 노드 풀을 모두 올릴 수 있다고 봤다. 마스터를 당시 최신인 1.12.5-gke.10 으로 올린 뒤 노드 풀을 차례로 올렸다. 7노드짜리 노드 풀 두 개는 문제없이 끝났지만 그 뒤로 문제가 잇달았다.
드레인이 느려 노드를 하나씩 올려서는 적당한 시간 안에 끝낼 수 없었다. 오래된 노드 풀의 관리형 인스턴스 그룹은 빈 노드 6개를 붙든 채 Pending 파드를 처리하지 못했다. 노드 풀 업그레이드 하나는 멈췄다. 네임스페이스와 이름을 합쳐 44자에서 47자인 인그레스만 망가지는 알려진 버그로 내부 인그레스 몇 개가 내려갔다. 사전 검증 환경이 있었지만 운영 인그레스 이름이 세 글자 더 길어서 사전 검증에서 걸러지지 않았다. 다음 날에는 HPA 가 CPU 부하를 읽지 못해 파드를 최대치까지 늘렸고, 팀은 정확한 원인을 찾지 못했다.
구글은 1.12.5-gke.10 에서 마스터 오류율이 높아진다는 보고를 받고 3월 14일부터 이 버전을 내리는 중이었다. 3월 26일에는 인그레스 버그를 고치고 클러스터 오토스케일링을 개선한 1.12.6-gke.7 이 나왔다. 릴리스 노트를 먼저 확인했다면 일부 문제는 쉽게 막을 수 있었다.
미뤄 둔 GKE 업그레이드를 하던 저녁, 마스터는 문제없이 올라갔지만 노드 풀 업그레이드가 예상보다 훨씬 오래 걸렸다. 노드가 14개이고 노드당 5분쯤 걸리는 클러스터도 한 시간 넘게 걸렸고, 일부 노드는 드레인에 15분 넘게 걸렸다. emptyDir 를 쓰는 파드와 5분에서 10분짜리 terminationGracePeriodSeconds 가 드레인을 늦췄다.
오래된 노드 풀 하나는 이상한 상태였다. 파드를 하나도 돌리지 않는 노드 6개가 종료되지 않고 남아 있었다. Pending 상태의 파드는 이 빈 노드에 스케줄되지도 않았고, 클러스터 오토스케일러가 노드를 늘리게 하지도 못했다.
노드 풀 하나의 업그레이드는 그냥 멈췄다. 노드가 드레인되는 기미가 없었고, 노드 풀 변경이 진행 중이라 UI 로는 클러스터를 바꿀 수도 업그레이드를 취소할 수도 없었다. gcloud container operations describe 출력에는 detail: 'Done with 1 out of 20 nodes (5.0%): 1 being processed, 1 succeeded' 와 status: RUNNING 이 찍혀 있었다.
업그레이드 뒤에는 내부용 인그레스 몇 개가 동작을 멈췄고, 로그로는 원인을 알 수 없었다. 다음 날에는 CPU 기반 HorizontalPodAutoscaler 가 현재 CPU 부하를 보고하지 않아 최대치에 닿을 때까지 계속 스케일 아웃했다. 하위 시스템 부하와 비용이 늘었고 배포도 느려졌다. 배포 하나에 활성 레플리카셋 두 개가 몇 시간씩 남아 있는 경우도 보였다.
업그레이드하던 엔지니어가 드레인이 느리고 노드 풀 업그레이드가 멈추고 파드가 Pending 에 머무는 것을 직접 보았다. 인그레스 장애는 업그레이드 뒤에 드러났고, 로그로 원인을 찾지 못해 구글 지원팀에 물어 알려진 버그라는 것을 알았다. HPA 이상은 업그레이드 다음 날 발견했다.
클러스터를 업그레이드하기 전에는 GKE 릴리스 노트를 먼저 봐야 한다. 운영이 아닌 환경에는 자동 업그레이드를 써서 영향을 먼저 겪고, 운영에는 수동 클러스터 업그레이드와 자동 노드 업그레이드를 섞어 예측 가능성과 유지 부담 사이에서 균형을 잡는다. 사전 검증 환경은 이름까지 운영과 같게 둬야 한다. 노드 풀 업그레이드 시간은 노드 수와 드레인 시간에 달려 있다. emptyDir 를 쓰는 파드에 safe-to-evict 어노테이션을 달고, 지나치게 긴 종료 유예 시간을 다시 따져 보고, PodDisruptionBudget 을 두면 드레인이 빨라진다.
IL-0096 GCP europe-west2-b 존의 자원이 바닥나 이 존 하나에 묶인 GKE 노드 풀이 늘어나지 못했고, LIS 허브의 사용자 서버가 6시간 30분 동안 뜨지 않았다.2i2c · 2022같은 원인 · 공통 노드 풀, 클러스터 오토스케일러
IL-0205 Google Cloud us-east1 의 SSD 영구 디스크 재고가 바닥나 GKE 클러스터 오토스케일러가 프로덕션 노드를 늘리지 못했고, API 디플로이먼트가 파드를 띄울 용량을 얻지 못했다.GitLab · 2021같은 원인 · 공통 노드 풀, 클러스터 오토스케일러
IL-0020 편집자가 연결함https://incidentlib-mcp.benchlet.com/mcpAPI 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.