Incident Library

IL-0449 Enigmo · 2020-12-13 (게시일)kubernetesaws

EKS 관리형 노드 그룹으로 옮긴 며칠 뒤 파드가 재시작을 되풀이하거나 Terminating 상태에 멈추고 노드를 쓸 수 없게 됐다

Enigmo 는 일부 서비스에 Amazon EKS 클러스터를 쓰고, 2020년 봄 1.13 에서 1.15 로 올렸다. EKS 1.16 이 예상보다 일찍 나오자 팀은 1.16 업그레이드를 준비했다. 팀은 kubent 로 extensions/v1beta1 같은 폐기 예정 API 를 쓰는 리소스를 찾았다. 그리고 복제한 Deployment 를 잠시 띄워 파드 수가 0 이 되지 않게 하면서 그 리소스를 apps/v1 로 바꿨다. 그다음 EKS 1.13 때 EC2 LaunchTemplate 과 AutoScalingGroup 으로 만든 노드 그룹을 관리형 노드 그룹으로 옮기고 옛 노드 그룹을 지웠다. 관리형 노드 그룹은 그해 여름에야 LaunchTemplate 을 지원해 SecurityGroup 을 자유롭게 지정할 수 있게 됐다.

옮기고 2~3일 뒤 파드가 재시작을 되풀이하거나 종료되지 못하고 남았다. 노드의 CPU 와 메모리 부하가 높아져 노드를 쓸 수 없게 됐다. 원인은 관리형 노드 그룹을 만든 AMI 의 버그였다. 옛 노드 그룹은 이미 없었고, 관리형 노드 그룹은 최신 AMI 만 허용해 옛 AMI 로 되돌릴 수 없었다. 수정된 AMI 가 나온 뒤에도 파드가 종료되지 않아 노드 그룹 업데이트 중 Eviction 이 실패했다. 팀은 CloudFormation 으로 업데이트를 돌리면서 kubectl get pods --all-namespaces 로 파드를 지켜보고, Terminating 상태에서 한동안 변화가 없는 파드를 강제로 지웠다.

심각도
–
영향 범위
Pods on the EKS cluster's managed node groups restarted repeatedly or could not stop, and nodes became unusable under CPU and memory load
영향 사용자
–
지역
–
감지까지
–
복구까지
–

증상

EKS 클러스터의 파드를 새로 만든 관리형 노드 그룹으로 옮기고 2~3일 지나자, 파드가 갑자기 재시작을 되풀이하거나 제대로 종료되지 못하고 Terminating 상태로 계속 남았다. 노드의 CPU 와 메모리 부하가 높아져 클러스터에서 노드를 쓸 수 없게 됐다.

옛 노드 그룹은 이미 지운 뒤라 파드를 되돌릴 수 없었다. 팀은 파드를 간신히 돌리며 조사했고, "Pods stuck in terminating state after AMI amazon-eks-node-1.16.15-20201112" 로 알려진 버그에 걸렸다는 것을 알았다.

CloudFormation 으로 관리형 노드 그룹을 옛 AMI 로 바꾸려 하자 다음 오류가 났다. Requested Nodegroup release version 1.15.11-20201007 is invalid. Allowed release version is 1.15.12-20201112 (Service: AmazonEKS; Status Code: 400; Error Code: InvalidParameterException; Request ID: ----; Proxy: null) 관리형 노드 그룹은 최신 AMI 만 쓸 수 있어서 되돌릴 방법이 없었다.

수정된 AMI 가 나와 노드 그룹을 업데이트했다. 업데이트 과정에는 Taint 부여, Drain, 파드 Eviction 이 있는데, 파드가 종료되지 않아 Eviction 이 실패했고 노드 그룹 업데이트도 실패했다.

증상 파드 Terminating 정체노드 CPU 고부하메모리 압박노드 NotReady업그레이드 정체

원인

촉발
EKS 1.16 업그레이드를 앞두고 파드를 버그가 있는 AMI 로 만든 새 관리형 노드 그룹으로 옮기고 옛 노드 그룹을 지웠다.

감지

–

조치

후속 조치

교훈

Amazon EKS 나 쿠버네티스를 쓰는 한 클러스터 본체와 Ingress Controller 같은 모듈의 업그레이드를 늘 신경 써야 한다. 안정적으로 돈다고 한동안 손대지 않고 두면, 그사이 호환성을 깨는 변경이 담긴 릴리스가 갑자기 발표되는 일이 드물지 않다. 쿠버네티스 마이너 버전은 3개월쯤마다 나오므로 1년에 적어도 한 번은 업그레이드해야 한다.

출처

관련 사례

내 클러스터에도 있는지 확인하기

kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이 사례와 같은 상태를 점검합니다. 이 사례의 구성 요소: 노드 운영체제 이미지, 노드 풀. 점검 항목의 근거는 이 사례 같은 공개 보고서입니다.

AI 도구와 스크립트용

API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.