{"id":"IL-0138","org":"Barush Mendez","date":"2025-03-03","docs":[],"title":{"en":"A failed Nvidia driver build left broken kernel packages on the only Kubernetes master node, which hit a kernel panic on reboot after a power outage and took the homelab cluster down for six days","ko":"nvidia-dkms-390 드라이버 빌드 실패로 망가진 커널 헤더가 몇 주 동안 방치됐다가, 정전 뒤 재부팅하자 하나뿐인 마스터 노드가 커널 패닉에 빠져 홈랩 쿠버네티스 클러스터가 6일 동안 멈췄다."},"domain":["kubernetes"],"impact":{"scope":"100% of hosted services unavailable and the Kubernetes API down for 6 days (V-Rising server, Grafana, Jellyfin, Linkding)","users":"Homelab users; no financial impact","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"A driver installation that fails half-way can leave kernel packages broken without any visible effect until the next reboot, which may come weeks later and at the worst time. A failed DKMS build should be fixed or reverted at once.\n\nWith a single master node and no monitoring from outside the cluster, one unbootable machine meant a total outage that nobody was told about; the fix itself was simple once the boot logs were seen.","ko":"드라이버 빌드 실패를 그대로 두면 몇 주 뒤 재부팅 때 터질 수 있다. 자동 알림이 없어서 발견과 복구가 늦었다. 마스터 노드가 하나뿐이라 노드 하나의 고장이 클러스터 전체 장애가 됐다. 원인을 찾은 뒤에는 비교적 간단히 고쳤고, 데이터 손실은 없었다."},"related":[],"sources":[{"url":"https://mustybatz.github.io/homelab/post-mortems/gpu-driver.html","kind":"blog","license":"unknown","archived":null}],"summary":{"en":"The single master node of a homelab Kubernetes cluster has an Nvidia GPU for hardware acceleration in Jellyfin. Weeks before the incident, installing the nvidia-dkms-390 driver failed because it would not build against the installed kernel, and the kernel headers and other dependencies were left unconfigured. The failure was not dealt with, and the node kept running normally until a power outage on 2025-03-03 rebooted it. On boot the kernel panicked and the node could not start.\n\nBecause it was the only master node, the Kubernetes API was gone and every hosted application became unreachable, as services relied on the master node's private IP. There were no automated alerts, so the outage was found manually after 3 hours, and recovery took until 2025-03-09, six days in total. Once the kernel panic was seen on a monitor, booting an older kernel and repairing the broken packages fixed the node. No data was lost.","ko":"쿠버네티스 마스터 노드에는 Jellyfin 하드웨어 가속용 Nvidia GPU 가 달려 있었다. nvidia-dkms-390 드라이버를 설치할 때 드라이버가 기존 커널 버전에 맞게 빌드되지 않았고, 커널 헤더와 다른 의존 패키지도 설정에 실패했다. 이 상태가 몇 주 동안 방치됐지만 시스템은 계속 돌았다.\n\n정전으로 노드가 재부팅되자 커널 패닉이 나서 부팅되지 않았다. 이 노드는 클러스터의 유일한 마스터 노드였다. 쿠버네티스 관리가 전부 멈췄고, 서비스들이 마스터 노드의 사설 IP 를 쓰고 있었기 때문에 모든 애플리케이션에 접속할 수 없었다.\n\n모니터를 연결해 커널 패닉을 확인한 뒤 이전 커널 버전으로 부팅하자 시스템이 돌아왔다. apt update 와 apt upgrade 는 망가진 패키지 때문에 실패했다. 망가진 Nvidia 패키지를 지우고, 패키지 설정과 빠진 의존성을 고치고, 커널 헤더를 다시 설치한 뒤 재부팅해 문제를 해결했다. 자동 알림과 모니터링이 없어서 복구까지 6일이 걸렸다. 데이터 손실은 없었다."},"trigger":{"en":"A power outage forced the Kubernetes master node to reboot.","ko":"정전 때문에 마스터 노드가 재부팅됐다."},"severity":"unknown","symptoms":["control-plane-unresponsive","service-unavailable","monitoring-down"],"timeline":{"detected_after":"3h","resolved_after":"6d"},"date_kind":"incident","detection":{"en":"Manually, when someone tried to access the services; there were no automated alerts.","ko":"운영자가 서비스에 접속하려다 직접 알아챘다. 자동 알림이 없어서 알아채기까지 3시간이 걸렸다."},"components":["gpu-driver","linux-kernel","kube-apiserver"],"root_cause":"software-bug","remediation":[{"text":{"en":"Connected a monitor to the master node and read the boot logs, which showed the kernel panic","ko":"원격 접속이 되지 않아 모니터를 연결해 부팅 로그를 보고 커널 패닉을 확인했다."}},{"text":{"en":"Booted the previous kernel version, which brought the system back","ko":"이전 커널 버전으로 부팅해 시스템을 되살렸다."}},{"text":{"en":"Removed the broken Nvidia packages with sudo apt-get remove --purge '^nvidia-.*' and ran sudo dpkg --configure -a","ko":"sudo apt-get remove --purge '^nvidia-.*' 로 망가진 패키지를 지우고 sudo dpkg --configure -a 로 패키지 설정 문제를 고쳤다."}},{"text":{"en":"Found remaining broken packages with dpkg -l | grep -v ^ii and removed them by hand","ko":"dpkg -l | grep -v ^ii 로 남은 망가진 패키지를 찾아 sudo apt-get remove --purge <package_name> 으로 하나씩 지웠다."}},{"text":{"en":"Ran sudo apt-get install -f and reinstalled linux-headers-$(uname -r)","ko":"sudo apt-get install -f 로 빠진 의존성을 채우고 sudo apt-get install --reinstall linux-headers-$(uname -r) 로 커널 헤더를 다시 설치했다."}},{"text":{"en":"Rebooted and confirmed the kernel panic was gone","ko":"머신을 재부팅해 커널 패닉이 사라진 것을 확인했다."}}],"action_items":[{"text":{"en":"Make sure GPU driver installations fully succeed, or revert immediately when they fail","ko":"GPU 드라이버 설치가 완전히 성공했는지 확인하고, 오류가 나면 바로 변경을 되돌린다."}},{"text":{"en":"Move the cluster to a high-availability control plane","ko":"단일 장애 지점을 없애도록 클러스터를 고가용성 구성으로 옮긴다."}},{"text":{"en":"Expose the Kubernetes API through a load balancer in the HA setup","ko":"고가용성 구성에서 Kube-API 를 로드 밸런서 뒤에 둔다."}},{"text":{"en":"Set up a ticketing system to record incidents and their resolution","ko":"장애를 기록하고 해결 과정을 추적할 티켓 시스템을 만든다."}},{"text":{"en":"Write predefined troubleshooting workflows to shorten response time","ko":"미리 정해 둔 문제 해결 절차를 만들어 홈랩 장애 대응 시간을 줄인다."}},{"text":{"en":"Add infrastructure monitoring such as Prometheus and Grafana","ko":"Prometheus 와 Grafana 같은 인프라 모니터링을 넣어 문제를 미리 잡는다."}},{"text":{"en":"Add blackbox HTTP and TCP checks from outside the cluster for critical services","ko":"주요 서비스에 HTTP, TCP 검사를 거는 블랙박스 모니터링을 넣어 쿠버네티스 클러스터 밖에서도 장애를 잡는다."}}],"contributing":["early-signal-ignored","delayed-effect-change","single-point-of-failure","monitoring-blind-spot"],"recurrence_of":null,"symptoms_text":{"en":"Every service in the homelab Kubernetes cluster stopped answering: the V-Rising server, Grafana, Jellyfin and Linkding were all unreachable, and the Kubernetes API was down, so the cluster could not be managed at all. The outage was found by hand, about 3 hours after it began, when someone tried to use the services.\n\nThe master node could not be reached remotely. With a monitor attached, its boot logs showed a kernel panic during boot. The node had been restarted by a power outage, and it was the only master node; the hosted services also depended on its private IP address, so its failure took down everything.","ko":"2025년 3월 3일 14:15:34부터 홈랩 쿠버네티스에 올린 서비스에 접속되지 않았다. 운영자가 서비스에 들어가려다 직접 알아챘고, 알아채기까지 3시간이 걸렸다.\n\n멈춘 것은 V-Rising 서버, Kube-API, Grafana, Jellyfin, Linkding 이었다. 올린 서비스 전부가 접속되지 않았고, Kube-API 도 내려가 쿠버네티스를 관리할 수 없었다.\n\n원격 접속도 되지 않았다. 마스터 노드에 모니터를 연결해 부팅 로그를 보고 나서야 커널 패닉을 확인했다."},"updated_at":"2026-11-10T00:00:35.629038Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0138","org_slug":"barush-mendez"}