IL-0007 Adevinta · 2024-10-22 (게시일)kubernetesawsnetworking
Adevinta 의 플랫폼 팀은 사내 런타임 플랫폼인 SCHIP 을 운영한다. SCHIP 은 여러 팀이 함께 쓰는 멀티테넌트 클러스터라서, 클러스터의 파드가 다른 AWS 계정에 있는 RDS 나 Elasticache 같은 VPC 자원에 닿아야 할 수 있다. 그래서 사내 IP 주소를 관리하고, 클러스터 VPC 와 사내 고객 VPC 를 이을 방법이 필요했다. 처음에는 VPC 피어링을 쓰다가 연결이 늘자 AWS Transit Gateway, 줄여서 TGW 를 쓰기 시작했다.
EKS 의 기본 VPC-CNI 는 파드마다 IP 하나를 배정하므로 파드가 1만 개면 IP 도 1만 개가 필요하다. 팀은 EKS 를 쓰기 시작한 직후 이 문제를 알고 IP 사용량을 감시해 왔다. 6월, Kube-aws 기반 SCHIP 에서 EKS 기반 클러스터로 대규모 이전을 하던 중 작은 클러스터 하나에서 IP 가 바닥나 파드가 실패했다. 팀은 바로 조치하지 않으면 다음 장애는 심각하고 피할 수 없다고 판단했다.
팀은 격주 금요일 실험 시간에 Cilium 같은 다른 CNI, VPC-CNI 커스텀 네트워킹, VPC-CNI 의 IPv6 를 미리 시험해 두었다. 그중 Secondary CIDR 를 쓰는 커스텀 네트워킹이 이전을 제때 끝내기에 가장 쉬웠다. 8월 말 작은 클러스터부터 조심스럽게 차례로 배포했고, 9월에는 사용 가능한 IP 가 너무 적어 이전을 잠시 멈췄다. 이후 나머지 클러스터 전체에 배포해 IP 여유를 되찾았고, 이전을 끝내 대부분의 고객과 마켓플레이스에 영향을 줄 큰 장애를 피했다.
몇 달 뒤 Karpenter 로 옮기면서 IP 부족 호출이 다시 왔다. Karpenter 는 더 작은 인스턴스를 띄울 수 있는데, 인스턴스가 쓸 수 있는 ENI 와 IP 수는 인스턴스 크기에 따라 정해진다. 또 Karpenter 는 클러스터가 Secondary CIDR 와 커스텀 네트워킹을 쓴다는 것을 고려하지 않았다. 팀은 Karpenter 배포에 --reserved-enis 파라미터를 더해, 첫 번째 ENI 가 커스텀 네트워킹에 쓰인다는 점을 반영해 노드당 파드 수를 계산하게 했다.
어느 저녁 일부 DaemonSet 이 실패하고 있다는 호출이 왔다. 당직자가 서버에 들어가 파드 상태를 보니 다음 오류가 찍혀 있었다: name=“aws-cni” failed (add): add cmd: failed to assign an IP address to container
이 오류는 네트워크 드라이버인 CNI 가 쓸 수 있는 IP 주소가 없다는 뜻이었다. 다행히 영향은 작고 거의 쓰지 않는 클러스터 하나에 그쳤다. 이 호출은 6월, EKS 기반 클러스터로 대규모 이전을 하던 중에 왔다.
이후 대시보드에서 사용 가능한 IP 가 계속 줄어드는 추세가 보였고, 9월에는 사용 가능한 IP 가 너무 적어 이전 작업을 멈춰야 했다. 몇 달 뒤 Karpenter 로 옮기면서 IP 부족 호출이 다시 오기 시작했다.
어느 저녁 일부 DaemonSet 이 실패한다는 호출이 왔다. 당직자가 서버에 들어가 파드 상태를 확인하다 aws-cni 의 IP 할당 실패 오류를 보았다. 팀은 그전부터 IP 사용량을 감시하고 있었다.
플랫폼 팀이나 클러스터 운영자가 용량 계획에 시간을 들이지 않으면, VPC-CNI 는 큰 규모의 운영 환경에 바로 쓸 수 있는 도구가 아니다. 선택지마다 장단점이 있다. 지금 큰 클러스터를 새로 띄운다면 더 싸고 앞으로도 오래 쓸 수 있는 IPv6 를 쓸 수 있는지 먼저 확인할 만하다. 작은 클러스터에서 되던 것이 규모를 키워도 된다고 가정하면 안 된다.
예측과 용량 계획을 잘하면 이 요구는 감당할 수 있다. 하지만 폭주하는 잡이나, 실패하면서도 회수될 때까지 IP 를 붙잡는 잡을 여럿 띄우는 잘못된 설정 때문에 파드가 갑자기 늘 수 있다.
IL-0006 AWS VPC CNI 가 자원이 찬 노드에 IP 를 붙잡아 두어 us-east-1 서브넷 IP 가 바닥났고, WARM_IP_TARGET 을 바꾼 조치가 파드 시작 실패를 더 오래 끌었다Neon · 2025같은 원인 · 공통 AWS VPC CNI, VPC 서브넷 또는 파드 주소 범위
IL-0182 트래픽이 급변할 때 수가 모자란 CoreDNS 가 과부하로 지연과 간헐적 네트워크 끊김을 일으켰고, 나중에는 과하게 늘린 CoreDNS 파드가 Karpenter 의 노드 통합을 막았다이언철 · 2024같은 원인 · 공통 Karpenter
같은 원인 · 공통 VPC 서브넷 또는 파드 주소 범위
IL-0015 편집자가 연결함IL-0019 편집자가 연결함https://incidentlib-mcp.benchlet.com/mcpAPI 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.