• [Kubernetes GPU] Immich 머신러닝을 작업별로 CPU/GPU에 나눌 수 있을까? (그리고 Intel·AMD GPU를 한 서비스로 묶기)

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

    Read More

  • KubeShelf 개발기: Kubernetes 서비스를 자동으로 모으는 대시보드

    KubeShelf 개발기: Kubernetes 서비스를 자동으로 모으는 대시보드

    늘어난 홈랩 서비스의 주소를 찾기 어려워 KubeShelf를 만들었습니다. Ingress·NodePort 자동 발견, 여러 도메인을 묶는 카드, 사용자별 공개 범위와 즐겨찾기, Git·Fleet·ConfigMap으로 이어지는 설정 저장 과정을 정리합니다.

    Read More

  • [RAG] OneNote 노트를 SilverBullet으로 옮기고 pgvector RAG 검색 붙이기

    저는 오랫동안 리눅스, 서버, 홈랩 관련 메모를 전부 OneNote에 적어왔습니다. 노트북이 열 개 넘게, 페이지가 2천 개 넘게 쌓이고 나니 문제가 생겼습니다. 분명히 예전에 고쳐본 문제인데 “그때 이거 어떻게 했더라?” 가 검색이 안 되는 겁니다. 키워드가 정확히 맞아야 찾을 수 있고 스크린샷 속 글자는 아예 안 잡히고요. 그래서 이번에 큰맘 먹고 두 가지를 했습니다. 9월…

    Read More

  • [네트워크] WordPress 404 추적기: Cilium 헬스체크와 NetBird 규칙 순서

    이미지 URL의 간헐적 404를 출발 IP, Cilium identity, 프록시 라우팅 설정과 iptables 순서로 추적했습니다. 두 노드의 실제 재부팅까지 검증한 복구 기록입니다.

    Read More

  • [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로 자동 빌드하는 파이프라인까지 만들었습니다. 그럼 이제 그…

    Read More

  • [Kubernetes] 노드 drain이 15분씩 걸리던 이유: CNPG primary의 PDB와 ‘미리 옮겨두기’

    홈랩 Proxmox 노드 5대는 한 달에 두 번씩 정해진 날짜에 자동으로 재부팅됩니다. 노드가 내려가기 전에는 그 위의 RKE2 워커 VM이 스스로 kubectl drain을 돌리고요. 그런데 어떤 날은 drain이 1~2분이면 끝나고 어떤 날은 딱 15분(타임아웃)을 꽉 채우고 끝났습니다. 처음엔 엉뚱한 놈을 의심했고 저널을 실측해 보니 범인은 따로 있었습니다. 그리고 고치는 방법은 “재부팅 직전에 서두르기”가 아니라 “다음…

    Read More

  • [Kubernetes] 커뮤니티 Cloudflare Tunnel Ingress 컨트롤러의 Prefix 경로 매칭 버그를 고쳤습니다

    Kubernetes Prefix가 Cloudflare Tunnel 정규식으로 전달되며 달라진 경로 매칭을 재현했습니다. 수정 PR과 실제 터널 요청 20개의 전후 비교를 정리했습니다.

    Read More

  • [PostgreSQL] Grafana를 SQLite에서 PostgreSQL로 옮겼습니다

    대시보드 53개와 즐겨찾기를 보존하며 Grafana의 설정 DB를 PostgreSQL로 이관했습니다. 81개 테이블 비교, DB 기동 대기, CloudNativePG 복제와 백업을 정리한 기록입니다.

    Read More

  • [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 없이…

    Read More

  • [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였습니다. 그런데…

    Read More