
개요
IKEA EKET 두 개에 장비를 넣어 쓰다가 발열 때문에 바꿨다. 8월 15일에 수납장과 랙을 갈고 배기 덕트를 뺐다. 수납장과 배기만으로는 온도가 안 내려가서, 2주 뒤 SSD 방열판까지 달았다.
문제 인지: 온도 규칙 0건
알림 규칙을 196개 만들어 뒀다. 노드와 파드, 인그레스, CI까지 덮었는데 온도만 한 건도 없었다. 온도 데이터는 몇 달째 쌓이고 있었고, 그 패널을 열지 않았다.
8월 말에 그걸 알아채고 node_hwmon_temp_celsius를 꺼내 봤다. 7일 최고 온도가 하이퍼바이저 두 대에서 각각 99.9°C와 104.9°C였다. 잠깐 튄 값이 아니라 그 근처를 자주 오갔다.
아래는 임계(node_hwmon_temp_crit_celsius)의 90%를 넘긴 시간 비율이다.
| 센서 | 임계 90% 초과 시간 |
|---|---|
| bd895i CPU | 49.2% |
| bd895i nvme1 | 34.3% |
| bd895i nvme0 | 31.4% |
| wtrpro nvme0 | 24.2% |
NVMe 임계는 대략 85°C고, 그 지점에서 강제 스로틀과 수명 손상이 시작된다.
“임계 근접(90%)” 알림을 만들려다 말았다. 90% 초과가 상시니까 켜자마자 계속 울리게 된다. 알림을 늘리는 대신 냉각을 손보기로 했다.
- alert: NodeSensorAtCriticalTemp
expr: node_hwmon_temp_celsius / on(instance,chip,sensor) group_left node_hwmon_temp_crit_celsius >= 1
for: 2m원인: 더운 실내
IKEA EKET 두 개를 쌓아 쓰고 있었다. 뒤판에 케이블 구멍이 있어 완전히 막힌 상자는 아니었다. 다만 위아래가 뚫려 있지 않아 큐브끼리 공기가 오가지 못했다.
더 큰 문제는 방이었다. 8월 초 이 방은 최고 39.0°C였다. 뒤 구멍으로 들어오는 공기가 이미 그 온도라 안에서 돌려봐야 소용이 없었다.
1단계: 수납장·랙·배기 (08-15)
수납장 — IKEA LASTARE. 프레임이 세로로 길어 랙을 통째로 세워 넣는다. 칸마다 막히던 EKET과 달리 안이 하나로 트여 있다.
랙 — Lab Rax 10” Server Rack(mklements 설계, 소개 글). M6 너트를 쓰도록 수정된 리믹스를 6U로 두 개 뽑아 이어 붙였다. 위아래 핸들을 1U씩 더해 총 14U가 됐다. 우상단에 팬 자리가 있다.
팬 — Phanteks 200mm 두 개. 하나는 랙 위 팬 자리, 하나는 wtrpro 메인보드 배기 구멍에.
배기 — 수납장 맨 위에 후드를 두고 알루미늄 덕트를 물려 창문형 팬으로 뺀다. 상시 구동이고 전원 제어는 Zigbee 스위치로 한다. 실내에서 순환만 시키면 방 온도가 같이 올라가니, 더운 공기는 집 밖으로 버린다.

