작업일: 2026-07-21
대상: self-hosting k3s 클러스터 (노드: oldbear 컨트롤플레인, borilikebook 라즈베리파이 워커)
오랫동안 관리하지 않은 k3s 홈랩 클러스터의 현황 파악 요청으로 시작. 작업 도중 kubectl 인증 문제, LiteLLM 미완성 설치, Longhorn 스토리지 장애, 1년 넘게 방치된 Rancher 생태계, k3s 버전 노후화 등을 순차적으로 발견하고 정리함.
~/.kube/config가 2025-02 시점의 낡은 사본이라, 2026-06-05에 재발급된 /etc/rancher/k3s/k3s.yaml과 인증서가 맞지 않아 kubectl 인증 실패.sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config && sudo chown igotoo:igotoo ~/.kube/config 실행 후 정상화.
fake-openai-endpoint, fake-key) 그대로 방치되어 있었음. Helm 릴리즈 자체가 failed(pre-install hook 실패) 상태였고, 과거 19,400회 재시작 이력 존재. 실사용 흔적 없음.open-webui-ingress에서 plm.igotoo.club 라우트 제거, Helm 릴리즈 제거.jellyfin-config, obsidian-couchdb 볼륨만 numberOfReplicas: 3으로 설정되어 있었음(다른 5개 볼륨은 전부 1). 실제 스토리지 가능 노드가 oldbear 하나뿐인 상황에서 3개 복제본을 채우려다 영구 degraded 상태에 빠지고, 그 여파로 엔진이 불안정해져 Jellyfin이 6일째 ContainerCreating(마운트 실패, Can't open blockdev)에 멈춰 있었음.numberOfReplicas를 1로 정정 → 즉시 healthy 전환. Obsidian CouchDB는 정상화됨.home-media 삭제).svclb-nginx-ingress... DaemonSet(nginx-proxy 네임스페이스, k3s 버전 마이그레이션 잔재) 삭제bunkerweb 네임스페이스 삭제rancher, rancher-monitoring(Grafana/Prometheus/kube-state-metrics 등) Deployment가 399일째 0/0으로 스케일다운되어 사실상 죽어있었음. 그 잔재로 APIService 2개(v1.ext.cattle.io, v1beta1.custom.metrics.k8s.io)가 MissingEndpoints 상태로 깨져 있었고, 이 때문에 네임스페이스 삭제 시 discovery 실패로 삭제가 멈추는 문제(bunkerweb 삭제가 안 되던 원인) 발견.rancher, rancher-webhook, rancher-monitoring, rancher-monitoring-crd, rancher-provisioning-capibunkerweb, cattle-dashboards 네임스페이스 강제 종료(죽은 Rancher finalizer controller.cattle.io/namespace-auth 수동 제거)fleet, fleet-agent-local, fleet-crd Helm 릴리즈 제거 + 관련 네임스페이스 15개 전부 삭제(cattle-fleet-*, cattle-global-*, cattle-impersonation-system, cattle-provisioning-capi-system, cattle-ui-plugin-system, cluster-fleet-local-*, fleet-default, fleet-local, local, p-4fr2q, p-xrwjv, user-txjhl, cattle-system, cattle-monitoring-system).
bundles, bundledeployments, contents, fleetworkspaces, clusters.provisioning.cattle.io 등)에 걸린 죽은 finalizer들도 다수 발견되어 하나씩 수동 제거.allowScheduling: false 설정longhorn-manager, longhorn-csi-plugin, engine-image-* DaemonSet 3개에 해당 노드를 제외하는 nodeAffinity 추가 → 반복되던 Evicted 파드 재생성 루프 해결v1.32.2+k3s1. Kubernetes 1.32는 2026-02-28 EOL(약 5개월째 보안 패치 없음), 1.33도 이미 2026-06-28 EOL. 최신 stable은 v1.36.2+k3s1.system-upgrade-controller(k3s 공식 자동 업그레이드 도구, Rancher와 무관하게 standalone 사용 가능)를 재설치.oldbear(컨트롤플레인) 업그레이드 성공.borilikebook(파이) 에이전트 업그레이드는 실제 디스크 압박으로 kubelet이 새 파드 admission 자체를 거부(taint/toleration으로 우회 불가한 kubelet 레벨 이슈)하여 최초 시도는 보류. 재시도 Plan은 일단 삭제(Evicted 파드 반복 생성 방지).borilikebook(192.168.86.146) 연결 타임아웃. oldbear에서 직접 테스트하면 ping/SSH 포트 모두 정상이라, 네트워크 자체보다 맥북↔파이 경로 문제로 판단.oldbear의 Tailscale이 0.0.0.0/0 (exit node) 광고만 하고 있고, 홈 LAN 서브넷(192.168.86.0/24) 라우팅은 광고하지 않고 있었음 → 파이 자체엔 Tailscale이 안 깔려 있어 맥북에서 도달 불가.sudo tailscale set --operator=igotoo (1회, 이후 sudo 없이 tailscale 명령 가능)tailscale set --advertise-routes=192.168.86.0/24,0.0.0.0/0,::/0 로 서브넷 라우트 추가 광고net.ipv4.ip_forward)은 이미 exit node 설정 때문에 켜져 있어 추가 조치 불필요ssh [email protected] 접속 성공 확인./dev/mmcblk0p2, 30G) 이고 /data/longhorn은 그 위의 디렉토리일 뿐이었음(별도 파티션 아님) → Longhorn 데이터(8KB)와 무관하게 SD카드 자체가 95%(27G/30G) 참./var/log(3.9G, journald 2.8G) 확인 → 부족분 추적하다 snap list에서 Docker/LXD가 설치되어 있음을 발견./var/snap/docker = 16G. docker ps -a 시도 시 데몬 소켓 자체가 없어 완전히 죽어있는 상태 확인(k3s는 containerd 자체 내장이라 Docker 불필요, dockershim 미사용).sudo snap remove --purge docker, sudo snap remove --purge lxd 실행 → SD카드 사용률 95%→41% (12G/30G)로 회복.DiskPressure 컨디션이 True → False로 완전히 해소됨.system-upgrade-controller로 나머지 단계 순차 진행: v1.33.13 → v1.34.9 → v1.35.6 → v1.36.2 (k3s1), 매 단계 서버(oldbear) 먼저 → 에이전트(borilikebook) 순서로 자동 진행, 단계마다 완료 확인 후 다음 단계 진행.NodeStatusUnknown이 뜨는 정상적인 과도기 상태를 몇 차례 거쳤으나 모두 자동 복구됨.helm uninstall은 기본적으로 CRD를 지우지 않기 때문에, Rancher/Fleet 제거 후에도 *.management.cattle.io, *.catalog.cattle.io, *.rke.cattle.io, *.rke-machine.cattle.io, *.rke-machine-config.cattle.io, *.ui.cattle.io 등 66개 CRD가 남아있던 것을 확인.addons.k3s.cattle.io, etcdsnapshotfiles.k3s.cattle.io, helmcharts.helm.cattle.io, helmchartconfigs.helm.cattle.io(전부 k3s 코어 기능), plans.upgrade.cattle.io(지금 쓰고 있는 system-upgrade-controller의 CRD).metadata.finalizers를 강제로 비워 완료.| 항목 | 상태 |
|---|---|
| 노드 | oldbear, borilikebook 둘 다 v1.36.2+k3s1(최신 stable), Ready |
| 비정상 파드 | 0개 |
| 깨진 APIService | 0개 |
| Longhorn 볼륨 | 6개 전부 healthy/attached (borilikebook는 스토리지 대상에서 완전 제외) |
| Helm 릴리즈 | argocd, code-server, longhorn, nextcloud, nginx-ingress, traefik-crd — 6개, 전부 정상 (navidrome은 유령 설치로 확인 후 제거) |
| 네임스페이스 | 15개, 전부 실사용 중 (Rancher/Fleet 잔재 없음) |
| Ingress | 6개(argocd, code, ttyd, podgrab, nextcloud, open-webui) 전부 정상 라우팅 |
borilikebook에서 도는 것 |
실서비스 없음. svclb-nginx-ingress, svclb-portainer-agent(트래픽 릴레이용) 2개뿐 |
borilikebook 원격 접속 |
Tailscale 서브넷 라우팅(192.168.86.0/24 via oldbear)으로 정상화 |
borilikebook 디스크 |
41% 사용(12G/30G), DiskPressure 해소 |
borilikebook의 Docker(16G) + LXD snap (완전히 죽어있던 미사용 설치)| 서비스 | 용도 | 네임스페이스 | 버전 | 설치/최근 배포일 | 외부 접속 |
|---|---|---|---|---|---|
| ArgoCD | GitOps 배포 자동화(CD) 도구 | argocd |
Helm argo-cd-7.8.23 (app v2.14.9) |
2025-04-13 | https://argocd.igotoo.club |
| Nextcloud | 개인 클라우드 스토리지/파일 동기화 | nextcloud |
Helm nextcloud-6.6.10 (app v30.0.10) |
최초 2025-03-21, 최근 배포 2025-05-02 | https://cloud.igotoo.club |
| Open WebUI | 셀프호스팅 ChatGPT형 AI 채팅 UI | open-webui |
ghcr.io/open-webui/open-webui:latest (Helm 미관리, 원본 매니페스트) |
2025-03-14 | https://oai.igotoo.club |
| code-server | 브라우저 기반 VS Code 개발 환경 | dev-code |
Helm code-server-3.28.0 (app v4.101.1) |
최초 2025-06-26, 최근 배포 2025-07-03 | https://code.igotoo.club |
| ttyd | 웹 기반 터미널(브라우저 SSH) | dev-tools |
tsl0922/ttyd (태그 미고정, latest 추정) |
2025-03-27 | https://ttyd.igotoo.club |
| Podgrab | 팟캐스트 다운로드/관리 | media |
akhilrex/podgrab:latest |
2025-04-13 | https://pod.igotoo.club |
| Obsidian LiveSync(CouchDB) | Obsidian 노트 앱 동기화 백엔드 | obsidian |
couchdb:3.3.3 |
2026-02-01 | 외부 도메인 없음, NodePort 30984(LAN/Tailscale로만 접근) |
| Portainer Agent | 원격 Portainer 서버에서 이 클러스터를 관리하기 위한 에이전트 (자체 웹 UI 없음) | portainer |
portainer/agent:2.27.0 |
2025-03-14 | 없음(에이전트만, Portainer 서버는 외부에 있는 것으로 추정) |
| Longhorn UI | 스토리지(Longhorn) 관리 대시보드 | longhorn-system |
Helm longhorn-1.8.1 |
2025-03-11 | 없음(ClusterIP만, 외부 미노출 — 필요시 port-forward로 접근) |
| 컴포넌트 | 역할 | 버전 | 비고 |
|---|---|---|---|
| nginx-ingress | 클러스터 진입점, 위 모든 *.igotoo.club 라우팅 담당 |
Helm ingress-nginx-4.8.3 (app v1.9.4) |
nginx-proxy 네임스페이스, 2025-02-27 설치 |
| cert-manager | Let's Encrypt 인증서 자동 발급/갱신 | v1.13.3 (Helm 미관리, 원본 매니페스트) |
2025-02-27 설치 |
| Longhorn | 분산 블록 스토리지(위 서비스들의 PVC 백엔드) | Helm longhorn-1.8.1 |
2025-03-11 설치 |
| traefik-crd | k3s 기본 번들 CRD | Helm traefik-crd-9.18.2 |
2025-02-26 설치. 실제 Traefik은 안 쓰고 있음 — nginx-ingress로 대체된 뒤 CRD만 잔존 (정리 후보) |
media 네임스페이스에 deployed 상태(revision 6)로 남아있었지만 실제로는 Deployment/Pod/Service/PVC가 전부 없는 유령 설치였음(Rancher 때와 같은 패턴 — Helm 상태와 실제 클러스터 상태 불일치). 데이터가 아예 없어(음악 라이브러리 PVC 미생성) 손실 없이 helm uninstall navidrome -n media로 완전히 제거함.system-upgrade-controller 유지 여부 — k3s 자동 업그레이드용으로 재설치해둔 상태. 향후 마이너 업그레이드 때 재사용 가능하니 그대로 두는 걸 권장하되, 필요 없으면 제거 가능.borilikebook에 core18/20/22/24 등 옛 revision이 disabled 상태로 남아 각각 소량의 공간을 차지 중(디스크 압박 원인은 아니었음). 필요시 snap list --all로 확인 후 정리 가능하나 우선순위 낮음.Rancher/Fleet 관련 잔재(Helm 릴리즈, 네임스페이스, CRD)는 이번 작업으로 전부 정리 완료.