[Kubernetes GPU] Immich 머신러닝을 작업별로 CPU/GPU에 나눌 수 있을까? (그리고 Intel·AMD GPU를 한 서비스로 묶기)
Immich 머신러닝(ML) 구성을 이리저리 바꾸던 중에 스마트 서치(CLIP)만 메모리를 유독 많이 먹고 GPU 메모리에 모델을 못 올려 죽는 일이 있었습니다. 얼굴 인식이나 OCR은 메모리를 별로 안 쓰고요. 그래서 떠올린 게 “ML 컨테이너를 CPU용, GPU용 두 개 띄워서 스마트 서치만 CPU로 보내면 되지 않나?”였습니다. 결론부터 말하면 기본 기능으로는 안 됩니다. 왜 안 되는지가 꽤 재밌어서 정리해…

KubeShelf 개발기: Kubernetes 서비스를 자동으로 모으는 대시보드
늘어난 홈랩 서비스의 주소를 찾기 어려워 KubeShelf를 만들었습니다. Ingress·NodePort 자동 발견, 여러 도메인을 묶는 카드, 사용자별 공개 범위와 즐겨찾기, Git·Fleet·ConfigMap으로 이어지는 설정 저장 과정을 정리합니다.
[RAG] OneNote 노트를 SilverBullet으로 옮기고 pgvector RAG 검색 붙이기
저는 오랫동안 리눅스, 서버, 홈랩 관련 메모를 전부 OneNote에 적어왔습니다. 노트북이 열 개 넘게, 페이지가 2천 개 넘게 쌓이고 나니 문제가 생겼습니다. 분명히 예전에 고쳐본 문제인데 “그때 이거 어떻게 했더라?” 가 검색이 안 되는 겁니다. 키워드가 정확히 맞아야 찾을 수 있고 스크린샷 속 글자는 아예 안 잡히고요. 그래서 이번에 큰맘 먹고 두 가지를 했습니다. 9월…
[네트워크] WordPress 404 추적기: Cilium 헬스체크와 NetBird 규칙 순서
이미지 URL의 간헐적 404를 출발 IP, Cilium identity, 프록시 라우팅 설정과 iptables 순서로 추적했습니다. 두 노드의 실제 재부팅까지 검증한 복구 기록입니다.
[GPU 가상화] SR-IOV iGPU로 Immich 머신러닝 돌리기: GPU HANG을 잡은 preempt_timeout, 그리고 파드 CPU 1/7
2026-10-14 업데이트: 이 작업은 워커 VM 안과 Proxmox 호스트 양쪽에서 같이 진행했는데 처음 글은 VM 쪽 시야로만 쓰여 있었습니다. 호스트에서 확인한 내용을 반영해 일부 수치와 설명을 바로잡고 보탰습니다. 지난 글에서 Proxmox에서 Arrow Lake(Core Ultra 5 235H) iGPU를 SR-IOV로 쪼개 openSUSE MicroOS 게스트에 붙였고 그다음 글에서는 그 드라이버를 OBS로 자동 빌드하는 파이프라인까지 만들었습니다. 그럼 이제 그…
[Kubernetes] 노드 drain이 15분씩 걸리던 이유: CNPG primary의 PDB와 ‘미리 옮겨두기’
홈랩 Proxmox 노드 5대는 한 달에 두 번씩 정해진 날짜에 자동으로 재부팅됩니다. 노드가 내려가기 전에는 그 위의 RKE2 워커 VM이 스스로 kubectl drain을 돌리고요. 그런데 어떤 날은 drain이 1~2분이면 끝나고 어떤 날은 딱 15분(타임아웃)을 꽉 채우고 끝났습니다. 처음엔 엉뚱한 놈을 의심했고 저널을 실측해 보니 범인은 따로 있었습니다. 그리고 고치는 방법은 “재부팅 직전에 서두르기”가 아니라 “다음…
[Kubernetes] 커뮤니티 Cloudflare Tunnel Ingress 컨트롤러의 Prefix 경로 매칭 버그를 고쳤습니다
Kubernetes Prefix가 Cloudflare Tunnel 정규식으로 전달되며 달라진 경로 매칭을 재현했습니다. 수정 PR과 실제 터널 요청 20개의 전후 비교를 정리했습니다.
[PostgreSQL] Grafana를 SQLite에서 PostgreSQL로 옮겼습니다
대시보드 53개와 즐겨찾기를 보존하며 Grafana의 설정 DB를 PostgreSQL로 이관했습니다. 81개 테이블 비교, DB 기동 대기, CloudNativePG 복제와 백업을 정리한 기록입니다.
[CI/CD] Rancher Fleet GitRepo 5개를 1개로: paths의 함정과 paused GitRepo 사고
예전에 Git-ops: fleet 글에서 Rancher Fleet으로 홈랩 앱들을 배포하기 시작했다고 썼었는데요. 그렇게 2년 넘게 쓰다 보니 GitRepo가 어느새 5개가 되어 있었습니다. 문제는 이 5개가 전부 같은 Gitea 저장소, 같은 브랜치를 바라보고 있었다는 겁니다. 차이는 딱 두 가지, paths:(어느 디렉터리를 볼지)와 targetNamespace:(어느 네임스페이스에 깔지)뿐이었죠. (디렉터리 이름에 argocd가 들어간 건 ArgoCD 쓰던 시절의 흔적이고 지금은 ArgoCD 없이…
[Kubernetes] CoreDNS “no next plugin found”: forward 한 줄에서 빠진 점(.) 하나
업무로 만지는 폐쇄망 RKE2 클러스터에서 겪은 일입니다. Go로 만든 앱이 사내 Keycloak을 호출하다가 DNS 단계에서 막혔는데 원인이 Corefile의 점 하나였습니다. 도메인과 IP는 바꿔 적었습니다. 증상 10.43.0.10은 RKE2 기본 클러스터 DNS(CoreDNS) 서비스 IP입니다. server misbehaving은 CoreDNS가 제대로 된 응답을 못 줬다는 뜻이라 CoreDNS부터 봤습니다. CoreDNS 로그 무슨 일이 있었나 처음 Corefile은 기본값인 forward . /etc/resolv.conf였습니다. 그런데…

