그래프
사례3건
3건 중 1~3번째
- 증상
2025년 9월 14일, 이미 떠 있던 노드는 계속 돌았지만 새로 만들어지는 노드는 하나도 클러스터에 제대로 들어오지 못했다. 스팟 인스턴스에서 돌던 백그라운드 워커, 리포트 서비스, 주문 할당 시스템이 완전히 멈췄다. API 는 기존 노드에서 계속 응답했지만 부하가 늘어도 확장할 수 없었다.
- 촉발
노드 풀의 자동 업그레이드를 꺼 두었는데도 Google 이 버전 지원 종료 기한을 이유로 컨트롤 플레인을 v1.32.x 에서 v1.33.2 로 강제 업그레이드했다.
- 원인
- 구성 요소
- 기여 요인
- 조치
- 강제 업그레이드와 같은 버전인 v1.33 으로 새 GKE 클러스터를 만들었다.
- 쿠버네티스 1.33 과 호환되도록 Istio 를 1.27.1 로 올렸다.
- 쿠버네티스 1.33 에 맞게 cert-manager 설정을 갱신했다.
- 모든 운영 워크로드를 새 클러스터로 옮기고, 파드 스케줄링, DNS 조회, PVC 마운트, 외부 연동이 정상인지 확인했다.
- 손상된 기존 클러스터를 폐기했다.
- 후속 조치
- 모든 클러스터를 GKE stable 릴리스 채널로 설정한다.
- 2025년 4분기까지 Argo CD 와 모니터링 같은 관리용 구성 요소를 따로 돌리는 관리 클러스터를 만든다.
- 중요한 워크로드의 스팟 인스턴스 사용을 다시 검토하고, 온디맨드 대체 노드 풀을 추가한다.
- SRE 업그레이드 절차를 문서로 남긴다. 관리 클러스터를 먼저 올리고, 며칠 동안 지켜본 뒤 운영 클러스터를 올린다.
- 쿠버네티스, Istio, cert-manager 사이의 호환 표를 문서로 남긴다.
- 업그레이드를 자동으로 시험하는 파이프라인을 만든다.
- 빠르게 이전할 수 있도록 고정 IP 를 예약해 둔다.
- Istio, cert-manager, CSI, DNS 애드온의 버전을 고정한다.
- 지원 종료 기한에 몰리지 않도록 stable 릴리스를 따라 제때 올리고, GKE 알림과 공지를 정기적으로 확인한다.
- 교훈
Google 은 자동 업그레이드를 꺼 두어도 버전 지원 종료 기한이 되면 컨트롤 플레인을 강제로 올린다. 강제 업그레이드를 피하려면 지원 버전 범위 안에 머물러야 한다. 기존 노드가 멀쩡해도 새 노드 초기화는 완전히 실패할 수 있다. 선점된 스팟 노드가 클러스터에 돌아오지 못하면 장애가 연쇄로 번진다. 컨트롤 플레인을 올린 뒤 노드 초기화가 되돌릴 수 없게 망가지면 클러스터를 통째로 다시 만들어야 할 수도 있다. 예측할 수 있고 검증된 릴리스 주기를 원하면 GKE stable 채널을 쓴다. 쿠버네티스를 올릴 때는 Istio, cert-manager 같은 의존 구성 요소를 함께 맞춰야 한다. 같은 클라우드에 대기 클러스터가 없으면 바로 넘어갈 곳이 없다. SRE 가 롤아웃을 단계적으로 관리하면 업그레이드 위험이 줄어든다.
IL-0060쿠버네티스 1.24 업그레이드로 node-role.kubernetes.io/master 레이블이 사라지자 이 레이블에 기대던 Calico 라우트 리플렉터가 동작을 멈춰 레거시 클러스터의 네트워크가 모두 끊기고 Reddit 이 314분 동안 멈췄다Reddit2023- 증상
2023년 3월 14일 19시 UTC 직후 엔지니어가 Old Reddit 이라 불리는 레거시 스택을 돌리는 클러스터의 업그레이드를 시작했다. 2분쯤은 괜찮아 보였지만 곧 사이트 전체가 갑자기 멈췄다. CDN 엣지의 상태 코드별 RPS 그래프가 이를 보여 주었다. 사용자는 오류 페이지나 글이 하나도 없는 홈페이지를 보았다.
- 촉발
Reddit 에서 가장 중요한 클러스터 가운데 하나인 레거시 클러스터를 쿠버네티스 1.23 에서 1.24 로 업그레이드했다.
- 원인
- 구성 요소
- 기여 요인
- 감지
업그레이드를 시작하고 2분쯤 뒤 CDN 엣지의 상태 코드별 RPS 그래프에서 사이트가 멈춘 것이 보였다. 팀은 곧바로 장애를 선언했고 3분 안에 대응 인원이 통화에 모였다. 엣지 지표는 일부러 클러스터와 분리되어 있어 살아 있었지만, 클러스터 자체의 지표는 모두 사라졌다.
- 조치
- API 서버에서 타임아웃을 내던 Open Policy Agent 의 웹훅 설정을 지웠다.
- 복원 뒤 어차피 쓸 수 없게 될 워커 노드를 모두 종료했다.
- 컨트롤 플레인 노드 두 대를 종료하고, 남은 한 대의 구성 요소를 다운그레이드한 뒤 그 노드에 백업 데이터를 복원했다.
- 단일 노드 컨트롤 플레인이 부하에 무너지지 않도록 클러스터 오토스케일러를 껐다.
- 새 컨트롤 플레인 노드를 띄우고, 호스트명이 맞지 않던 TLS 인증서를 새로 만들어 노드들을 합류시켰다.
- 트래픽을 1% 에서 시작해 5%, 10%, 20%, 35%, 55%, 80%, 100% 로 조금씩 늘렸다.
- 트래픽이 돌아올 때 문제를 일으키지 않도록 손으로 멈춰 두었던 민감한 레거시 서비스를 조심스럽게 다시 켰다.
- 후속 조치
- 클러스터 구성을 코드로 관리해 모든 선택에 기록이 남게 하고, 코드로 만들 수 없는 것은 자세히 문서로 남긴다.
- 클러스터마다 다른 맞춤형 구성을 걷어 내고 모든 클러스터의 구성 요소를 표준화한다.
- 모든 클러스터를 최대한 같은 모습으로 유지하고 필요하면 다시 만들거나 복제할 수 있도록 클러스터 전체의 수명 주기를 관리하는 도구를 만든다.
- 믿고 테스트에 쓸 수 있는 프리프로덕션 클러스터를 더 둔다.
- 백업 복원 절차를 개선하고 클러스터 업그레이드를 안전하게 만든다.
- 교훈
쿠버네티스 버전과 구성 요소 업그레이드는 여전히 위험하다. 미리 테스트하고 검증해도 이번처럼 처음 보는 방식으로 깨질 수 있다. 쿠버네티스에는 공식 다운그레이드 절차가 없어, 롤백하는 방법은 백업에서 복원하는 것뿐이다. 복원 절차가 환경 변화를 따라가지 못하면 실제 장애 때 그 자리에서 고쳐 써야 하고, 복원을 결정하기까지 오래 망설이게 된다. 이번 복원은 결국 성공했지만 절차는 개선해야 한다. 코드로 남기지 않은 설정은 아는 사람이 떠나면 아무 기록도 남지 않는다. 라우트 리플렉터 설정이 어디에도 커밋되어 있지 않아 장애 중에 누구도 의심하지 못했다. 지표가 클러스터 안에서만 수집되면 클러스터가 망가질 때 함께 사라진다. 이번에는 로그 수집 에이전트가 영향을 받지 않아 원인을 추적할 수 있었다. 클러스터마다 다른 맞춤형 구성이 쌓이면 장애가 잦아진다. 직접 원인은 노드 레이블이었지만 근본 원인은 일관성 부족이었다.
IL-0144Ubuntu 18.04 의 systemd 보안 업데이트가 DNS 설정을 날려 AKS 노드의 kubelet 이 레지스트리 이름을 해석하지 못하고 파드가 ImagePullBackoff 에 빠졌다.Microsoft Azure2022- 증상
2022년 8월 30일 06:00 UTC 무렵부터 Ubuntu Unattended-Upgrades 를 켜 둔 Ubuntu 18.04 VM 에서 DNS 이름 해석 오류가 나기 시작했다. AKS 에서는 kubelet 이 컨테이너 레지스트리의 DNS 이름을 해석하지 못해 ImagePullBackoff 같은 파드 생성 오류가 났다.
- 촉발
2022년 8월 30일 06:00 UTC 에 Canonical 이 Ubuntu 보안 업데이트를 공개했고, Unattended-Upgrades 를 켠 Ubuntu 18.04 VM 들이 systemd 237-3ubuntu10.54 를 자동으로 내려받아 설치했다.
- 원인
- 구성 요소
- 기여 요인
- 감지
패키지가 공개된 직후 AKS 와 Azure Container Apps 팀을 포함한 여러 Azure 팀이 운영 알림으로 문제를 알았다. 이어 들어온 고객 지원 문의로 영향이 Ubuntu 18.04 에 한정된다는 것을 확인했다.
- 조치
- Canonical 과 Ubuntu 웹사이트에 이 버그와 수정 방법이 올라왔고, 영향받은 고객에게 읽어 보도록 권했다.
- 영향받은 VM 은 재부팅하거나, 재부팅할 수 없으면 Azure 가 제공한 템플릿 스크립트를 시험하고 필요한 만큼 고쳐서 돌리도록 권했다.
- AKS 팀이 AKS 노드의 문제를 자동으로 탐지하고 고치는 장치를 만들어 모든 리전에 배포했다.
- 나머지 AKS 고객은 지원팀을 거쳐 손으로 완화했다.
- 후속 조치
- 보안 업데이트가 안전 배포 절차를 거치지 않는 지금 방식을 검토해, 이런 장애에서 고객 영향을 줄인다.
- AKS 데이터 플레인 모니터링을 개선해 오류가 늘면 알림이 오게 했다.
- AKS 모니터링 알고리즘을 검토해 이번과 비슷한 VM 오류를 탐지하고 알리게 했다.
- 장애 중 Canonical 로 가는 에스컬레이션 경로를 개선하고 내부 기술 서비스 가이드에 넣었다.
- AKS 가 지금 Canonical 과 나눠 맡는 보안 패치 체계를 완전히 넘겨받아, 패치를 직접 추가로 시험하고 통제해서 배포한다. 2022년 12월 완료 예정이다.
- IaaS VM 용으로는 Canonical 과 협의해, Azure 사용자에게 공개되기 전의 후보 패키지에 전용 시험을 돌린다.
- AKS 가 Canonical 과 절차를 세워 업그레이드 상황의 시험 공백을 메운다. 2023년 3월 완료 예정이다.
- 안전하다고 판단해 내보내는 패치는 AKS 고객이 유지보수 시간대를 직접 정하고 환경별로 나눠 적용할 수 있게 한다. 2023년 12월 완료 예정이다.
- 교훈
보안 업데이트는 중요도 때문에 안전 배포 절차를 거치지 않았고, 하루 한 번 자동으로 적용되는 업데이트가 모든 리전의 VM 에 퍼졌다. AKS 고객은 자동 노드 이미지 업그레이드를 쓰면 노드를 최신으로 유지하면서 Microsoft 의 공급망만 쓰게 된다. IaaS VM 은 자동 VM 게스트 패치를 쓰면 Ubuntu 패치를 받는 VM 의 범위가 제한되고 업데이트가 조율된 순서로 적용된다. 자동 VM 게스트 패치는 상태 감시도 하며, 사용자는 앱 상태 확장으로 애플리케이션 상태 신호를 줄 수 있다.
이 3건에서 가장 많이 나오는 구성 요소: 클라이언트 쪽 DNS 리졸버와 캐시, 어드미션 웹훅. kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이런 틈을 점검합니다. 점검 항목의 근거는 이 라이브러리와 같은 공개 보고서입니다.
원인별1
업그레이드로 깨진 호환성3건
- 구성 요소
- 기여 요인
IL-0101자동 업그레이드를 꺼 둔 GKE 클러스터의 컨트롤 플레인이 지원 종료 기한에 1.33.2 로 강제 업그레이드된 뒤 새 노드가 모두 초기화에 실패해, 오토스케일링과 스팟 노드 복구가 15시간 멈췄다.Wealthy2025IL-0060쿠버네티스 1.24 업그레이드로 node-role.kubernetes.io/master 레이블이 사라지자 이 레이블에 기대던 Calico 라우트 리플렉터가 동작을 멈춰 레거시 클러스터의 네트워크가 모두 끊기고 Reddit 이 314분 동안 멈췄다Reddit2023IL-0144Ubuntu 18.04 의 systemd 보안 업데이트가 DNS 설정을 날려 AKS 노드의 kubelet 이 레지스트리 이름을 해석하지 못하고 파드가 ImagePullBackoff 에 빠졌다.Microsoft Azure2022