이 단계에서 NVMe 온도는 내려가지 않았다.
일주일 뒤인 08-25에도 NVMe 한 장이 75°C였고, 방열판 직전인 8월 말에도 임계 90% 초과가 34.3%였다. 랙 안에 둔 Zigbee 센서로도 교체 전후 일평균이 33.6°C와 33.7°C로 같았다.
CPU는 뭐라 말하기 어렵다. 교체 사흘 뒤인 08-18에 뽑은 값이 wtrpro 79.0°C, um880 89.4°C, bd895i 91.9°C인데, 이게 7일 평균이라 교체 전 나흘이 섞여 있다. um880이 아직 값에 남아 있는 것도 그래서다 — 이 호스트는 08-14에 은퇴했다. 교체 직후만 따로 볼 수 있는 값은 남아 있지 않다. 그때 눈에 띈 건 bd895i의 같은 기간 CPU 사용률이 18.3%였다는 것이다.
그래도 사이즈가 커져서 케이블을 정리하고 랙을 관리하기 편해졌다.
2단계: SSD 방열판 (08-29)
랙을 바꾸고 2주가 지났는데도 온도는 그대로였다. 교체 2주 뒤 8월 말에 잰 값이 49.2%, 34.3%다. 수납장과 배기를 손보는 것만으로는 NVMe 온도까지 개선하지 못했다.
부하 보정을 걸어 비교했다. 디스크 사용률 구간을 맞추지 않으면 유휴상태라서 시원한 것과 구분이 안 된다.
| 호스트 · io_util | 방열판 전 (평균/최고) | 방열판 후 |
|---|---|---|
| bd895i · 0.05~0.10 | 71.7 / 81.9°C | 57.5 / 64.8°C |
| wtrpro · 0.10~0.20 | 71.3 / 82.9°C | 50°C |
같은 부하대에서 피크가 18~21도 내려갔다. 다만 방열판을 붙인 뒤 데이터가 얼마 없다. wtrpro 쪽은 전이 948개, 후가 9개다. 내려간 건 맞는데 얼마나 내려갔는지는 이 표만으로는 말하기 어렵다. bd895i는 방열판 후 3시간 29분 동안 CI 빌드까지 돌렸는데 임계 초과 0분이었다.
현재 상태
| 센서 | 8월 말 | 지금 |
|---|---|---|
| bd895i CPU | 49.2% | 0% |
| bd895i nvme1 | 34.3% | 0.2% |
| bd895i nvme0 | 31.4% | 0% |
| wtrpro nvme0 | 24.2% | 0% |
7일 최고 온도도 wtrpro 104.9 → 86.9°C, bd895i 99.9 → 82.9°C로 내려갔다.
정리
온도 데이터는 계속 쌓이고 있었다. 알림 규칙을 만들면서 온도는 한 건도 넣지 않았고, 그래서 하이퍼바이저가 100°C를 찍는 걸 몇 달 몰랐다. 알림을 만들었어도 켜자마자 계속 울렸을 테니 알림만으로 됐을 일도 아니다.
수납장과 랙을 바꾼 것으로는 NVMe 온도가 안 내려갔다. 나중에 붙인 방열판이 피크를 20도 내렸다.
이번엔 교체 전 기준점이 없었다. Prometheus 보존이 retention: 7d라 8월 데이터가 남아 있지 않고, 방 온도로 대신 재보려 해도 에어컨을 킨 적이 있이 섞여 갈라낼 수가 없다. 언제 바꿨는지도 온도 그래프에서 계단이 생긴 자리를 보고 거꾸로 짚었다.
그래서 다음 작업 전에 세 가지를 먼저 하려고 한다.
- 바꾸기 직전 값을 Grafana 애노테이션으로 찍는다. 그래프에 세로선이 남으면 나중에 거꾸로 짚을 일이 없다
- Prometheus 보존을 30일로 늘린다. 시계열 중
apiserver_request_duration_seconds_bucket·etcd_request_duration_seconds_bucket같은 히스토그램 버킷이 35%를 차지한다.metricRelabelings로 버킷만 버리면_sum·_count는 남으니 요청률은 계속 보면서 PVC를 늘리지 않고 30일이 들어간다 - Home Assistant의 온습도를 Prometheus로 보낸다. 이번엔 실온은 HA에서, 장비 온도는 Prometheus에서 따로 확인했는데 한곳에서 확인하면 편할 것이다.
이전에도 비슷한 일이 있었다 → K3s 노드 축소