사례2건
2건 중 1~2번째
IL-0234내부 배포 자동화가 개발용 애플리케이션을 고객의 Managed Kubernetes 클러스터들에 잘못 설치해 컨트롤 플레인 연결과 쿠버네티스 기능에 문제가 났다IONOS Cloud2026- 증상
2026-05-08 15:15 UTC 에 상태 페이지에 공지가 올라왔다. 일부 고객이 컨트롤 플레인에 연결하지 못하고 쿠버네티스 기능이 떨어질 수 있다는 내용이었다. 영향을 받은 곳은 DE/TXL, DE/FRA, DE/FRA/2 의 Managed Kubernetes 였다.
- 촉발
새 Managed Kubernetes 개발 클러스터를 등록하는 정기 내부 작업에서 onboarding operator 를 제외 목록에서 빼는 변경이 들어가자 곧바로 배포가 시작되었다. 이때 operator 의 대상 범위를 정하는 설정 파일은 병합 충돌로 배포 브랜치에 들어가지 못한 상태였다.
- 원인
- 구성 요소
- 기여 요인
- 조치
- onboarding operator 를 고쳐, 네임스페이스 설정이 명시되어 있어야만 클러스터에 작업하게 했다. 이제 operator 는 기본 설정만으로는 cluster-api 기반 클러스터에서 범위 없이 돌지 못한다.
- 필요한 설정 파일이 없으면 배포가 실패하도록 배포 시스템을 다시 구성했다. 전에는 설정이 덜 갖춰져도 배포가 조용히 진행되었다.
- 영향을 받은 리소스에서 찾아낸 변경을 되돌리는 롤백을 마쳤고, 남은 불일치가 있는지 리소스를 점검했다.
- 복구 스크립트를 만들어 스테이징에서 검증한 뒤 운영의 모든 영향 클러스터에 돌렸고, 2026-05-15 까지 의도하지 않은 설치와 변경을 모두 지웠다.
- 후속 조치
- 배포를 시작하기 전에 필요한 설정 파일이 모두 대상 브랜치에 전파되었는지 확인하는 필수 검증 단계를 CI/CD 파이프라인에 넣는다. 목표는 2026년 3분기다.
- 운영 시스템을 건드리는 모든 배포는 변경 크기와 상관없이 추가 동료 검토와 변경 관리 승인을 반드시 받게 한다. 이 절차는 기존 Change Approval Board 검토에 더해진다. 목표는 2026년 3분기다.
- 장애 뒤 복구 작업의 진행 상황을 영향을 받은 고객마다 제때 알릴 수 있도록 장애 커뮤니케이션 절차를 고친다. 목표는 2026년 3분기다.
- 교훈
클러스터 구성이 의도하지 않게 바뀐 것은 내부 작업이 고객 환경에 영향을 주지 못하게 막아야 할 통제가 실패했기 때문이다. 정리 작업 동안 영향을 받은 고객에게 진행 상황을 제대로 알리지 않아 불확실성이 더 커졌다.
- 증상
2023-09-18 13:42, 팀은 High-priority-alert 채널에서 RootVolUtilisation-Critical 알림을 봤다. 14:03 에는 한 사용자가 이미지 풀이 no space left on device 오류로 실패한다고 알렸다.
- 촉발
EKS 모듈을 버전 18 로 올리면서 런치 템플릿이 바뀌었고, 새 노드의 디스크가 100Gb 에서 20Gb 로 줄었다.
- 원인
- 구성 요소
- 기여 요인
- 감지
13:42 에 High-priority-alert 채널로 RootVolUtilisation-Critical 알림이 왔다. 14:03 에 사용자가 이미지 풀 실패를 보고했고, 장애 선언은 15:12 였다.
- 조치
- 예전 기본 노드 그룹을 uncordon 하고, 새 노드를 drain 해 워크로드를 예전 노드 그룹으로 되돌렸다.
- 루트 볼륨을 20Gb 로 줄인 런치 템플릿 변경을 찾아, manager 클러스터와 live 클러스터에 수정을 적용했다.
- 예전 노드 그룹을 drain 해 워크로드를 수정한 노드로 옮겼다.
- 후속 조치
- EKS 모듈을 올릴 때 런치 템플릿 변경을 비교하는 절차를 런북에 넣는다.
- live 클러스터처럼 크기가 다양한 이미지를 받아 보는 테스트 환경을 만든다.
- RootVolUtilisation 알림 런북에 디스크 크기 설정을 확인하는 단계를 넣는다.
- 노드 수에 따라 CoreDNS 를 자동으로 늘리고 줄인다.
- IP 접두사 부족을 IPv6 로 풀 수 있는지 조사한다.
- terraform plan 에서 런치 템플릿이 바뀌면 알아챌 수 있게 드리프트 테스트를 추가한다.
- CNI 와 ipamd 로그를 볼 수 있게 로깅을 갖추고, IP 접두사 부족 오류가 나면 알림을 보낸다.
- 교훈
이 글은 교훈 대신 후속 조치를 적었다. 조치를 보면 팀에는 빈틈이 두 가지 있었다. 하나는 모듈 업그레이드가 바꾼 런치 템플릿을 배포 전에 비교하지도, 드리프트 테스트로 잡지도 않은 것이다. 다른 하나는 drain 중 팀이 의심한 IP 접두사 부족을 확인할 CNI 와 ipamd 로그도, 알림도 없었던 것이다.
이 2건에서 가장 많이 나오는 구성 요소: CI 시스템, CoreDNS. kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이런 틈을 점검합니다. 점검 항목의 근거는 이 라이브러리와 같은 공개 보고서입니다.